当前位置: 首页>>技术问答>>正文


升级到Ubuntu 16.04后无法加载’vboxdrv'(并且我想保持安全启动)

, , , , ,

问题描述

我从Ubuntu 15.10升级到16.04,从此VirtualBox 5.0.18不再启动我的虚拟机了。它抱怨’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。执行此命令时,在下次启动时,系统会提示您禁用安全引导,从磁盘添加密钥或散列。由于我不想禁用安全引导,因此似乎也不能解决我的问题。另外我想保持UEFI在并行Windows安装中激活。

注意:如果您不介意禁用安全引导,请参阅Why do I get “Required key not available” when install 3rd party kernel modules or after a kernel upgrade?

最佳解决方案

自内核版本4.4.0-20开始,强制执行未启用安全引导的未签名内核模块将不被允许运行。因为你想保持安全启动,那么下一个逻辑步骤就是签署这些模块。

所以我们试试吧。

  1. 创建签名密钥

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

    选项:为了增加安全性,请跳过-nodes开关,它将要求输入密码。然后在继续下一步之前,确保export KBUILD_SIGN_PIN='yourpassword'

  2. 对模块进行签名(本例为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)
    
  3. 确认模块已签名

    tail $(modinfo -n vboxdrv) | grep "Module signature appended"
    
  4. 将密钥注册到安全引导

    sudo mokutil --import MOK.der
    

    这将要求输入密码以确认下一步的导入。

  5. 重新启动并按照说明注册MOK(机器所有者密钥)。这里有一张带有图片的sample。系统将重新启动一次。

  6. 确认密钥已注册

    mokutil --test-key MOK.der
    

如果VirtualBox仍然无法加载,可能是因为该模块未加载(sudo modprobe vboxdrv将修复该问题)或该密钥未被签名。只需重复这一步,一切都应该正常工作。

资源:模块签名的详细网站article for FedoraUbuntu implementation。 @zwets用于additional security。 @ shasha_trn用于mentioning all the modules

其他资源:每次virtualbox-dkms升级时,我都会创建一个bash脚本供我自己使用,从而覆盖已签名的模块。看看我的vboxsign on GitHub

次佳解决方案

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

运行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

第三种解决方案

您可以通过禁用验证检查

sudo apt install mokutil
sudo mokutil --disable-validation

之后DKMS包应该安装。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/696.html,未经允许,请勿转载。