当尝试在基于 Debian 的自定义系统中设置 secureboot 时,如果 SB 打开,则 grub 不会加载。我使用 shim(由 MS 签名)作为第一阶段引导加载程序。现在我打算使用MOK来签署grub2和内核。所以步骤是:
创建私钥和公钥。公钥采用 .der 和 .pem 格式。
2.a.
grub-mkstandalone --format x86_64-efi /boot/grub/grub.efi -o grub.efi.unsigned
2.b
sbsign --key ~/my.priv --cert ~/my.pem grub.efi.unsigned --output grub.efi
2.
cp grub.efi /boot/efi/EFI/mylinux/grubx64.efi
mokutil --import my.der
重启并将密钥注册到 MOK 管理中
在 UEFI 设置中启用 secureboot 并启动。
所以会发生什么情况是 shim 被加载,但当它启动 grub 时,它拒绝加载模块 normal.mod 并出现 error Secureboot forbids to load module (memdisk)/boot/grub/x86_64-efi/normal.mod
。它会掉落到 grub 救援 shell 中。
所以我的问题是这个问题是否与 MOK 密钥未正确加载有关?所以我用 Debian 签名的 grub 进行了测试,由他们的密钥签名,受 shim 信任。然后 grub 启动正常,但 ofc 停止找不到配置文件。我可以手动添加它并启动。 grub 设置中不强制执行签名验证。所以 Debian 密钥加载良好。
我的下一个疑问是创建 grub 的过程有问题。我阅读了 SE、Debian 和 arch wiki 等的资料,找不到任何可行的解决方案。
任何见解都深表赞赏。
答案1
使用该grub-mkstandalone
命令时,需要预先加载带有--modules=module_list
.secureboot
只能使用列表中的这些模块。
例子:
MODULES="all_video archelp boot bufio configfile crypto echo efi_gop efi_uga ext2 extcmd \
fat font fshelp gcry_dsa gcry_rsa gcry_sha1 gcry_sha512 gettext gfxterm linux linuxefi ls \
memdisk minicmd mmap mpi normal part_gpt part_msdos password_pbkdf2 pbkdf2 reboot relocator \
search search_fs_file search_fs_uuid search_label sleep tar terminal verify video_fb"
grub-mkstandalone -d /usr/lib/grub/x86_64-efi -O x86_64-efi --modules "$MODULES" --pubkey gpg.key --output grubx64.efi boot/grub/grub.cfg=grub.init.cfg boot/grub/grub.cfg.sig=grub.init.cfg.sig -v