UEFI 安全启动
有关安全启动之外的信息,请参阅 UEFI 页面。
挂载 ESP
在 /boot/efi 准备 UEFI 分区 (ESP) 的挂载点
# install -d -m 000 /boot/efi
将以下行添加到 /etc/fstab
/etc/fstab 的内容
挂载它
# mount /boot/efi
生成自己的 UEFI 密钥
安装软件包 efi-mkkeys
# apk add efi-mkkeys
在创建新密钥和修改 EFI 变量之前,建议备份当前变量,以便在发生错误时可以恢复
# mkdir -p /etc/uefi-keys/vendor # cd /etc/uefi-keys/vendor # for i in PK KEK db dbx; do efi-readvar -v $i -o $i.esl; done
生成您自签名的 PK、KEK 和 db 密钥,包括 .esl 和 .auth 文件
# efi-mkkeys -s "Your Name" -o /etc/uefi-keys
现在您可以卸载 efi-mkkeys,如果您愿意
# apk del efi-mkkeys
生成统一内核镜像
安装软件包 secureboot-hook, gummiboot-efistub, 和 efibootmgr
# apk add secureboot-hook gummiboot-efistub efibootmgr
调整 /etc/kernel-hooks.d/secureboot.conf 中的参数 cmdline
。它不应包含 initrd=
参数!有效 cmdline
的示例
cmdline="root=UUID=<uuid-of-your-root-fs> modules=ext4"
运行内核钩子
# apk fix kernel-hooks
禁用 mkinitfs 触发器
# echo 'disable_trigger=yes' >> /etc/mkinitfs/mkinitfs.conf
添加启动项
# efibootmgr --disk <dev> --part 1 --create --label 'Alpine Linux' --load /Alpine/linux-lts.efi --verbose
注意:此过程只需执行一次;之后,每次内核升级时都会自动生成统一内核镜像。
注册 UEFI 密钥
将所有 *.esl、*.auth 文件从 /etc/uefi-keys 复制到 FAT 格式的文件系统(您可以使用 EFI 系统分区)。
启动固件设置实用程序并注册 db、KEK 和 PK 证书(按此顺序!)。固件有各种不同的界面;以下 ThinkPad T14s 的步骤只是一个示例。
- 重启系统并进入 ThinkPad 设置 (F1)。
- 转到 安全 > 安全启动
- 将 安全启动 更改为 启用
- 重置为设置模式
- 转到 密钥管理
- 授权签名数据库 (DB)
- 注册 DB > 选择您的闪存驱动器 > 选择 db.auth
- 删除 DB > 删除 Microsoft 证书(可选)
- 密钥交换密钥 (KEK)
- 注册 KEK > 选择您的闪存驱动器 > 选择 KEK.auth
- 删除 KEK > 删除 Microsoft 证书(可选)
- 平台密钥 (PK) > 注册 PK > 选择您的闪存驱动器 > 选择 PK.auth(这必须是最后一个!)
- 转到顶部,重启 > 退出并保存更改
某些设备,例如 HP Pavilion 笔记本电脑,无法通过界面注册密钥。相反,您必须按照以下步骤操作(步骤 1-5 和 9-12 可能因计算机而异,它们以 HP Pavilion 笔记本电脑为例)
- 重启系统并进入 HP Bios 设置实用程序 (F10)。
- 转到 系统配置
- 将 安全启动 更改为 禁用
- 选择 清除所有安全启动密钥
- 按 F10 保存设置
- 重启系统并进入 Alpine Linux
- 启用 Community 仓库
- 运行以下命令
# apk update # apk add sbctl # sbctl create-keys # sbctl sign /boot/efi/Alpine/linux-lts.efi # sbctl enroll-keys -m
- 重启系统并进入 HP Bios 设置实用程序 (F10)。
- 转到 系统配置
- 将 安全启动 更改为 启用
- 按 F10 保存设置
注意:如果您需要使用 sbctl,则每次升级内核时都必须运行 sbctl sign /boot/efi/Alpine/linux-lts.efi
。只要您在重新启动之前签署新的统一内核镜像,您就不需要禁用安全启动。
另请参阅
- Initramfs 初始化
mkinitfs-bootparam(7)