Ubuntu签名内核
前言,起因
由于某些原因,电脑需要开启 Secure Boot 为了体验 Linux Kernel 6.1 的新特性 (我也不知道要体验啥),但 Ubuntu 官方还未签名新的 Linux 内核,于是决定自己签名内核。
这篇文章将带你了解如何在不关闭安全启动的情况下引导 Linux 内核 (签名 unsigned 内核)
了解 Linux Secure Boot 机制 (基于 Grub2)
安装 Ubuntu 时,官方会同时安装经过微软签名后的 EFI 文件,使得 grub EFI 能正确在开启安全启动的设备上启动,启动后,由 grub 引导内核。这时,由于 grub 经过安全启动,所以会验证内核是否签名,若未签名,则无法启动。
安装未签名的内核
从 ubuntu 官方的内核源选择你需要的内核,根据架构,下载对应的 linux-image-unsigned-xxx.deb 和 linux-modules-xxx.deb
然后终端转到下载目录使用如下指令安装内核
dpkg -i ./*.deb
此时,内核还没签名,如果以新安装的内核启动,则会显示 无效的shim签名 ,接下来我们开始签名内核
生成 MOK 证书
选择一个位置存放你的证书,以后也许会用上
创建 MOK 证书,这里需要用到 openssl ,使用如下指令
openssl req -newkey rsa:2048 -nodes -keyout MOK.key -new -x509 -sha256 -days 36500 -subj "/CN=my Machine Owner Key/" -out MOK.crt
openssl x509 -outform DER -in MOK.crt -out MOK.der
将 der 格式证书转换为 pem 格式
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
向机器注册 MOK 证书,需要安装好工具 mokutil
mokutil -i MOK.der
mokutil 会让你设置一个密码,等下会用上,但不重要,只用一次。
然后重启(你也可以选择全部设置好再重启),会进入 MokManner 界面,按照要求注册你的证书。
签名内核
需要用到 sbsign 工具
sudo sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert /var/lib/shim-signed/mok/MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-generic --output /boot/vmlinuz-[KERNEL-VERSION]-generic.signed
sudo cp /boot/vmlinuz-[KERNEL-VERSION]-generic.signed /boot/vmlinuz-[KERNEL-VERSION]-generic && sudo rm /boot/vmlinuz-[KERNEL-VERSION]-generic.signed
更新 grub
sudo update-grub
然后重启测试,一切顺利的话新的内核可以正常启动,有些情况会因为 NVIDIA 显卡驱动不适配无法启动,解决方法这里不过多阐述。
本文链接:
/archives/Z1RZQxoP
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
oriiのBlog!
喜欢就支持一下吧
打赏
微信
支付宝