GRUB 设置安全启动

未完待续

  1. 创建 MOK:

    sudo pacman -S sbsigntools
    sudo mkdir /boot/MOK && cd /boot/MOK
    sudo openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=my Machine Owner Key/" -out MOK.crt
    sudo openssl x509 -outform DER -in MOK.crt -out MOK.cer
    
  2. 使用 SBAT 重新安装 GRUB:

    sudo grub-install --target=x86_64-efi --efi-directory=/boot --modules='tpm' --sbat /usr/share/grub/sbat.csv --bootloader-id=GRUB
    
  3. 使用 MOK 对内核和引导加载程序签名:

    sudo sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux
    sudo sbsign --key MOK.key --cert MOK.crt --output /boot/EFI/GRUB/grubx64.efi /boot/EFI/GRUB/grubx64.efi
    sudo cp /boot/EFI/GRUB/grubx64.efi /boot/EFI/BOOT/grubx64.efi
    
  4. 使用 mkinitcpio 后钩自动化内核签名:

    sudoedit /etc/initcpio/post/kernel-sbsign
    
    #!/usr/bin/env bash
    
    kernel="$1"
    [[ -n "$kernel" ]] || exit 0
    
    # use already installed kernel if it exists
    [[ ! -f "$KERNELDESTINATION" ]] || kernel="$KERNELDESTINATION"
    
    keypairs=(/boot/MOK/MOK.key /boot/MOK/MOK.crt)
    
    for (( i=0; i<${#keypairs[@]}; i+=2 )); do
        key="${keypairs[$i]}" cert="${keypairs[(( i + 1 ))]}"
        if ! sbverify --cert "$cert" "$kernel" &>/dev/null; then
            sbsign --key "$key" --cert "$cert" --output "$kernel" "$kernel"
        fi
    done
    
  5. 安装 Shim 和 MokManager:

    yay -S shim-signed
    sudo cp /usr/share/shim-signed/shimx64.efi /boot/EFI/BOOT/BOOTx64.EFI
    sudo cp /usr/share/shim-signed/mmx64.efi /boot/EFI/BOOT/
    
  6. 在 NVRAM 创建引导条目:

    sudo efibootmgr -cu -d /dev/sdX -p 1 -L 'Shim' -l '/EFI/BOOT/BOOTx64.EFI'
    
  7. 重启计算机。

参考:

posted @ 2025-07-28 02:40  Undefined443  阅读(26)  评论(0)    收藏  举报