6.3. 在 AWS Marketplace 中使用安全引导配置 RHEL 实例
要确保 AWS 上的 RHEL 实例有安全引导序列,请使用安全引导。要在 AWS 上配置带有安全引导支持的 Red Hat Enterprise Linux 实例,请从 AWS Marketplace 启动 RHEL Amazon Machine Image (AMI),并使用 uefi-preferred 启用引导模式预先配置。uefi-preferred 选项支持安全引导所需的统一可扩展固件接口(UEFI)引导装载程序。如果没有 UEFI,安全引导功能将无法正常工作。
为避免安全问题,请生成并保留当前 RHEL 实例之外的私钥。如果安全引导 secret 存储在使用它们的同一实例上,入侵者可以访问机密以升级其特权。有关启动 AWS EC2 实例的更多信息,请参阅开始使用 Amazon EC2。
先决条件
RHEL AMI 在引导设置中启用
uefi-preferred选项:$ aws ec2 describe-images --image-id <ami-099f85fc24d27c2a7> --region <us-east-2> | grep -E '"ImageId"|"Name"|"BootMode"' "ImageId": "ami-099f85fc24d27c2a7", "Name": "RHEL-9.6.0_HVM_GA-20250423-x86_64-0-Hourly2-GP3", "BootMode": "uefi-preferred"您已在 RHEL 实例中安装了以下软件包:
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
edk2-ovmf -
python3-virt-firmware
-
流程
检查 RHEL Marketplace AMI 实例的平台状态:
$ mokutil --sb-state SecureBoot disabled Platform is in Setup Mode设置模式允许在实例中更新安全引导 UEFI 变量。创建新的随机通用唯一标识符(UUID),并将其存储在系统生成的文本文件中:
$ uuidgen --random > GUID.txt为平台密钥数据库生成一个新的
PK.keyRSA 私钥和自签名PK.cerX.509 证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout PK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Platform key/" \ -outform DER -out PK.ceropenssl工具通过将输出格式设置为可辨识的编码规则(DER)来为证书生成一个通用名称平台密钥。为密钥交换密钥数据库生成新的
KEK.keyRSA 私钥和自签名KEK.cerX.509 证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout KEK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "CN=Key Exchange Key/" \ -outform DER -out KEK.cer生成
custom_db.cer自定义证书:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cer下载
Microsoft 公司 UEFI CA 2011证书:$ wget https://go.microsoft.com/fwlink/p/?linkid=321194 --user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" -O MicCorUEFCA2011_2011-06-27.crt为 x64 位系统下载禁止签名(
dbx)更新的 UEFI Revocation List 文件:$ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin使用
virt-fw-vars工具生成 UEFI 变量文件:$ virt-fw-vars --set-pk "$(< GUID.txt)" PK.cer \ --add-kek "$(< GUID.txt)" KEK.cer \ --add-db "$(< GUID.txt)" custom_db.cer \ --add-db 77fa9abd-0359-4d32-bd60-28f4e78f784b MicCorUEFCA2011_2011-06-27.crt \ --set-dbx DBXUpdate.bin -i /usr/share/edk2/ovmf/OVMF_VARS.secboot.fd \ --output VARS将 UEFI 变量转换为可扩展固件接口(EFI)签名列表(ESL)格式:
$ python3 /usr/share/doc/python3-virt-firmware/experimental/authfiles.py \ --input VARS \ --outdir . $ for f in PK KEK db dbx; do tail -c +41 $f.auth > $f.esl; done注意每个 GUID 都是分配的值,代表一个 EFI 参数
-
8be4df61-93ca-11d2-aa0d-00e098032b8c:EFI_GLOBAL_VARIABLE_GUID -
d719b2cb-3d3a-4596-a3bc-dad00e67656f:EFI_IMAGE_SECURITY_DATABASE_GUID
EFI_GLOBAL_VARIABLE_GUID参数维护可引导设备和引导管理器的设置,而EFI_IMAGE_SECURITY_DATABASE_GUID参数代表安全数据库,用于安全引导变量dbx,以及所需密钥和证书的存储。-
将数据库证书传送到目标实例,使用
efivar工具来管理 UEFI 环境变量。要转让
PK.esl,请输入:# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-PK -f PK.esl要传输
KEK.esl,请输入:# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-KEK -f KEK.esl要传输
db.esl,请输入:# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-db -f db.esl要传输 x64 架构的
dbx.eslUEFI 撤销列表文件,请输入:# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx -f dbx.esl
- 从 AWS 控制台重启实例。
验证
验证是否启用了安全引导:
$ mokutil --sb-state SecureBoot enabled使用
keyctl工具验证自定义证书的内核密钥环:$ sudo keyctl list %:.platform 4 keys in keyring: 907254483: ---lswrv 0 0 asymmetric: Signature Database key: f064979641c24e1b935e402bdbc3d5c4672a1acc ...