在 GRUB 中启用 check_signatures

在 GRUB 中启用 check_signatures

我正在尝试创建一个新的 GRUB 映像,其中嵌入了公钥文件来验证 GRUB 加载的所有文件。所以我使用命令 grub-mkimage 手动创建一个新的 GRUB 核心映像。

grub-mkimage --config='./grub.cfg' --compression='auto' --pubkey='./grub.key' --output='./core_custom.efi' --format='x86_64-efi' --prefix='(hd0,gpt2)/grub' --verbose ext2 fshelp part_gpt pbkdf2 crypto password_pbkdf2 pbkdf2_test

grub.cfg 包含一个具有 pbkdf2 密码的超级用户(这就是我包含 pbkdf2 模块的原因),以防止操纵配置,从而导致密码保护不被加载。我还将变量寻呼机设置为 1。

但是在重新启动我的计算机并从新创建的 GRUB 映像启动后,GRUB 环境变量 check_signatures 未设置为强制执行(就像官方中提到的那样)GRUB2手册),当我在 GRUB shell 中输入 list_trusted 命令时,我传递给 grub-mkimage 命令的密钥并未列出,最后 verify_detached 命令也找不到公钥。
但 grub-mkimage 命令的详细日志清楚地表明密钥已被读取,并且当我在 GRUB shell 中手动加载密钥时,一切正常。

有关我的安装的信息:
-ArchLinux
-GRUB 2.04
-EFI 平台 -> GRUB x86_64-efi

答案1

我遇到了完全相同的问题,经过数小时的反复试验后终于找到了答案。至少可以说,GRUB 方面处理得很差,它只是默默地失败了。文档似乎也没有帮助,我无法找到有关此特定错误的任何有用信息。

解决方案非常简单 - 必须有一些模块预加载。对我来说,使用GRUB 2.04AMD64, 那些是:

  • 验证者
  • gcry_sha256
  • gcry_sha512
  • gcry_dsa
  • gcry_rsa

我得到的命令是:

grub-mkstandalone --verbose --format=x86_64-efi --output=grubsax64.efi --pubkey=grub.pub --modules="verifiers gcry_sha256 gcry_sha512 gcry_dsa gcry_rsa" boot/grub/grub.cfg=grub.cfg

这里重要的部分是--模块=“...”

我还尝试使用加载完全相同的模块插入模块grub配置文件, 但这行不通,必须像上面概述的那样完成。

根据产生的输出来判断grub-mk独立,这也应该适用于grub 镜像grub-mk独立在某些时候调用grub 镜像),虽然我自己没有测试过:

grub-mkimage ... verifiers gcry_sha256 gcry_sha512 gcry_dsa gcry_rsa

构建 GRUB 映像/二进制文件,重新启动,输入命令行,您会注意到受信任列表现在产生输出。进一步的测试表明签名检查现在按我的预期工作。


关于 GRUB 2.06 的编辑 21 年 4 月 23 日:

在 GRUB 2.06 中,验证者已从模块移至核心(请参阅这次提交),即它不再是一个单独的模块。因此,上述命令也需要更改:

grub-mkstandalone --verbose --format=x86_64-efi --output=grubsax64.efi --pubkey=grub.pub --modules="gcry_sha256 gcry_sha512 gcry_dsa gcry_rsa" boot/grub/grub.cfg=grub.cfg
grub-mkimage ... gcry_sha256 gcry_sha512 gcry_dsa gcry_rsa

相关内容