升级到Ubuntu 16.04后无法加载’vboxdrv’(我想保持安全启动)
我从Ubuntu 15.10升级到16.04,从那以后VirtualBox 5.0.18不再启动我的VM了。 它抱怨’vboxdrv’没有加载。 所以我尝试加载它并得到以下错误:
$ sudo modprobe vboxdrv modprobe: ERROR: could not insert 'vboxdrv': Required key not available
我相信它与我使用的安全启动有关,我想继续使用它。 实际上用Ubuntu 15.10安全启动和VirtualBox工作得很好。
另外我尝试了$ sudo apt-get --reinstall install virtualbox-dkms
,它成功构建了内核模块,但没有解决这个问题。
知道如何在保持安全启动的同时加载vboxdrv吗?
更新2 :我也尝试执行sudo mokutil --disable-validation
。 执行此命令时,在下次引导期间,系统会提示您禁用安全引导,从磁盘添加密钥或哈希。 由于我不想禁用安全启动,似乎这也无法解决我的问题。 此外,我想为并行Windows安装激活UEFI。
注意 :如果您不介意禁用安全启动,请参阅安装第三方内核模块或内核升级后为什么会出现“必需密钥不可用”? 代替。
从内核版本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)
其他模块以获取完整function)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
会修复它)或者密钥没有签名。 只需重复这一步,一切都应该正常。
资源: Fedora和Ubuntu实现模块签名的详细网站文章 。 @zwets提供额外的安全性 。 @shasha_trn 提到所有模块 。
附加资源:我每次virtualbox-dkms
升级时都会创建一个bash脚本供我自己使用,从而覆盖已签名的模块。 在GitHub上查看我的vboxsign 。
在我的系统上,我做了以下工作以使其工作:
运行mokutil:
sudo mokutil --disable-validation
然后mokutil让我为MOK管理器设置密码。 重新启动PC后,BIOS显示一个对话框以配置MOK管理器。 我从这个对话框中禁用了SecureBoot,它要求输入密码中的几个字符(即输入字符(5)等)。
启动正确加载的vboxdrv模块后。
lsmod | grep vboxdrv vboxdrv 454656 3 vboxnetadp,vboxnetflt,vboxpci
奇怪的是,mokutil仍然显示SecureBoot已启用:
sudo mokutil --sb-state SecureBoot enabled
您可以通过禁用validation检查
sudo apt install mokutil sudo mokutil --disable-validation
之后应该安装DKMS包。
升级后我也遇到了关于vboxdrv的错误。 但是Oracle VM VirtualBox Extension Pack的旧版本(5.0.14)存在问题。 我下载并安装了这个包的更新版本(5.0.18),问题就消失了。
好吧,经过一些测试,我很确定这是一个安全启动问题。
如果它已启用,那么抛出:
警告:未加载vboxdrv内核模块。 当前内核没有可用的模块(4.4.0-21-generic)或者无法加载。 请重新编译内核模块并通过sudo / sbin / rcvboxdrv安装程序进行安装
但是,如果禁用安全启动,则虚拟机可以正常加载而不会出现错误。
我仍然将我的BIOS设置为UEFI。
我今天遇到了同样的问题,我在双启动时使用了Windows 10和Ubuntu 15.10,在Bios上启用了uefi(我没有禁用它,所以我可以运行预安装的Windows)。
升级到Ubuntu 16.04后,VirtualBox停止加载我的VM,并显示相同的错误消息:
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
我怀疑UEFI问题,因为升级安装程序时问我是否要禁用它,我回复了否(因为是可能使我的Windows无法使用)。
我所做的是转到Bios并支持传统BIOS启动而不禁用安全启动。
Virtualbox现在运行正常。
更新 :正如@zwets在评论中正确指出的那样,启用旧模块会导致禁用安全启动。