とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

ThinkPad T460sでセキュアブート

今までずっとインセキュアおじさんでした。

本日、某弊社チャットでFedora 39からsystemd-bootが使えるよっという情報が流れてきました。私はsystemd-bootがgummibootだったころからお世話になっていたので颯爽と会話に参加したのですが、「た◯かさん、セキュアブートどうしてんの?」っと聞かれて「切ってます」と答えるとGRUBはセキュアブートできるんだぜっという情報が・・・

悔しいのでセキュアブートをオンにしていきます。

前提条件

  • systemd-bootでブートローダーをセットアップしている方

インセキュアからの脱却

こちらを参考に進めていきます。

Unified Extensible Firmware Interface/セキュアブート - ArchWiki

っといっても今回やることはsbctlを使用して、鍵の作成から鍵の登録 、署名といった手順だけですので、そこまで大変ではありません。

インストール

ThinkPad T460s以外の環境であれば、こちらを参考にインストールしても大丈夫だと思います。

github.com

執筆時点で公開されているバージョンにはバグが存在します。

PRはすでにマージされているのですがリリースがまだされていないのでpacmanapkでインストールしてしまうとUEFIに鍵の登録ができないかもしれません。私は登録ができなくて少しハマりました。

バグの内容はこちらです。

簡単に説明すると、sbctlが証明書を生成するときにKeyUsageを設定してしまっているのでUEFIに登録できない状況となっていたようです。PRはKeyUsageを省略するための修正が入っていました。

KeyUsageを設定してしまうと、その用途以外では使用できない(とかでしたっけ?)ので、T460sのUEFIと相性が悪いんでしょうね、きっと。VirtualBoxでセキュアブートをオンにした時は、この問題は起きませんでした。

masterでビルドする場合は以下の手順です。

git clone https://github.com/Foxboron/sbctl.git
cd sbctl
make
make install PREFIX=/usr

PREFIXは好きな位置を指定しても大丈夫ですし、make installせずにビルドされたバイナリを./sbctlのように直接実行しても大丈夫です。

セットアップ

※ ここからは自己責任で行なってください。何があっても責任は負いかねます。

BIOSからセキュアブートをDisabled、Platform ModeをSetup Modeにします。

以下の作業はrootで実行します。

  • 状態を確認
# sbctl status

Installed:  ✗ sbctl is not installed
Setup Mode: ✗ Enabled
Secure Boot:    ✗ Disabled
Vendor Keys:    none
  • 鍵の作成
# sbctl create-keys

Created Owner UUID hoge-hoge-hoge-hoge-hoge
Creating secure boot keys...✓ 
Secure boot keys created!
  • 鍵をファームウェアに登録
# sbctl enroll-keys -m

Enrolling keys to EFI variables...
With vendor keys from microsoft...✓ 
Enrolled keys to the EFI variables!

-mはMicrosoftの鍵も一緒に登録するというオプションです。一部のファームウェアがMicrosoftの鍵で署名されているようで、一緒に登録してあげないとそのファームウェアが実行できないんだとか。Microsoftの鍵を登録しないという方法もあるようですが、何をしようとしているか理解してる人だけ実行してねっと書いてありますね。くわばらくわばら

  • 署名する

まずはどの鍵に署名したらいいのか確認してみましょう。

# sbctl verify

Verifying file database and EFI images in /boot...
✗ /boot/EFI/BOOT/BOOTX64.EFI is not signed
✗ /boot/EFI/systemd/systemd-bootx64.efi is not signed
✗ /boot/vmlinuz-linux is not signed

3ファイルくらい「署名されてないよ」っと言われたと思います。それぞれ署名します。

# sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI

✓ Signed /boot/EFI/BOOT/BOOTX64.EFI

# sbctl sign -s /boot/EFI/systemd/systemd-bootx64.efi

✓ Signed /boot/EFI/systemd/systemd-bootx64.efi

# sbctl sign -s /boot/vmlinuz-linux

✓ Signed /boot/vmlinuz-linux
  • 状態を確認
# sbctl status

Installed:  ✓ sbctl is installed
Owner GUID: hoge-hoge-hoge-hoge-hoge
Setup Mode: ✓ Disabled
Secure Boot:    ✗ Disabled
Vendor Keys:    microsoft

Setup ModeDisabledになりました。これでセットアップは完了です。

セキュアブートをオンにする

# sbctl status

Installed:  ✓ sbctl is installed
Owner GUID: hoge-hoge-hoge-hoge-hoge
Setup Mode: ✓ Disabled
Secure Boot:    ✓ Enabled
Vendor Keys:    microsoft

Secure BootがEnabledになっていれば成功です。bootctlからも見てみます。

# bootctl status
System:
      Firmware: UEFI 2.40 (Lenovo 0.5424)
 Firmware Arch: x64
   Secure Boot: enabled (user)
  TPM2 Support: no
  Boot into FW: supported

...

こちらから見ても大丈夫そうです。

まとめ

セキュアブートの設定は思っていたよりも簡単でした。これで今日から私もセキュアおじさんです。

もし文鎮になってしまったという方は書道の時に半紙を押さえるのに使ってみてください。