Windows 11と共存するためにセキュアブートを有効にしないといけなくて激おこです。
冗談はさておき、筆者はWindows 11とArch Linuxをデュアルブートしているのですが、Windows 11の要件のセキュアブートをオフにするのは不都合が生じるので、Arch Linuxでもセキュアブートを可能にできるように構築する必要があります。
筆者の環境
M/B: MSI B550 Gaming Plus
ブートローダー: grub2
- EFIパーティションは/bootにマウントされている
🌱 hide@slimelinux in 🏠 ~ x86_64❯ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS# Arch Linux用のディスクnvme0n1 259:0 0 931.5G 0 disk├─nvme0n1p1 259:2 0 1G 0 part /boot├─nvme0n1p2 259:3 0 476.8G 0 part /├─nvme0n1p3 259:4 0 22.4G 0 part [SWAP]└─nvme0n1p4 259:5 0 431.3G 0 part /mnt/game# Windows用のディスクnvme1n1 259:1 0 931.5G 0 disk├─nvme1n1p1 259:6 0 100M 0 part├─nvme1n1p2 259:7 0 16M 0 part└─nvme1n1p3 259:8 0 931.4G 0 partセキュアブートをセットアップする
前提として、現在セキュアブートを無効にしている状態で作業しています。また、ブートローダーについてはgrub2を使っていて、systemd-bootについてはこの記事では説明いたしません。
BIOSをセットアップモードにする
BIOSを開いてセキュアブートをDisabledにしたのち、セットアップモードをEnabledに変更します。さいごに、EFI変数を全て削除してBIOS側で行う操作はおしまいです。変更方法についてはマザーボードメーカーによって異なるので、Secure BootやSetup Modeなどのキーワードで検索してみてください。
msiマザーは少し特殊なので、上記の操作の他に以下の操作も行う必要があります。一度これを知らずに躓いた・・・
お使いのマザーボードによっては、セキュアブートの設定が以下のいずれかの場所にある可能性があります。
- Settings → Advanced → Windows OS Configuration → Secure Boot
- Security → Secure Boot
「Secure Boot Mode」を「Custom」に変更してください。
ファームウェアのバージョンによっては、「Image Execution Policy」または「Secure Boot Preset」というオプションが表示されることがあります。
- 「Image Execution Policy」がある場合
「Option ROM」「Removable Media」「Fixed Media」を開き、「Always Execute」から「Deny Execute」に変更してください。- 「Secure Boot Preset」がある場合 > 「Maximum Security」に変更してください。
必要なパッケージをインストールする
sudo pacman -S sbctlGRUBのエントリーを作成する
🌱 hide@slimelinux in 🏠 ~ x86_64 took 4s❯ sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB --modules="tpm" --disable-shim-lock[sudo] hide のパスワード:Installing for x86_64-efi platform.Installation finished. No error reported.
🌱 hide@slimelinux in 🏠 ~ x86_64 took 2s❯ sudo grub-mkconfig -o /boot/grub/grub.cfgGenerating grub configuration file ...SBCTLでセキュアブートを有効にする
ここまでの作業の確認でsbctl statusを実行すると、Setup ModeがEnabledになっていて、Secure BootがDisabledになっていることが確認できます。
🌱 hide@slimelinux in 🏠 ~ x86_64 took 53s❯ sbctl statusInstalled: ✓ sbctl is installedOwner GUID: <uuid>Setup Mode: ✗ EnabledSecure Boot: ✗ DisabledVendor Keys: noneFirmware: ‼ Your firmware has known quirks - FQ0001: Defaults to executing on Secure Boot policy violation (CRITICAL) https://github.com/Foxboron/sbctl/wiki/FQ0001セキュアブートの鍵を作成して登録します。以下の2つのコマンドを実行してください。
# 鍵を作成するsudo sbctl create-keys
# 鍵をEFI変数に登録するsudo sbctl enroll-keys -mここで、sbctl enroll-keys -mを実行すると、With vendor keys from microsoft...と表示されるので、これでセキュアブートの鍵が登録されます。
-mはMicrosoftの鍵を登録するオプションで、これをしないと環境によっては起動できなくなるとか・・・おそろしや。
🌱 hide@slimelinux in 🏠 ~ x86_64❯ sudo sbctl create-keysCreated Owner UUID <uuid>✓ Secure boot keys have already been created!
🌱 hide@slimelinux in 🏠 ~ x86_64❯ sudo sbctl enroll-keys -mEnrolling keys to EFI variables...With vendor keys from microsoft...✓Enrolled keys to the EFI variables!ここで、今一度sbctl statusを実行すると、Vendor Keysにmicrosoftの鍵が追加されていることが確認できます。状況確認は大切です。
# Vendor Keysにmicrosoftの鍵が追加されれば問題ない🌱 hide@slimelinux in 🏠 ~ x86_64❯ sbctl statusInstalled: ✓ sbctl is installedOwner GUID: <uuid>Setup Mode: ✗ EnabledSecure Boot: ✗ DisabledVendor Keys: microsoftFirmware: ‼ Your firmware has known quirks - FQ0001: Defaults to executing on Secure Boot policy violation (CRITICAL) https://github.com/Foxboron/sbctl/wiki/FQ0001カーネルなどを鍵で署名する
どのファイルに署名するか確認するために、sbctl verifyを実行します。ぞろぞろと署名するべきファイルが表示されるので、これらに署名します。ファイルが多くて嫌になっちゃう。
🌱 hide@slimelinux in 🏠 ~ x86_64❯ sudo sbctl verifyVerifying file database and EFI images in /boot...✗ /boot/grub/x86_64-efi/core.efi is not signed✗ /boot/grub/x86_64-efi/grub.efi is not signed✗ /boot/vmlinuz-linux-cachyos-bore-lto is not signed✗ /boot/EFI/BOOT/BOOTX64.EFI is not signed✗ /boot/EFI/GRUB/grubx64.efi is not signed✗ /boot/EFI/mmx64.efi is not signed✗ /boot/vmlinuz-linux is not signed✗ /boot/vmlinuz-linux-cachyos-rt-bore-lto is not signedこのコマンド一つで全てのファイルに署名できると思います。できなかった場合はファイルごとにsudo sbctl sign -s <file>を実行してくださいね。苦行です。
sudo sh -c "sbctl verify | sed 's/✗ /sbctl sign -s /e'"全てのファイルに署名を行ったらsbctl verifyで全てのファイルに署名されていることを確認してください。もし、署名漏れに気づかずに再起動したら恐ろしや頑張ってください。署名済みのファイルにはチェックマークがついてます。
🌱 hide@slimelinux in 🏠 ~ x86_64❯ sudo sbctl verifyVerifying file database and EFI images in /boot...✓ /boot/EFI/mmx64.efi is signed✓ /boot/grub/x86_64-efi/grub.efi.bak is signed✓ /boot/vmlinuz-linux-cachyos-bore-lto is signed✓ /boot/vmlinuz-linux-cachyos-rt-bore-lto is signed✓ /boot/EFI/GRUB/grubx64.efi is signed✓ /boot/grub/x86_64-efi/core.efi is signed✓ /boot/grub/x86_64-efi/grub.efi is signed✓ /boot/vmlinuz-linux is signed✓ /boot/EFI/BOOT/BOOTX64.EFI is signedセキュアブートを有効にして再起動する
sbctlでの作業は終わったので、さいごにセキュアブートを有効にして再起動すると、いつも通りのArch Linuxが起動します。個人利用のマシンなのでセキュアブートを有効化してもそれといった実感は得られませんね・・・
さいごに
必要に追われてセキュアブートを有効化しましたが思いの外簡単にできて、肩透かしをくらった気持ちです。調べるのが大変だった・・・