我从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。执行此命令时,在下次启动时,系统提示我禁用安全启动,从磁盘添加密钥或哈希。由于我不想禁用安全启动,因此似乎也不能解决我的问题。另外,我还想保持UEFI的激活状态以用于并行Windows安装。

注意:如果您不介意禁用安全启动,请参阅安装第三方内核模块时为什么我会得到“必需的密钥不可用”的信息。还是内核升级后?代替。

评论

参见askubuntu.com/questions/762254/…

尽管此问题与askubuntu.com/questions/762254/…重复,但该问题并未包含下面@Majal给出的答案。

逐步指南:stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail

FWIW,针对Google员工:在Ubuntu 18.04中,安装aptitude install virtualbox virtualbox-dkms将对模块进行签名,并要求您输入一次(?)密码。重新启动,输入MOK config并使用该密码注册密钥。

#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将解决该问题)或密钥未签名。只需重复此步骤,一切都将正常进行。

资源:有关Fedora和Ubuntu实现模块签名的详细网站文章。 @zwets可以提高安全性。 @shasha_trn提到了所有模块。

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

评论


我还对vboxnetadp,vboxnetflt,vboxpci模块进行了签名,以在虚拟机中具有网络并传递throw pci设备。

– sasha_trn
16年5月7日在19:40

扩展@majal的答案,我必须按照提供的说明执行sudo apt install --reinstall virtualbox-dkms。

– TylerSN
16年6月13日在20:28

@zwets您能否详细说明如何正确设置KBUILD_SIGN_PIN环境变量?在步骤2之前导出KBUILD_SIGN_PIN =密码并导出KBUILD_SIGN_PIN =“密码”均导致SSL错误:0907B068:PEM例程:PEM_READ_BIO_PRIVATEKEY:错误密码读取:pem_pkey.c:117

–adempewolff
16年7月9日在6:32

@adempewolff如果您的密码包含外壳程序将解释的字符(例如,带引号的字符串中的'$'),则需要将其括在撇号(')中。

–zwets
16年7月11日在8:54

@Majal谢谢您的回答!我也更喜欢对模块进行签名,而不是禁用该功能。我可以添加:(1)这也适用于命运相同的VMware模块“ vmmon”和“ vmnet”。 (2)在添加创建的密钥时,请明智地选择密码。在重新引导和安全引导注册阶段,您的键盘布局可能与您的区域设置不同。 (->美国布局)

– one-mb
16年8月7日在21:13



#2 楼

在我的系统上,我执行了以下操作以使其起作用:

运行mokutil:

sudo mokutil --disable-validation


然后mokutil要求我设置密码MOK Manager。
重启PC后,BIOS会显示一个对话框,用于配置MOK Manager。
我从此对话框中禁用了SecureBoot,它要求输入多个字符(例如,输入字符(5),等)。

引导正确加载的vboxdrv模块后。

lsmod | grep vboxdrv
vboxdrv               454656  3 vboxnetadp,vboxnetflt,vboxpci


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

sudo mokutil --sb-state
SecureBoot enabled


评论


如我的问题所述,我想继续使用安全启动。因此,禁用安全启动并不能解决问题。

– jans
16年4月26日在18:30

不想禁用安全启动,但最后不得不这样做,因为其他任何事情都行不通-不想在每次内核更新到来时都开始手动签名。.可惜,这是前进的唯一简单解决方案。顺便说一句,UEFI仍然说启用了安全启动。 ¯_(ツ)_ /¯

– Jaywink
16年5月18日在8:42

谢谢,因为我想这样做。

– Gringo Suave
20-4-6在22:41

#3 楼

我知道这个问题太旧了,但是由于没有可接受的答案,而且这些答案都无法解决我的问题,因此我正在撰写如何在不禁用安全启动的情况下解决此问题:

运行此命令时,出现以下错误:

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


问题是模块未签名,因此未加载内核。如果您的计算机启用了SecureBoot模式,这就会发生,这在现代设备中很常见。

这就是为什么我在打开虚拟盒子中的任何计算机时遇到此错误的原因


未安装内核驱动程序(rc = -1908)


执行以下步骤来对驱动程序进行签名,并在Ubuntu系统以及Debian 9上将其作为内核模块加载。 :

1。安装mkutil软件包以进行签名。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mokutil


2。生成签名文件:

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


3。然后将其添加到内核:

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


4。将其注册为安全启动。

重要!这将要求您输入密码,然后输入您想要的密码,您只需在下次重新启动时使用一次即可。

sudo mokutil --import MOK.der


5。最后,重新启动计算机。当键盘等待时,将出现蓝屏,按要求您中断引导的键。



当您进入蓝屏时,选择

Enroll MOK > Continue > and it will ask you for the password


您先前输入的内容将被输入,并且将通知您操作已成功完成。

现在您的操作系统将开始,您现在可以毫无问题地使用VirtualBox了:)

