セキュアブートを備えた GRUB のループバック モジュール

セキュアブートを備えた GRUB のループバック モジュール

私は Ubuntu 派生製品でマルチブート USB スティックを作成しています。オンラインで見つかったいくつかのチュートリアルに従いました。基本的には、ISO を USB スティックに入れて、スティックにインストールされている GRUB を使用して起動します。

しかし、次のような問題があります。私のスティックはセキュアブートをオンにしても動作するはずです。しかし、ISOを起動するにはループバックGRUBモジュールが必要ですが、セキュアブートをオンにして起動すると、セキュアブートはGRUBによるループバックモジュールのロードを禁止します。そのため、起動できません。

セキュアブートをオンにして、grub から ISO を起動できた人はいますか?

ありがとう

ヴァレリオ

答え1

現時点ではこれを回避しようとしています。

Ubuntu の grub は、セキュア ブート中にモジュールがロードされないように明示的にパッチされているようです。エラー メッセージは少し役に立ちません。ロードされているモジュールに関係なくエラーが発生すると、ファイル名が参照されるため混乱を招きます。

apt-get source grub-common
   ...
grep -C 10 "Secure Boot forbids" -r .
   ...
#ifdef GRUB_MACHINE_EFI
  if (grub_efi_secure_boot ())
    {
      grub_error (GRUB_ERR_ACCESS_DENIED,
                  "Secure Boot forbids loading module from %s", filename);
      return 0;
    }
#endif
...

これを追加するパッチは ./debian/patches/no_insmod_on_sb.patch です。

おそらく最善策は、ループバック サポートをハードコーディングするか、モジュールの読み込みを許可するかのいずれかで grub を再構築するか、USB から起動するときにセキュア ブートを無効にすることです (これは非常にまれなアクティビティであるため)。

grub にモジュールのロードを許可することで生じるセキュリティ上の意味合いはかなり複雑なので、これについてはコメントを避けます。誰かがすぐに私の間違いを指摘し、議論しなければならなくなるからです。

答え2

署名された grub イメージの現在のバージョン (少なくとも私がテストしたもの、Ubuntu 20.04 に付属のもの) にはloopbackモジュールが含まれているようですので、ロード/挿入する必要はありません。実際、上記の回答で既に述べたように、これは不可能です。Ubuntu インストール/ライブ環境と Windows 10 インストールを起動できる外付けドライブを作成するために使用した構成を投稿します。

最終的に、512MB の EFI、解凍された Windows ファイル用の 20GB の NTFS、Ubuntu ISO を含むその他すべて用の大きな FAT32 パーティションという、複数のパーティションを使用しました。Windows には 4GB を超えるインストール ファイルが含まれるようになったため、NTFS パーティションが必要になります。署名された grub イメージには現時点では exfat モジュールが含まれていないと思うので、ここでは NTFS が唯一の選択肢です。補足として、解凍された Windows ファイルはパーティション ルートに存在する必要があり、サブディレクトリに配置するとうまくいきませんでした。

以下は、EFI パーティションに grub をインストールするために使用した構成です。

sudo grub-install \
--boot-directory=[EFI mount point]/boot \
--efi-directory=[EFI mount point] \
--uefi-secure-boot \
--removable \
--target=x86_64-efi \
--no-bootsector \
/dev/sdaX

そして、これがgrub.cfgファイルです (最初のメニュー エントリの上の行は冗長だと思いますが、これが実際に使用した構成です)。

search --no-floppy --set=root --fs-uuid [UUID of EFI partition]
set prefix=($root)'/boot/grub'
configfile $root/EFI/BOOT/grub.cfg

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry 'Ubuntu 20.04.1' --class ubuntu --class gnu-linux --class gnu --class os {        
    set isodir='/images/ubuntu'
    set isoname='ubuntu-20.04.1-desktop-amd64.iso'
    set isofile=$isodir/$isoname
    
    search --no-floppy --set=isodev --fs-uuid [UUID of FAT32 partition]

    loopback loop0 ($isodev)/$isofile
    linux (loop0)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash
    initrd (loop0)/casper/initrd
}

menuentry 'Windows 20H2' {
    set efi_path=/efi/boot/bootx64.efi
    
    search --no-floppy --set=windev --fs-uuid [UUID of NTFS partition]
    chainloader ($windev)/$efi_path
}

menuentry 'UEFI Firmware Settings' {
    fwsetup
}

以上です。誰かにとって役に立つことを願っています。

関連情報