我意识到你已找到一个解决方案,涉及通过Shim /禁用安全启动mokutil
; 但是,还有另一种方法:您可以自己签署内核。
概括而言,程序是:
- 生成您自己的安全启动密钥。你可以用这个
openssl
程序做到这一点。您需要将公钥DER文件复制到EFI系统分区(ESP),该分区通常安装在/boot/efi
。
- 签署您的内核文件。我使用一个名为的工具
sbsign
来做到这一点。在IIRC,Fedora支持另一个程序,我检查的最后一个程序使用起来更复杂。您需要重命名当前内核并将签名版本放在其位置或为新内核创建新的GRUB条目。
- 重新启动到EFI并启动MokManager。一些引导加载程序,比如我自己的rEFInd,提供了一种手动输入MokManager的方法。如果你没有,你可能需要跳过一些箍来让它工作。进入MokManager后,您需要找到复制到ESP的DER文件并将其添加到MOK列表中。
- 此时,当您重新启动时,即使安全启动处于活动状态,您也应该可以启动新签名的内核。
我的这个页面更详细地介绍了这个过程。这很乏味,与禁用安全启动相比可能不值得付出努力 - 但话说回来,也许就是这样。您必须判断是否要跳过这些环以继续使用安全启动激活启动。
另请注意,如果安装rEFInd,它可能会生成一组安全启动密钥并将其存储为/etc/refind.d/keys/refind_local.*
。(refind-install
如果必要的实用程序可用,脚本会执行此操作,但如果它们不可用则不会这样做。)因此,如果您曾经安装过rEFInd,则可能已经完成了步骤#1。然后,您可以使用本地rEFInd键对内核进行签名。
这个程序也有一个变种。最新版本的Shim和MokManager使您能够注册二进制文件的哈希作为对其进行身份验证的方法。即使使用未签名的二进制文件也可以。因此,您可以注册内核的哈希以使其能够启动。这样做的麻烦在于,您需要注册要启动的每个未签名内核的哈希值。如果您只有一个正在运行的内核并且您不打算更新它,那么这可能不是什么大问题; 但如果你每两周更新一次内核,那么你将永远注册新的哈希值,这既麻烦又消耗越来越多的有限NVRAM空间。因此,这种方法在某些情况下稍微容易一些,但在其他情况下要差得多。