仅使用 UEFI 引导加载程序和 Grub2 进行安全引导

仅使用 UEFI 引导加载程序和 Grub2 进行安全引导

我正在 Linux 系统上工作,想要配置 secureboot。有趣的是我拥有系统的所有部分,包括 UEFI 引导加载程序。

我想知道是否有人可以告诉我是否缺少启动过程的任何部分:

  1. 通电,开始执行UEFI引导加载程序
  2. UEFI 引导加载程序具有编译的密钥,用于验证 Grub2(和 grub.cfg)并开始执行它
  3. Grub2 接收相同的密钥(通过 efi magic),使用它来验证内核,并开始执行它 #3 项目符号是我完全不确定的。即使我根本不与 Microsoft CA 打交道,我是否需要 Shim? Grub2有验证内核的代码吗,还是必须通过Shim?

最重要的是,我想使用我自己的密钥,并且仅使用我自己的密钥来验证 grub2 和内核。我需要什么才能实现这一点?

答案1

我宁愿将启动过程描述为:

1.) 通电,开始执行支持安全启动的 UEFI 固件

2.) 固件根据存储在系统 NVRAM(或编译默认值)中的安全启动密钥集检查任何潜在的引导加载程序。

3.) 引导加载程序应该以相同的方式检查操作系统内核。

4.) 为了符合安全启动并有意义地有效,Linux 内核还应该以加密方式检查加载的任何内核模块。

现代内核包括第 4) 点的可选功能:在支持安全启动的系统上启动时,RedHat 等企业发行版的内核会自动启用该功能。可以在编译时为自定义内核提供签名密钥。

对于 RedHat 内核,在运行时,允许的密钥列表为(用于签署主内核的密钥)+(安全启动db密钥集中的任何内容)+(MOK所使用的集中允许的密钥shim.efi,如果存在)。

因此,如果您使用安全启动并计划将第三方内核模块与分发内核一起使用,则需要对它们进行签名并在允许列表中获取签名密钥。但是,如果您推出自己的内核和/或控制了安全启动密钥,则您的安全启动私钥也可用于签署第三方模块。

为了让您能够控制安全启动,您的系统需要允许您修改安全启动密钥。您感兴趣的有四(组)键:

  • db,公共证书的集合允许引导加载程序和/或 SHA256 校验和允许引导装载程序
  • dbx一组公共证书和/或校验和明确列入黑名单引导加载程序。
  • KEK,用于验证任何签名更新的公共证书集db
  • 以及PK唯一的主密钥(证书),用于验证KEK.

默认情况下,系统应该有硬件制造商的 PK,并且 Microsoft 和硬件制造商的密钥都在KEK和中db。这允许使用 Microsoft 认证的引导加载程序(其中包括与某些 Linux 一起使用的“shim”)和开箱即用的硬件制造商的固件更新工具。

第一步是非常仔细地检查您的 UEFI BIOS 设置。在某些系统上,安装程序允许添加和删除所有安全启动密钥。在其他系统上,唯一的选项是重置为出厂默认键,并清除所有键。如果您的安装程序需要清除所有密钥才能使用自定义密钥,那么您可能需要首先备份任何现有密钥,以便您可以根据需要有选择地恢复它们。

根据安全启动规范,如果PK清除,安全启动将处于所谓的设置模式,该模式允许自由编辑所有键集和不受限制的启动。因此,理想情况下,您只想删除 ,PK但暂时保留其他键不变。

最好的情况是,这允许使用适当的工具从 UEFI 感知操作系统中编辑安全启动密钥;最坏的情况下,您需要使用 UEFI Shell 和keytool.efi实用程序James Bottomley 的 efitools 软件包

你的最终目标可能应该是这样的:

  • db集合应包含:
    • 您自己的公钥证书,用于启动您已明确签名的内容
    • 如果您想使用预打包的内核而不需要手动重新签名,也许您最喜欢的 Linux 发行版的内核签名证书
    • 可能是硬件供应商的证书,以允许在必要时安装固件更新
    • 可能是 Microsoft 的第三方 UEFI 证书,允许使用预打包的 Linux 引导加载程序和实时 Linux 引导介质,而无需显式重新签名或禁用安全引导
    • 如果您使用 Windows 双启动,可能是 Microsoft 的操作系统签名证书
  • KEK集合应包含:
    • 您自己的证书,用于更新dbdbx
    • 如果您的系统包含支持 UEFI 的 Microsoft 操作系统,您可能需要包含 Microsoft 的 KEK 证书,因为 Microsoft 的更新有时包含 和db/或 的更新dbx,并且如果拒绝访问安全启动,这些更新将无法成功安装
  • 最后,一旦按照您的要求设置了其余所有内容,您应该将自己的证书放入其中PK以使安全启动再次生效。

答案2

这一段的Sakaki 的 EFI 安装指南展示了如何安装密钥来验证您的自签名内核。整个指南是为 Gentoo 编写的,但是本节的大部分内容可以适用于所有操作系统,并且还解释了它的工作原理。

答案3

相关内容