Grub-EFIは「署名付き」Linuxカーネルのみを起動するようです。使用できるコマンドはありますか?尋ねるどの署名があるかを調べるためにカーネルイメージが提供されたら、どの署名があるかを確認しますか?
答え1
話す署名の種類によって異なります。 EFIシステムがある場合は、EFI実行可能ファイル(*.efi
)に署名し、EFIファームウェアが既知の署名を持つファイルのみを実行するように強制できます。これは…セキュアブート。 EFIバイナリの署名を確認するには、次のツールを使用できますsbverify
。
$ sbverify --no-verify signed-binary.efi
Signature verification OK
$ sbverify --no-verify unsigned-binary.efi
No signature table present
Unable to read signature data from unsigned-binary.efi
Signature verification failed
残念ながら、EFI署名を抽出して表示する簡単な方法が見つかりませんでした。 :(
さらに必要なのは、GRUB自体で起動中のモジュールとカーネルに有効な署名があることを確認する機能です(セキュアブートはGRUBバイナリ自体にのみ影響し、GRUBがロードするすべての項目は必ずしもEFI署名を必要としません)。これは(私の知る限り)普通で古い分離GPG署名です(たとえば、カーネルという名前の場合はvmlinuz-1.2.3
署名を含むファイルがあります)。vmlinuz-1.2.3.sig
簡単に表示して確認できます。
$ gpg --verify vmlinuz-1.2.3.sig vmlinuz-1.2.3
gpg: Signature made Tue Apr 1 12:34:56 2014 CEST using RSA key ID d3adb33f
gpg: Good signature from "John Doe <[email protected]>"
*.sig
カーネルにファイルがない場合は、明らかに署名されていません。
set check_signature=no
GRUBコマンドプロンプトに入力して、GRUBで署名検証を無効にできます。このトピックに関する詳細情報を入手できますここ(この機能は比較的新機能です。GRUB公式ウェブサイトには、この機能がないバージョン2.00オンラインマニュアルのみがあります。)また、独自のキーでモジュールとカーネルに署名し、GRUBに通知する方法も説明します。
答え2
たとえば、次のように使用できますsbverify
。
# sbverify --list /efi/EFI/refind/shimx64.efi.signed
warning: data remaining[1159744 vs 1322936]: gaps between PE/COFF sections?
signature 1
image signature issuers:
- /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011
image signature certificates:
- subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Windows UEFI Driver Publisher
issuer: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011
- subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011
issuer: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root
または:
# sbverify --list /boot/vmlinuz-5.7.11-amd64
signature 1
image signature issuers:
- /CN=morfikov's kernel-signing key
image signature certificates:
- subject: /CN=morfikov's kernel-signing key
issuer: /CN=morfikov's kernel-signing key
答え3
Andreasが提供した情報に基づいて、次の結論を下します。
作業システムにおけるGrub-EFI自体そしてLinuxカーネルは同じキーを使用して署名されます。動作していないシステムでは、Grub または Linux カーネルの両方が署名されません。あるシステムから別のシステムにLinuxカーネルをコピーしようとすると、Grubはカーネルに署名されていないと文句を言います。別途GPG署名はありません。 Grubは、内部PE署名であるSecure Bootと同じものを探しているようです。
OpenSUSEが32ビット版のLinuxカーネルに署名する方法を見つけることができれば...