希望对您有所帮助。

评论


谢谢。您的步骤。问题。

– 0x8BADF00D
20-2-3在20:06

谢谢!有效。

– Anda B
20-4-17的7:49

这对我有用!非常感谢

–安东尼·奥(Anthony O)
20年7月20日在6:44

在步骤4上,我在此系统上不支持EFI变量

– MeSo2
20-10-10在15:40

您是否需要对每次virtualbox-dkms升级进行此操作?

– 7hibault
20/11/28在16:36

#4 楼

您可以通过

sudo apt install mokutil
sudo mokutil --disable-validation


禁用验证检查,然后安装DKMS软件包。

评论


我也尝试执行sudo mokutil --disable-validation。执行此命令时,在下次启动时,系统提示我禁用安全启动,从磁盘添加密钥或哈希。由于我不想禁用安全启动,因此似乎也不能解决我的问题。如果我误解了此命令,请告诉我。

– jans
16年4月26日在18:28

尝试禁用安全启动。您可以重新启用它,如果这样做没有帮助。

–Pilot6
16年4月26日在22:02

我试图禁用安全启动-但它仍处于启用状态:((ubuntu 18.04)

–xhudik
18-10-2在9:45

#5 楼

升级后我也收到有关vboxdrv的错误。但是旧版本(5.0.14)的Oracle VM VirtualBox Extension Pack存在问题。我下载并安装了此软件包的较新版本(5.0.18),问题消失了。

评论


嘿,您能详细说说吗?您从哪里下载的? PPA或deb文件?

– Karthik Nishanth
16年4月23日在4:34

我从VirtualBox站点上的下载中下载了扩展包,链接为“ VirtualBox 5.0.18 Oracle VM VirtualBox扩展包->所有受支持的平台”。然后,我在Oracle VM Virtual Box Manager上打开“文件”>“首选项”,选择“扩展名”,然后将下载的文件添加到列表中。它替换了旧版本的“ Oracle VM VirtualBox Extension Pack”(以前是5.0.14rxxxxxx)。

– Reling
16-4-24在7:11



扩展包无法纠正错误。错误与对模块签名有关

– Karthik Nishanth
16-4-25在15:43



这不适用于我的问题。

– jans
16年4月26日在18:24

这与OP的问题无关。错误消息“必需的密钥不可用”指示该问题是由于启用了安全启动的平台上的未签名内核模块引起的。除非VirtualBox更新包含使用内核信任的密钥签名的模块,否则无法解决此问题。即Canonical必须对其进行签名,或者Oracle必须对其进行签名,并且必须将其公共密钥添加到内核(或您平台的)可信密钥中。

–zwets
16年5月9日在8:04

#6 楼

好吧,经过一些测试,我很确定这是一个安全的启动问题。

就像启用它一样,将引发此错误:


警告:vboxdrv内核模块未加载。当前内核(4.4.0-21-通用)没有可用模块
,或者无法加载
。请重新编译内核模块,然后通过sudo / sbin / rcvboxdrv setup



进行安装。但是,如果禁用了安全启动,则virtualbox可以正常加载且没有错误。

我的履历仍然设置为UEFI。

评论


如我的问题所述,我想继续使用安全启动。因此,禁用安全启动并不能解决问题。

– jans
16年4月26日在18:25

#7 楼

今天我遇到了同样的问题,我在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在注释中正确指出的那样,启用旧版模块会导致安全启动被禁用。

评论


实际上,我还需要UEFI来启动并行Windows安装。因此禁用它也不是我的选择。我相应地更新了我的问题。

– jans
16年4月26日在18:26

您是否启用了对旧版BIOS模块的支持?这是UEFI BIOS中的另一个选项,与安全启动不同。

– Zee77
16年4月26日在18:50

@ Zeine77您是否可以在安全启动保持启用状态的情况下验证BIOS允许启用“旧版模块”?这是极不可能的,因为第一种选择允许不受信任的代码在内核空间中运行,这违背了第二种选择的目的。

–zwets
16年5月9日在8:11



@zwets你说的​​对,我刚刚检查了我的BIOS设置;启用旧模块会导致安全启动被禁用。如响应中所述,我假设禁用安全启动会导致Windows 10启动失败,事实并非如此。当我首次安装15.10时(几个月前),我注意不要禁用安全启动,因为这会损坏Win 10的安装。这是否意味着在禁用安全模式的情况下预安装的Win 10可以正常工作?

– Zee77
16年5月10日在2:22

#8 楼

我在Ubuntu 20.04上遇到了这个问题(新安装后。)我没有在BIOS中运行UEFI,而是在Ubuntu上进行了自动登录。
解决了什么问题,我将自动登录更改为不自动登录,并打开了UEFI有关BIOS的信息。