Ubuntu 24.04与Debian 12下UKIs及systemd-boot配置方法,以及Ubuntu 24.04默认MOK私钥与证书获取方式
Ubuntu 24.04与Debian 12下UKIs及systemd-boot配置方法,以及Ubuntu 24.04默认MOK私钥与证书获取方式
嘿,刚好在Ubuntu 24.04和Debian 12上折腾过UKI和Secure Boot相关的配置,我来帮你理清楚这些问题:
Ubuntu 24.04默认MOK私钥与证书的获取说明
首先得明确一点:Ubuntu 24.04默认安装时生成的MOK(Machine Owner Key)私钥不会被系统留存。安装过程中生成的密钥只是临时用来信任预装的内核和引导文件,安装完成后私钥就被删除了,所以你没法直接找到它。
如果你想用自己的密钥签名UKI,正确的做法是重新生成一套MOK密钥对,然后把新的证书 enroll 到Secure Boot的MOK列表里,步骤如下:
- 先安装MOK管理工具:
sudo apt install mokutil - 生成密钥对和证书(这里的
/CN=Your MOK Name/可以换成你自己的标识,比如机器名或用户名):openssl req -new -x509 -newkey rsa:2048 -keyout mok.priv -outform DER -out mok.der -nodes -days 3650 -subj "/CN=Your MOK Name/" - 将证书导入MOK待 enroll 列表,设置一个临时密码(重启时要用):
sudo mokutil --import mok.der - 重启系统,此时会进入MOK管理界面,按照提示选择「Enroll MOK」,输入刚才设置的临时密码,确认 enroll 新证书,完成后再次重启即可。
Ubuntu 24.04下配置UKI与systemd-boot
Ubuntu 24.04默认用GRUB引导,我们可以切换到systemd-boot并生成UKI:
- 安装systemd-boot:
sudo bootctl install - 生成UKI镜像:Ubuntu 24.04的systemd包已经自带
ukify工具,直接用下面的命令打包内核、initramfs、命令行参数并签名:
其中sudo ukify build \ --linux /boot/vmlinuz-$(uname -r) \ --initrd /boot/initrd.img-$(uname -r) \ --cmdline @/etc/kernel/cmdline \ --mok mok.der \ --private-key mok.priv \ --output /boot/efi/EFI/Linux/ubuntu-uki.efi@/etc/kernel/cmdline会读取系统默认的内核命令行参数,你也可以手动指定参数。 - 更新systemd-boot的启动菜单:
sudo bootctl update - (可选)设置UKI为默认启动项:
sudo bootctl set-default ubuntu-uki.efi
Debian 12下配置UKI与systemd-boot
Debian 12的流程和Ubuntu类似,只是细节上略有差异:
- 准备MOK密钥对:和Ubuntu完全一样,安装
mokutil,生成密钥对并 enroll 证书,这里就不重复了。 - 安装systemd-boot:Debian 12默认也是GRUB,执行
sudo bootctl install即可切换(注意:必须是UEFI引导模式,systemd-boot不支持BIOS)。 - 生成UKI镜像:Debian 12的systemd也包含
ukify,执行命令:sudo ukify build \ --linux /boot/vmlinuz-$(uname -r) \ --initrd /boot/initrd.img-$(uname -r) \ --cmdline @/etc/kernel/cmdline \ --mok mok.der \ --private-key mok.priv \ --output /boot/efi/EFI/Linux/debian-uki.efi - 更新启动菜单:
sudo bootctl update - (可选)设置默认启动项:
sudo bootctl set-default debian-uki.efi
额外注意事项
- 确保你的系统是UEFI引导模式,systemd-boot和UKI都依赖UEFI环境。
- 每次更新内核后,都需要重新生成UKI镜像。你可以写一个简单的脚本放在
/etc/kernel/postinst.d/目录下,实现内核更新后自动生成UKI。 - 如果你需要验证UKI的签名,可以用
sbverify --cert mok.der /boot/efi/EFI/Linux/ubuntu-uki.efi命令(需要安装efitools包)。
备注:内容来源于stack exchange,提问作者rafiki
相关产品推荐
相关产品推荐

