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!
喜欢就支持一下吧
打赏
微信
支付宝