こっち(2021-03-09-arch-secureboot)が古くなってたので書きました。
いちいちhashをenrollしなくてもいい版です。
インストール
yay -S shim-signed mokutil sbsigntools
鍵作成
mkdir -p /var/lib/shim-signed/mok
cd !$
openssl req -newkey rsa:4096 -noenc -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=my Machine Owner Key/" -out MOK.crt
openssl x509 -outform DER -in MOK.crt -out MOK.cer # MokManagerにenrollするのにDERフォーマットな証明書が必要
grubのstandalone版を生成
grub-mkconfig -o /tmp/grub.cfg
grub-mkstandalone -O x86_64-efi --sbat=/usr/share/grub/sbat.csv -o /boot/efi/EFI/artix/grubx64.efi "/boot/grub/grub.cfg=/tmp/grub.cfg"
さっきの鍵で起動したいファイルに署名
sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux
sbsign --key MOK.key --cert MOK.crt --output /boot/efi/EFI/artix/grubx64.efi /boot/efi/EFI/artix/grubx64.efi
shimとMokManagerのefiバイナリをコピー && NVRAMにエントリ作成
cp /usr/share/shim-signed/shimx64.efi /boot/efi/EFI/artix/BOOTx64.EFI
cp /usr/share/shim-signed/mmx64.efi /boot/efi/EFI/artix/
cp /var/lib/shim-signed/mok/MOK.cer /boot/efi/EFI/artix/
efibootmgr --unicode --disk /dev/nvme0n1 --part 1 --create --label "Shim" --loader "\EFI\artix\BOOTx64.EFI"
それぞれのUEFIの設定を変更するなどしてShimを起動 > Enroll key from disk > MOK.cerを選択 > Continue > Yes > Continue Boot
DKMSも自己署名する
/etc/dkms/framework.conf.d/module-signing.conf
sign_file="/lib/modules/$(uname -r)/build/scripts/sign-file"
mok_signing_key=/var/lib/shim-signed/mok/MOK.key
mok_certificate=/var/lib/shim-signed/mok/MOK.cer
MokManagerにenrollした.cerを削除
mokutil --delete /var/lib/shim-signed/mok/MOK.cer
アップグレードされたカーネルに署名を自動化
https://wiki.archlinux.org/title/Secure_Boot#shim_with_key
懸念と解決
grubからカーネルパラメーターを編集できてしまったら/bootへの書き込み権限が得られるのではないか(init=/bin/bashなど)
root(/)を暗号化していても同じです(cryptdeviceパラメーター)。
cryptdeviceパラメーターを消してinit=/bin/bashなどを付けると正常に起動できませんが暗号化されていないパーティションをマウントができてしまいます。
なのでgrubにパスワードをかけましょう。
https://wiki.archlinux.org/title/GRUB/Tips_and_tricks#Password_protection_of_GRUB_menu
さらにカーネルパラメーターを編集する時以外はパスワードを要求しないようにもできます。
USBブートができてしまったらファイル書きかえできてしまう。
UEFIで内蔵ディスク以外を起動不可に設定してBIOSパスワードをかけましょう。