本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
UEFIAL2023 上安全启动
AL2从 2023.1 版本开始,023 支持UEFI安全启动。您必须将 AL2 023 用于同时支持两者UEFI以及UEFI安全启动的 Amazon EC2 实例。有关更多信息,请参阅 Amazon EC2 用户指南中的启动实例。
AL2023 个启用了UEFI安全启动的实例仅接受由签名的内核级代码,包括 Linux 内核和模块,Amazon因此您可以确保您的实例仅运行由 Amazon签名的内核级别代码。
有关 Amazon EC2 实例和UEFI安全启动的更多信息,请参阅《亚马逊EC2用户指南》中的UEFI安全启动。
先决条件
-
您必须使用版本为 AL2 023 AMI 的 2023.1 或更高版本。
-
实例类型必须支持UEFI安全启动。有关更多信息,请参阅 Amazon EC2 用户指南中的启动实例。
在 AL2 023 上启用UEFI安全启动
标准 AL2 023 AMIs 包含引导加载程序和由我们的密钥签名的内核。您可以通过注册现有实例来启用UEFI安全启动,也可以通过注册快AMIs照中的映像在预先启用UEFI安全启动的情况下进行创建。UEFI在标准 AL2 023 AMIs 上,默认情况下不启用安全启动。
如果实例类型支持UEFI,AMIs则启动模式uefi-preferred
为 AL2 023,可确保使用这些启动的实例AMIs将使用UEFI固件。如果实例类型不支持UEFI,则使用旧版BIOS固件启动实例。当实例在旧BIOS模式下启动时,不会强制执行UEFI安全启动。
有关亚马逊EC2实例AMI启动模式的更多信息,请参阅亚马逊EC2用户指南中的启动模式。
注册现有实例
要注册现有实例,请在特定的UEFI固件变量中填充一组密钥,使固件能够验证引导加载程序,使引导加载程序能够在下次启动时验证内核。
-
Amazon Linux 提供一个简化注册流程的工具。请运行以下命令以使用一组必要的密钥和证书预置实例。
sudo amazon-linux-sb enroll
-
运行以下命令来重新启动实例。实例重启后,将启用UEFI安全启动。
sudo reboot
注意
亚马逊 Linux AMIs 目前不支持 Nitro 可信平台模块 (NitroTPM)。如果TPM除了UEFI安全启动之外还需要 Nitro,请使用下一节中的信息。
注册快照映像
使用 Amazon AMI 从 Amazon EBS 根卷的快照注册时 EC2 register-image
API,您可以使用包含UEFI变量存储状态的二进制 blob 进行配置。AMI通过提供 AL2 023UefiData
,即可启用UEFI安全启动,无需执行上一节中的步骤。
有关创建和使用二进制 blob 的更多信息,请参阅 A ma EC2 zon 用户指南中的选项 B:创建包含预先填充的变量存储的二进制 blob。
AL2023 提供了一个预先构建的二进制 blob,可以直接在 Amazon 实例上使用。EC2该二进制 blob 位于正在运行的实例上的 /usr/share/amazon-linux-sb-keys/uefi.vars
中。此 blob 由软件包提供,该amazon-linux-sb-keys
RPM软件包默认安装在 AL2 023 上,从 2023.1 版本AMIs开始。
注意
为确保您使用的是最新版本的密钥和撤销,请使用与创建密钥和撤销相同的版本 AL2 023 中的 blob。AMI
注册图像时,我们建议使用RegisterImage
API设置为的BootMode
参数uefi
。这允许您通过将TpmSupport
参数设置为TPM来启用 Nitro。v2.0
此外,设置BootMode
为uefi
可确保启用UEFI安全启动,并且在切换到不支持的实例类型时不会意外禁用UEFI。
有关 Nitro 的更多信息TPM,请参阅亚马逊EC2用户指南TPM中的 Nitro。
撤消更新
Amazon Linux 可能需要发布使用更新的密钥签名的新版引导加载程序 grub2
或 Linux 内核。在这种情况下,可能需要撤销旧密钥,以防止允许以前版本的引导加载程序中的可利用漏洞绕过UEFI安全启动验证过程。
Package 更新grub2
或kernel
包总是自动将撤销列表更新到正在运行的实例的UEFI变量存储中。这意味着,启用UEFI安全启动后,安装软件包的安全更新后,您将无法再运行该软件包的旧版本。
在 AL2 023 上UEFI安全启动的工作原理
与其他 Linux 发行版不同,Amazon Linux 不提供一个名为 shim 的额外组件来充当第一阶段引导加载程序。shim 通常使用 Microsoft 密钥签名。例如,在提供 shim 的 Linux 发行版上,shim 会加载 grub2
引导加载程序,该引导加载程序使用 shim 自己的代码来验证 Linux 内核。此外,垫片在位于UEFI变量存储区中的机器所有者密钥 (MOK) 数据库中维护自己的一组密钥和撤销操作,该数据库由该工具控制。mokutil
Amazon Linux 不提供 shim。由于AMI所有者控制UEFI变量,因此不需要此中间步骤,这会对启动和启动时间产生不利影响。此外,我们默认选择不包括对任何供应商密钥的信任,这减少了执行不想要的二进制文件的机会。当然,如果客户选择信任,则可以包括想要的二进制文件。
使用 Amazon Linux,UEFI可以直接加载和验证我们的grub2
引导加载程序。引grub2
导加载程序已修改,用于UEFI在加载 Linux 内核后对其进行验证。因此,Linux 内核使用存储在普通UEFIdb
变量(授权密钥数据库)中的相同证书进行验证,并使用与引导加载程序和其他二进制文件相同的dbx
变量(撤销数据库)进行测试。UEFI由于我们提供自己的 PK 和KEK密钥来控制对数据库和 dbx 数据库的访问,因此我们可以根据需要分发签名的更新和撤销,而无需诸如 shim 之类的中介。
有关UEFI安全启动的更多信息,请参阅 Amazon EC2 用户指南中的UEFI安全启动工作原理。
注册您自己的密钥
如上一节所述,Amazon Linux 不需要在亚马逊上shim
进行UEFI安全启动EC2。当你阅读其他 Linux 发行版的文档时,你可能会找到使用管理机器所有者密钥 (MOK) 数据库的文档mokutil
,AL2023 上不存在该文档。shim
和MOK环境解决了UEFI固件中密钥注册的一些限制,这些限制不适用于 Amazon EC2 实现UEFI安全启动的方式。借助 Amazon,EC2有一些机制可以轻松地直接操作UEFI变量存储中的密钥。
如果您想要注册自己的密钥,有两种办法:一是在现有实例内操作变量存储(请参阅从实例内向变量存储中添加密钥),二是构造预填充的二进制 blob(请参阅创建包含预填充变量存储的二进制 blob)。