私は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
変数コントロール(プログラミング方式で?)がおよびに更新されますdb
。dbx
可能であれば、キーもこの変数に入れたいです。
このPK
変数はKEK変数の更新を制御し、1つのキーのみを保持します。システムメーカの主キーではないユーザの方が望ましい。
あなたのOvmfPkKek1.pem
ファイルはUEFIに必要なファイルかもしれませんが、できるだけ多くのフォーマットが必要になるかもしれません。
ファームウェアがPEMファイルを読み取れない場合(現状のまままたは*.cer
サフィックス*.crt
を含む)、DER形式に変換してみてください。
openssl x509 -in OvmfPkKek1.pem -inform PEM -out OvmfPkKek1.cer -outform DER
*.cer
DERファイルのサフィックスはまたはでなければなりません*.crt
。
一部のUEFIユーザーインターフェースは特に期待しています。EFI署名リストファイル(*.esl
)は、efisiglist
パッケージ内のコマンドを使用して生成することも、パッケージ内のコマンドを使用して生成することもpesign
できます。cert-to-efi-sig-list
efitools
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
パッケージのコマンドはefitools
sから*.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