解决Ubuntu虚拟机启动modprobe vboxdrv问题(不禁用安全启动)

  我用的是Ubuntu 16.04系统,想使用virtualbox创建虚拟机时,报错无法创建一个虚拟机任务,理由是"vboxdrv"未加载,尝试重新加载问题如下所示:

$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available

参考解决办法
  谷歌之后,根据链接网页描述,发现是在升级内核版本之后,从内核版本4.4.0-20开始,强制要求 unsigned 内核模块在启用安全启动的情况下运行。因此我们无法加载一个未签署的模块"vboxdrv"。
解决方式有两种,一种是禁用安全启动,这种方法简单,但不推荐使用,需要在引导菜单禁用secure-boot。

第二种方法是签署这些模块。
具体步骤如下:
创建签名秘钥:

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive common name/"

签署模块

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)

确认模块已签名

tail $(modinfo -n vboxdrv) | grep "Module signature appended"

运行该命令之后显示"匹配到二进制文件"

最后,将密钥注册到安全启动

sudo mokutil --import MOK.der

以上步骤完成后,重新启动并按照说明注册MOK(机器所有者密钥)。网上好多方法到这之后就没有了,理论上可以解决问题。

但我在这里遇到了问题,重启系统之后没有带图示例中显示的蓝屏界面,参考这篇文章ubuntu系统UEFI SecureBoot,我安装了shim-signed包。在安装完之后,需要输两次密码,该密码是注册MOK要使用的密码。
安装需要的包

sudo apt-get install shim-signed

使用以下命令将现有密钥注册到填充程序

sudo update-secureboot-policy --enroll-key

虽然问题解决了,但是我不明白的是这个注册MOK是上面那条命令起作用了还是最后安装的包起作用了。有没有明白的大佬给我科普一下。

参考(侵删):
https://wiki.ubuntu.com/UEFI/SecureBoot
https://sourceware.org/systemtap/wiki/SecureBoot
https://chubuntu.com/questions/726/could-not-load-vboxdrv-after-upgrade-to-ubuntu-16-04-and-i-want-to-keep-secur.html

你可能感兴趣的:(解决Ubuntu虚拟机启动modprobe vboxdrv问题(不禁用安全启动))