UEFIブートプロセスについてもっと明確に説明したいと思います。以下のスクリーンショットは現在の構成を示しています。
UEFIがどのファイルを実行しているかを明確にする必要があります。 UEFIは/boot/efi/EFI/Ubuntu/grubx64.efi、/boot/efi/EFI/Ubuntu/shimx64.efi、または/boot/efi/EFI/Ubuntu/grub.cfgを実行しますか?
/boot/efi/EFI/Ubuntu/grub.cfgの内容を見ると、実行されるファイルであると仮定する/boot/grub/grub.cfgを指していることがわかりました。そうですか?
皆様のご協力ありがとうございます。ありがとう
答え1
sudo efibootmgr -v
あなたが探しているものを正確に表示します。
EFI variables are not supported on this system.
これを最初に実行する必要があると表示されたらsudo mount -t efivarfs none /sys/firmware/efi/efivars
。
答え2
BootCurrent: 0002
システムが現在UEFI NVRAM起動変数を使用して起動していることを示しますBoot0002
。
Boot0002* ubuntu HD(1,GPT,6ed9354d-32d8-427d-b570-d3cb80fe5986,0x800,0x100000)/File(\EFI\Ubuntu\shimx64.efi)
ubuntu
この変数は、PARTUUIDを使用してESP(EFIシステムパーティション)からファイルを起動する起動エントリを定義します。\EFI\Ubuntu\shimx64.efi
6ed9354d-32d8-427d-b570-d3cb80fe5986
したがって、shimx64.efi
Secure Boot 互換のシムであるファームウェアがロードされます。セキュアブートをサポートするほとんどすべてのx86システムのセキュアブートホワイトリスト(Secure Bootと呼ばれる)にあるMicrosoftのセキュアブートキーで署名されるため、db
ファームウェアでこれを実行できます。
shimx64.efi
Ubuntuのセキュアブート署名キーをホワイトリストに非永続的に追加します(このブートのみ)。 MOK(マシン所有者キー)が設定されている場合は、同じ方法でセキュアブートホワイトリストに追加されます。その後、シムはファームウェアにロードgrubx64.efi
して実行しようとします。
grubx64.efi
これは、UbuntuのSecure Boot署名キーで署名され(UbuntuがMicrosoftとの署名プロセスを繰り返すことなく更新できるようにします)、そのキーがshimx64.efi
Secure Bootホワイトリストに追加されるため、ファームウェアのgrubx64.efi
実行も許可されます。
Ubuntuはにある同じディレクトリにgrubx64.efi
小さなファイルをロードしますgrub.cfg
。実行されませんが、grubx64.efi
このファイルはGRUBに実際のGRUB構成ファイルを見つける方法を伝えます。
search.fs_uuid 8fe7176c-3a23-4902-b0db-14bfbacc6601 root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
(翻訳:UUIDを含むファイルシステムを見つけて8fe7176c-3a23-4902-b0db-14bfbacc6601
GRUBルートファイルシステムとして指定します。次に変数をにprefix
設定します。<GRUB root filesystem>/boot/grub
次に、grub.cfg
変数が指すディレクトリから読み込みますprefix
。)
最後に、GRUBはUEFIファームウェアにLinuxカーネルとinitramfsをメモリにロードし、カーネルの実行を試みるように指示します。カーネルがUbuntuのセキュアブート署名キー(MOK)でも署名されている場合、ファームウェアを介してカーネルが実行され、Linuxカーネルが起動します。カーネルは、セキュアブートキーのホワイトリストを読み取り、それを実行する前にカーネルモジュールの署名を検証するために使用される特別なカーネルキーリングに追加します。これはセキュアブートの実装要件です。セキュアブート署名に署名されていないコードの実行を許可するエントリがある場合カーネルモードで、これは「Secure Bootバイパスツール」と見なされ、将来のSecure BootファームウェアバージョンとSecure Bootブラックリストアップデートでブラックリストに追加されます。
実際には、セキュアブートが有効になっている場合、ディストリビューションのセキュアブートキーまたはMOKで署名されたカーネルモジュールのみがカーネルで許可されることを意味します。これは、セキュアブートが有効になっている単一のGRUBを使用して複数の異なるディストリビューションを起動する場合は、MOKを設定し、すべてのディストリビューション(現在のディストリビューションを「所有」したディストリビューションを除くshimx64.efi
)のカーネルに署名する必要があることを意味します。始めてください。
(理論的には、MicrosoftのSecure Bootキーで署名されたカーネルモジュールも許可されていますが、Microsoftで働いていない限り、これらのモジュールを持つ可能性はほとんどありません。)
initramfsファイルが署名されていないため、ファームウェアはそれを実行不可能なデータとして読み込みます。しかし、とにかく解凍する必要があるため問題はありません。カーネルはとにかくinitramfsデータを解凍し、それを別のメモリ位置に移動します。起動プロセスの一部です。この時点で、Linuxカーネルはプロセッサを完全に制御できるため、解凍されたinitramfsコンテンツを実行するために必要なすべてのメモリ領域の実行保護ビットを調整できます。ユーザーモードで(つまり、一般的なプロセスとして)まったく問題はありません。
カーネルモジュールがinitramfsからロードされても、Secure Bootの必須署名検証が適用されます。
答え3
で終わるすべてのファイル.efi
はuefi実行可能ファイルであり、実行できます。そのうちのいくつかはほぼ同じことをします。まさにカーネルをロードすることです。一部は署名されており(セキュアブートのため)、一部は署名されていません。 (望むよりhttps://askubuntu.com/questions/342365/what-is-the-difference- Between-grubx64-and-shimx64)
他のものはユーティリティです(例:mmx64.efi
MOK Updaterユーティリティ)。
で終わらない他のファイルは構成ファイルである可能性.efi
があります。たとえば、おgrub.cfg
読みくださいgrubx64.efi
。これがなければ、 grub は grub バイナリを変更したり、他の場所から設定ファイルを読み取らなくてもメニューを作成できません。設定ファイルは UEFI コンテキストでは実行できません。 (代替コンテキストビューでは、grub.efiは設定ファイルを実行するインタプリタです。)