如何让预发布的 Linux 内核与 SecureBoot 协同工作(Fedora 26)

如何让预发布的 Linux 内核与 SecureBoot 协同工作(Fedora 26)

我正在运行 Fedora 26,但为了暂停和恢复工作,我需要使用 Rawhide 内核(4.13.rc-1 或更高版本)(查看内核问题)。

我已经成功安装了 Rawhide 内核(4.13.rc-4),使用这些说明。不幸的是,正如该页面所述,如果不禁用 SecureBoot,这些内核将无法无缝运行。

不幸的是,由于 BIOS 错误,我无法禁用 SecureBoot(查看戴尔论坛)。

当我尝试启动时,引导加载程序显示如下内容:

...具有无效签名。您需要先加载内核。

如何使用启用了 SecureBoot 的 Rawhide/预发布内核?

答案1

Fedora 的问答网站上已经回答了这个问题:

https://ask.fedoraproject.org/en/question/109564/how-to-get-rawhide-kernel-to-work-with-secureboot-in-f26/?answer=109840#post-id-109840

基本上:

  • 以 root 身份运行mokutil --disable-validation并设置密码。
  • 重新启动,当 grub 加载时,它会询问您是否要运行 MOK 实用程序。我必须在 10 秒内按下一个键才能确保进入该实用程序。
  • 进入实用程序后,我选择“修改 MOK 配置”,输入密码,然后选择禁用 SecureBoot。请注意,这并没有禁用 BIOS SecureBoot - 它只是允许 GRUB 加载未签名的内核。(我猜 GRUB 仍然是签名的)。

答案2

我知道您已经找到了一种涉及通过 Shim/ 禁用安全启动的解决方案mokutil;但是,还有另一种方法:您可以自己签署内核。

概括来说,该程序如下:

  1. 生成您自己的安全启动密钥。您可以使用该openssl程序执行此操作。您需要将公钥 DER 文件复制到您的 EFI 系统分区 (ESP),该分区通常安装在/boot/efi
  2. 签署您的内核文件。我使用一个名为的工具sbsign来执行此操作。如果我没记错的话,Fedora 更倾向于另一个程序,据我上次检查,它使用起来更复杂。您需要重命名当前内核并将您的签名版本放在其位置,或者为您的新内核创建一个新的 GRUB 条目。
  3. 重新启动进入 EFI 并启动 MokManager。一些引导加载程序(例如我自己的 rEFInd)提供了手动进入 MokManager 的方法。如果您的引导加载程序没有提供,您可能需要克服一些困难才能使其正常工作。进入 MokManager 后,您需要找到复制到 ESP 的 DER 文件并将其添加到您的 MOK 列表中。
  4. 此时,当您重新启动时,即使安全启动处于活动状态,您也应该能够启动新签名的内核。

这个过程在我的这个页面。这很繁琐,与禁用安全启动相比,可能不值得付出努力——但话又说回来,也许值得。您必须做出判断,是否要跳过这些环节以继续在安全启动处于活动状态的情况下进行启动。

还要注意,如果您安装了 rEFInd,它可能会生成一组安全启动密钥并将它们存储为/etc/refind.d/keys/refind_local.*。(refind-install如果必要的实用程序可用,脚本会执行此操作,但如果不可用,则不会执行此操作。)因此,如果您曾经安装过 rEFInd,步骤 #1 可能已经完成。然后,您可以使用本地 rEFInd 密钥来签署您的内核。

此过程还有一种变体。Shim 和 MokManager 的最新版本允许您注册二进制文件的哈希值,以此作为对其进行身份验证的一种方式。这甚至适用于未签名的二进制文件。因此,您可以注册内核的哈希值以使其能够启动。这样做的麻烦在于,您需要注册要启动的每个未签名内核的哈希值。如果您只有一个工作内核并且不打算更新它,这可能不是什么大问题;但如果您每隔几周更新一次内核,您将永远注册新的哈希值,这既麻烦又会消耗越来越多的有限 NVRAM 空间。因此,这种方法在某些情况下会容易一些,但在其他情况下则要糟糕得多。

相关内容