签署 systemd-boot 文件并注册 PK 以启用安全启动

生成密钥、导入 PK 并启用安全启动的指南

0. 开始之前#

最近我尝试安装 Fedora 来取代 Ubuntu,以摆脱 snap 的烂东西。然后我不知道从哪里冒出一个想法,决定试试 systemd-boot,噩梦就是这样开始的。

这里涉及两个独立的信任操作:

  1. EFI 签署:固件 db 信任 systemd-boot 和你的 UKI。
  2. 内核模块签署:NVIDIA 模块由内核信任的密钥签署。

当直接通过 systemd-boot 启动时,不需要 MOK,前提是模块证书存在于固件 db 中,且 Fedora 将该密钥导入到模块验证接受的 keyring 中。线上的教程主要针对 grub+shim,通常会要求你注册 MOK 密钥。

如果你对我的安装过程以及我如何为安全启动配置 systemd-boot 不感兴趣,请跳过第 0 章。

安装 Fedora#

systemd-boot 方式只能使用 Everything netinst 镜像进行配置(据说离线镜像也可以做到,但步骤更复杂)。从 USB 密钥启动后,导航到——

创建密钥:

bash
1sudo sbctl create-keys

注册 sbctl 密钥同时保留 Microsoft 证书:

bash
1sudo sbctl enroll-keys -m

当需要 Microsoft 签署的 Option ROM、Windows 或其他 Microsoft 签署的 EFI 组件时,-m 参数很重要。

签署已注册的 EFI 文件:

bash
1sudo sbctl sign-all
2sudo sbctl verify