正如标题所示,我正在尝试设置一个系统,该系统使用 PXE 引导通过自定义签名密钥引导到 CentOS7。这个过程改编自多个指南grub.cfg
,但其要点是我使用 grubinitramfs.gz
从tftpserver
.这些均通过 GPG 签名进行验证。
但是后来我收到错误,我的 Linux 内核未正确签名,而它是用我自己的数据库密钥签名的以进行安全启动。密钥应正确安装在 UEFI 中,因为grub
EFI 二进制文件也经过签名,并且还应通过 secureboot 进行验证。此外,我还通过命令行检查了 GPG 验证是否成功grub
,确实如此。
之后,我在网上阅读了一些文章,得出的结论是我应该使用 shim 作为第一阶段引导加载程序(并使用相同的数据库密钥对其进行签名)。因此,从 Centos 虚拟机复制它并将 DHCP 服务器指向 shim。问题仍然存在,因为它给出了相同的错误消息,但现在它还给出了位置:
error: ../../grub-core/loader/i386/efi/linux.c:215:/vmlinuz has invalid signature.
我似乎找不到 grub 中负责的文件,因为它可能是不同的版本。我的搜索让我找到了这个红帽文章。
然而这篇文章是在付费墙后面......我不是要求访问该文章(我不确定是否允许),因为这可能是一个完全不同的问题。我还尝试shim
自行构建,在构建过程中提供 DER 加密密钥,但这似乎没有任何改变。
我也是新手shim
,不确定机器操作员密钥 (MOK) 的使用是否是强制性的,或者仅使用 DB 密钥对其进行签名是否就足够了。
你们有人给我指点吗?谢谢
答案1
我还尝试构建一个 PXE 环境,我想在其中通过 PXE 启动 CentOS、Clonezilla-live 和其他操作系统,并让客户端启用安全启动。
我用过这个指南 https://docs.centos.org/en-US/8-docs/advanced-install/ assembly_preparing-for-a-network-install/
因此,当我启动 CentOS 时,当我尝试启动 clonezilla 时,它工作得很好,它给出: /Tftppath/clonezilla/vmlinuz 有无效签名
我想更好地了解自签名 shim、grub 和内核的过程,以便我可以安全启动各种操作系统。
您能否详细说明一下您遵循的流程?谢谢!!
答案2
我解决了。所以我的问题是我不明白如何手动部署密钥shim
,因为大多数方法都在自己的系统上使用 mokmanager。此方法不适用于 PXE,因为您想从另一个系统引导。在尝试了不同的事情以及查看shim
源代码之后,我在拱门维基,这是关于 secureboot 的。该页面最初没有引起我的注意,因为它没有提及PXE
.我想使用shim
密钥来更轻松地更新。那里有一句话说你可以将DER
编码的公钥复制到FAT
文件系统,通常使用EFI分区。
因此,最终我使用了shim
从PXE
服务器系统复制的二进制文件,然后使用存储在 EFI 分区中的公钥来验证 Linux 内核和grub
二进制文件。可能还需要检查是否可以使用 Microsoft/Windows/CentOS 签名启动内核,因此如果您想要完全控制,可以将其删除。