Ubuntu系统,如何让dkms编译的内核模块支持安全启动?
Ubuntu系统,如何让dkms编译的内核模块支持安全启动?
1 在BIOS中打开SecureBoot支持
这因为不同品牌的计算机设置不尽相同,就不做详细说明了。
根据自己计算机的实际情况,搜一下基本上都能找方法。
或者找一下购买计算机附赠的手册,一般也能找到开启/关闭安全启动的方法
在Ubuntu系统中,查看SecureBoot的状态:
mokutil --sb-state
2 安装必要软件包
sudo apt-get install --yes shim-signed mokutil
3 创建签名内核模块需要的密钥
sudo update-secureboot-policy --new-key
生成了两文件:
ls /var/lib/shim-signed/mok/
MOK.der MOK.priv
MOK.der --- 公钥
MOK.priv --- 密钥
4 公钥导到安全启动的信任列表
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der
这一步会要求设置一个密码,可随意设个简单密码就行。
注意:这个命令仅是做一个“导入密钥的计划”,真正导入需要重启一下,进行实操。
5 重启计算机导入公钥
重启后就进入了一个操作界面,分别选择:
Enroll MOK -> continue -> yes -> password -> reboot
password 就是上一步import时,设置的密码
注意:
如果这个环节有哪一步选错了,可以重复4,5
6 内核模块签名
搞了上面的操作之后,dkms再编译完内核模块,
就会自动使用/var/lib/shim-signed/mok下的密钥,
对生成的内核模块进行签名
所以只需要重新编译一些内核模块即可:
for m in $(dkms status |sed 's|[/:]|,|g;s|[ \t]||g' |awk -F, '{print $1"/"$2}' |sort |uniq)
do
dkms remove ${m} --all
for v in /lib/modules/*
do
test -d "${v}/initrd" || continue
v=$(basename $v)
dkms install ${m} -k ${v}
done
done
7 完成
此后,就用dkms辅助编译内核模块(自动签名),SecureBoot不再是个麻烦。
例如:
sudo apt-get install --yes nvidia-driver-xxx
sudo apt-get install --yes virtualbox