You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UEFI安全启动下无法签名VirtualBox内核模块:sign-key无作用

解决VirtualBox模块签名后modinfo无签名信息的问题

我之前在Dell XPS 13 9360的Ubuntu系统上碰到过一模一样的情况——照着指南生成了MOK密钥,执行签名命令返回0(提示成功),但用modinfo查看vboxdrv.ko时完全看不到签名相关的字段,安全启动下模块还是加载失败。下面是我排查和解决的全过程:

1. 先检查签名命令是否用错了

你提到的sign-key脚本大概率是笔误,Linux内核里用来签名内核模块的标准工具是sign-file,路径确实是/usr/src/linux-headers-$(uname -r)/scripts/sign-file。如果用错了脚本,虽然可能返回退出码0,但实际根本没完成签名操作。

正确的签名命令应该是这样的(记得替换成你的密钥文件路径):

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /path/to/your/MOK.priv /path/to/your/MOK.der ./vboxdrv.ko

关键注意点:

  • 必须用sudo执行,否则会因为文件权限问题导致签名失败(但可能依然返回0,坑得很)
  • 要确保MOK.priv和MOK.der的路径完全正确,就是你之前生成密钥时保存的位置

2. 验证模块是否真的被成功签名

如果执行了正确的sign-file命令,还是看不到modinfo的签名信息,可以用openssl来验证签名有效性:

openssl dgst -sha256 -verify /path/to/your/MOK.pub -signature <(tail -c 256 ./vboxdrv.ko) ./vboxdrv.ko

如果返回Verified OK,说明签名是有效的,只是某些内核版本的modinfo不会显示签名相关字段;如果返回验证失败,那说明签名过程确实有问题,需要重新检查密钥文件和命令参数。

3. 确认MOK密钥已经导入UEFI安全启动数据库

就算模块签了名,如果你的MOK密钥没被导入到UEFI的安全启动信任列表里,系统还是会拒绝加载模块。可以用下面的命令检查已导入的密钥:

mokutil --list-enrolled

如果看不到你的密钥指纹,说明之前的密钥导入步骤没做好,需要重新执行:

sudo mokutil --import /path/to/your/MOK.der

执行后重启系统,在UEFI弹出的MOK管理界面里完成密钥的验证和导入(注意要记住你设置的导入密码)。

4. 替换系统中的原模块文件

很多人会忽略这一步:只签名了自己复制出来的vboxdrv.ko,但系统实际加载的是/lib/modules/$(uname -r)/misc/vboxdrv.ko这个路径下的文件。所以签名完成后,一定要把签名好的模块替换到系统路径:

sudo cp ./vboxdrv.ko /lib/modules/$(uname -r)/misc/
sudo depmod -a

之后可以手动加载模块试试:

sudo modprobe vboxdrv

如果没有报错,就说明模块已经能正常加载了。

关于modinfo不显示签名信息的说明

如果上面的步骤都完成了,模块能正常加载,但modinfo还是不显示签名相关字段,这是正常的——部分Linux内核版本的modinfo工具不会输出签名元数据,但这不影响模块的合法性,只要安全启动下能加载就说明签名已经生效了。


内容的提问来源于stack exchange,提问作者Gargravarr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:16:46