yoctoで構築されたLinuxバージョンのUEFIセキュリティブートを有効にする方法は?

yoctoで構築されたLinuxバージョンのUEFIセキュリティブートを有効にする方法は?

私はyoctoビルドを構築しており、使用しているIntelシステムでUEFIセキュリティブートを有効にしたいと思います。これはcore-image-minimalとMeta-Intelを使った非常に基本的なyoctビルドです。生成される成果物は次のとおりです。

./core-image-minimal-intel-corei7-64.wic
./bzImage-intel-corei7-64.bin
./bzImage--6.1.38+git0+d62bfbd59e_11e606448a-r0-intel-corei7-64-20240208204456.bin
./core-image-minimal-intel-corei7-64.manifest
./OvmfPkKek1.crt
./OvmfPkKek1.pem
./systemd-bootx64.efi
./core-image-minimal-intel-corei7-64-20240215181510.rootfs.tar.xz
./microcode.cpio
./modules-intel-corei7-64.tgz
./core-image-minimal-intel-corei7-64-20240215181510.rootfs.manifest
./microcode_20230808.cpio
./modules--6.1.38+git0+d62bfbd59e_11e606448a-r0-intel-corei7-64-20240208204456.tgz
./bzImage
./core-image-minimal-intel-corei7-64-20240215181510.testdata.json
./grub-efi-bootx64.efi
./ovmf.vars.qcow2
./core-image-minimal-intel-corei7-64.qemuboot.conf
./ovmf.secboot.code.qcow2
./linuxx64.efi.stub
./OvmfPkKek1.key
./ovmf.secboot.qcow2
./core-image-minimal-intel-corei7-64.tar.xz
./core-image-minimal-intel-corei7-64-20240215181510.rootfs.wic
./ovmf.code.qcow2
./core-image-minimal.env
./core-image-minimal-systemd-bootdisk-microcode.wks
./ovmf.qcow2
./core-image-minimal-intel-corei7-64-20240215181510.qemuboot.conf
./core-image-minimal-intel-corei7-64.testdata.json

私のブートパーティションは次のとおりです。

./loader
./loader/loader.conf
./loader/entries
./loader/entries/boot.conf
./EFI
./EFI/BOOT
./EFI/BOOT/bootx64.efi
./bzImage

このファイルを使用してセキュアブートを有効にする方法がわかりません。署名を登録するオプションがあり、bootx64.efiファイルを使用してこれを実行してから起動しようとすると、いくつかのbzImageエラーが発生し、セキュリティポリシー違反に関する内容が表示されます。

USBドライブにKali Linuxをランダムにインストールして同じプロセスを実行しようとしたときに、同様の(しかし異なる)エラーが発生しました。

「署名登録」、「PK登録」、「KEK登録」などのuefiオプションもあります。私はyoctoが生成するOvmfPkKek1 *ファイルを選択できることを望み、これらのオプションを試しましたが、これがキーであると仮定しましたが、uefiインターフェイスのブートパーティションを検索したときにコピーしたがディスクには表示されません。理由はわかりません。

このインストールをセキュアブートと連携させる方法についてのアイデアはありますか?

答え1

別のキーを入力する前に、PK(マスターキー)をクリアしてください。これにより、セキュアブートを有効にする必要があります。設定モードメジャーアップデートには最小限の制限が必要です。必要に応じて他のセキュアブートキー変数を更新したら、キーをPKに入力してセキュアブートを通常モードに戻します。

dbまずホワイトリストに登録されているので、キー変数にキーを入れる必要があります。*.efiホワイトリスト変数にキーで署名されたすべてのエントリは、特にブラックリストに登録されていない限り、セキュアブート実行を許可します。

キー変数dbxはブラックリストです。ブラックリストキーで署名されたファイルまたはハッシュがブラックリストハッシュと一致するファイルをロードすると、ファームウェアはそのファイルのロードおよび/または実行を許可しません。

セキュアブートが通常モードの場合、主要なKEK変数コントロール(プログラミング方式で?)がおよびに更新されますdbdbx可能であれば、キーもこの変数に入れたいです。

このPK変数はKEK変数の更新を制御し、1つのキーのみを保持します。システムメーカの主キーではないユーザの方が望ましい。

あなたのOvmfPkKek1.pemファイルはUEFIに必要なファイルかもしれませんが、できるだけ多くのフォーマットが必要になるかもしれません。

ファームウェアがPEMファイルを読み取れない場合(現状のまままたは*.cerサフィックス*.crtを含む)、DER形式に変換してみてください。

openssl x509 -in OvmfPkKek1.pem -inform PEM -out OvmfPkKek1.cer -outform DER

*.cerDERファイルのサフィックスはまたはでなければなりません*.crt

一部のUEFIユーザーインターフェースは特に期待しています。EFI署名リストファイル(*.esl)は、efisiglistパッケージ内のコマンドを使用して生成することも、パッケージ内のコマンドを使用して生成することもpesignできます。cert-to-efi-sig-listefitools

DER形式の証明書をEFI署名リストに変換するには:

efisiglist --outfile OvmfPkKek1.esl --add --certificate=OvmfPkKek1.cer

または

cert-to-efi-sig-list OvmfPkKek1.cer OvmfPkKek1.esl

セキュアブート設定モードでない場合(たとえば、PKを設定する場合)、ファームウェアユーザーインターフェイスはESLファイルのみを許可できます。証明書が KEK または PK キー変数のセキュアブートキーを使用して署名される。これは、実行中のオペレーティングシステムでプログラム的にセキュアブートキーを更新するのと同じ規則に従います。もしそうなら、これらのファイルの推定サフィックスは*.auth

sign-efi-sig-listパッケージのコマンドはefitoolssから*.authファイルを生成できます*.esl*.auth同じ物理キーを使用しても、各キー変数に対して別々のファイルを生成する必要があります。

sign-efi-sig-list -a -c OvmfPkKek1.pem -k OvmfPkKek1.key db OvmfPkKek1.esl signed-key-for-db.auth
sign-efi-sig-list -a -c OvmfPkKek1.pem -k OvmfPkKek1.key KEK OvmfPkKek1.esl signed-key-for-KEK.auth
sign-efi-sig-list -a -c OvmfPkKek1.pem -k OvmfPkKek1.key PK OvmfPkKek1.esl signed-key-for-PK.auth

関連情報