Arch Linuxでもセキュアブートしたい!
ひでまるブログ

Arch Linuxでもセキュアブートしたい!

Arch Linuxでもセキュアブートしたい!

ひでまる

2025/05/07に公開

Windows 11と共存するためにセキュアブートを有効にしないといけなくて激おこです。

原作:山田鐘人/作画:アベツカサ 漫画「葬送のフリーレン」第25話より

冗談はさておき、筆者はWindows 11とArch Linuxをデュアルブートしているのですが、Windows 11の要件のセキュアブートをオフにするのは不都合が生じるので、Arch Linuxでもセキュアブートを可能にできるように構築する必要があります。

筆者の環境

M/B: MSI B550 Gaming Plus
ブートローダー: grub2

  • EFIパーティションは/bootにマウントされている
Terminal window
🌱 hide@slimelinux in 🏠 ~ x86_64
lsblk
NAME 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 BootSetup Modeなどのキーワードで検索してみてください。

msiマザーは少し特殊なので、上記の操作の他に以下の操作も行う必要があります。一度これを知らずに躓いた・・・

お使いのマザーボードによっては、セキュアブートの設定が以下のいずれかの場所にある可能性があります。

  • SettingsAdvancedWindows OS ConfigurationSecure Boot
  • SecuritySecure 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」に変更してください。

出典: https://github.com/Foxboron/sbctl/wiki/FQ0001 (翻訳済み)

必要なパッケージをインストールする

Terminal window
sudo pacman -S sbctl

GRUBのエントリーを作成する

Terminal window
🌱 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.cfg
Generating grub configuration file ...

SBCTLでセキュアブートを有効にする

ここまでの作業の確認でsbctl statusを実行すると、Setup ModeEnabledになっていて、Secure BootDisabledになっていることが確認できます。

Terminal window
🌱 hide@slimelinux in 🏠 ~ x86_64 took 53s
sbctl status
Installed: sbctl is installed
Owner GUID: <uuid>
Setup Mode: Enabled
Secure Boot: Disabled
Vendor Keys: none
Firmware: Your firmware has known quirks
- FQ0001: Defaults to executing on Secure Boot policy violation (CRITICAL)
https://github.com/Foxboron/sbctl/wiki/FQ0001

セキュアブートの鍵を作成して登録します。以下の2つのコマンドを実行してください。

Terminal window
# 鍵を作成する
sudo sbctl create-keys
# 鍵をEFI変数に登録する
sudo sbctl enroll-keys -m

ここで、sbctl enroll-keys -mを実行すると、With vendor keys from microsoft...と表示されるので、これでセキュアブートの鍵が登録されます。
-mはMicrosoftの鍵を登録するオプションで、これをしないと環境によっては起動できなくなるとか・・・おそろしや。

Terminal window
🌱 hide@slimelinux in 🏠 ~ x86_64
sudo sbctl create-keys
Created Owner UUID <uuid>
Secure boot keys have already been created!
🌱 hide@slimelinux in 🏠 ~ x86_64
sudo sbctl enroll-keys -m
Enrolling keys to EFI variables...
With vendor keys from microsoft...✓
Enrolled keys to the EFI variables!

ここで、今一度sbctl statusを実行すると、Vendor Keysmicrosoftの鍵が追加されていることが確認できます。状況確認は大切です。

Terminal window
# Vendor Keysにmicrosoftの鍵が追加されれば問題ない
🌱 hide@slimelinux in 🏠 ~ x86_64
sbctl status
Installed: sbctl is installed
Owner GUID: <uuid>
Setup Mode: Enabled
Secure Boot: Disabled
Vendor Keys: microsoft
Firmware: Your firmware has known quirks
- FQ0001: Defaults to executing on Secure Boot policy violation (CRITICAL)
https://github.com/Foxboron/sbctl/wiki/FQ0001

カーネルなどを鍵で署名する

どのファイルに署名するか確認するために、sbctl verifyを実行します。ぞろぞろと署名するべきファイルが表示されるので、これらに署名します。ファイルが多くて嫌になっちゃう。

Terminal window
🌱 hide@slimelinux in 🏠 ~ x86_64
sudo sbctl verify
Verifying 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>を実行してくださいね。苦行です。

Terminal window
sudo sh -c "sbctl verify | sed 's/✗ /sbctl sign -s /e'"

全てのファイルに署名を行ったらsbctl verifyで全てのファイルに署名されていることを確認してください。もし、署名漏れに気づかずに再起動したら恐ろしや頑張ってください。署名済みのファイルにはチェックマークがついてます。

Terminal window
🌱 hide@slimelinux in 🏠 ~ x86_64
sudo sbctl verify
Verifying 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が起動します。個人利用のマシンなのでセキュアブートを有効化してもそれといった実感は得られませんね・・・

fastfetch

さいごに

必要に追われてセキュアブートを有効化しましたが思いの外簡単にできて、肩透かしをくらった気持ちです。調べるのが大変だった・・・

Other articles