LinuCレベル3 プラットフォームスペシャリスト 仮想化基盤の構築 問16
仮想化基盤の構築/仮想化環境のセキュリティ設定UEFI Secure Bootを有効にしたLinuxゲストで、自分でビルドしたカーネルモジュールを読み込もうとしたところ、署名の検証に失敗して読み込めなかった。Secure Bootを有効にしたまま対処する方法として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「仮想化基盤の構築」に対応。実際の試験問題ではありません)
- Aモジュールをinitramfsに含めて再生成し、ブートローダーより前の段階で読み込ませて検証を避ける
- Bモジュールのファイルをroot所有・パーミッション600に変更し、改ざんされていないことを示す
- CゲストのファームウェアをレガシーBIOSに切り替え、既存のモジュールを署名済みとして扱わせる
- D独自の鍵でモジュールに署名し、その公開鍵をmokutilでMOKとして登録して信頼させる
正解:D
解説
Secure Bootが有効な環境では、多くのディストリビューションのカーネルが、信頼された鍵で署名されていないカーネルモジュールの読み込みを拒否します。自作モジュールを使うには、自分で作成した鍵ペアでモジュールに署名し(カーネル付属のsign-file等)、その公開鍵をmokutil --importでMOK(Machine Owner Key)として登録します。次回起動時にMokManagerで登録を確定すると、その鍵で署名したモジュールが信頼されるようになります。
選択肢ごとの解説
- A誤り。initramfsから読み込まれるモジュールも同じカーネルが署名を検証するため、検証を避けることはできません。
- B誤り。ファイルの所有者やパーミッションは署名の有無と無関係で、署名検証の結果は変わりません。
- C誤り。レガシーBIOSにするとSecure Boot自体が使えなくなり、「有効にしたまま」という条件を満たしません。署名済みとして扱われることもありません。
- D正しい。自前の鍵で署名し、その鍵をMOKとして登録すれば、Secure Bootを有効にしたままモジュールを読み込めます。