升级到 Ubuntu 16.04后内核无法加载'vboxdrv'

分享于 

4分钟阅读

ubuntu

  繁體

问题

我从Ubuntu 15.10升级到16.04,然后VirtualBox 5.0.18不能启动虚拟机了,它抱怨'vboxdrv'无法加载,我尝试加载它,得到以下错误:


$ sudo modprobe vboxdrv


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



我也尝试过$ sudo apt-get --reinstall install virtualbox-dkms 这成功构建了内核模块,但是没有解决这个问题。

是否知道如何在保持安全启动的同时加载vboxdrv?

我也尝试执行sudo mokutil --disable-validation,执行此命令时,在下次引导时,系统会提示我禁用安全引导,因为我不想禁用安全启动,这也无法解决问题,


答案1

从内核版本4.4.0 -20开始,禁止未签名的内核模块在启用安全启动的情况下运行。因为你想保持安全启动,那么下一个逻辑步骤是签署这些模块。

我们来试试。

创建签名密钥


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



选项:要获得额外的安全性,请跳过-nodes开关,它将要求输入密码。在进入下一步之前,确保export KBUILD_SIGN_PIN='yourpassword'

对模块(本例为vboxdrv )进行签名,但是对ls $(dirname $(modinfo -n vboxdrv))/vbox*.ko) 完整功能)


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 (计算机所有者密钥),系统将重新启动一次。

确认密钥已注册


mokutil --test-key MOK.der



如果VirtualBox仍未加载,可能是因为模块未加载(sudo modprobe vboxdrv会修复)或密钥未签名,简单地重复这个步骤,一切都应该正常。


答案2

在系统上,我做了以下工作:

运行mokutil:


sudo mokutil --disable-validation



然后mokutil让我为MOK管理器设置密码,重启电脑后BIOS显示一个对话框来配置MOK管理器,我从这个对话框中禁用了SecureBoot,它要求输入密码

引导vboxdrv模块后正确加载。


lsmod | grep vboxdrv


vboxdrv 454656 3 vboxnetadp,vboxnetflt,vboxpci



奇怪的是,mokutil仍然显示SecureBoot已启用:


sudo mokutil --sb-state


SecureBoot enabled




答案3

通过以下方式禁用验证检查


sudo apt install mokutil


sudo mokutil --disable-validation



在DKMS软件包安装之后。



BOO  引导  Ubuntu  secure  内核