Ubuntu20.04开启Secure Boot安装VirtualBox6.1报vboxdrv加载失败
问题说明
在无法关闭Secure Boot的Ubuntu 20.04.2系统上,为适配Laravel Homestead开发环境安装VirtualBox 6.1版本时,出现modprobe vboxdrv failed的加载报错,当前系统内核为5.8.0-44-generic,此前尝试保留Secure Boot的常规模块签名方案未生效。
核心报错根因
开启Secure Boot的环境下,未通过系统信任链验证的内核模块会被内核强制拦截加载。旧方案失效通常存在三个共性问题:未安装和当前5.8版本内核完全匹配的头文件、模块签名流程和Ubuntu的MOK信任机制不对齐、导入MOK密钥后未在重启引导阶段完成信任登记。
分步可落地解决流程
- 补全模块编译所需的前置依赖
执行命令安装对应内核的开发头文件与编译工具链,避免模块编译时出现版本不匹配:apt install linux-headers-$(uname -r) build-essential dkms - 重新生成专用MOK签名密钥
执行命令生成独立的签名公私钥对,避免和历史残留的旧签名冲突:openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox Module Signing/" - 将公钥导入MOK信任列表
执行导入命令,过程中按提示设置一个8位长度以内的临时校验密码(该密码仅在重启后的MOK引导界面使用,无需设置为系统登录密码):mokutil --import MOK.der - 对所有VirtualBox内核模块完成签名
批量对vboxdrv、vboxnetflt、vboxnetadp、vboxpci四个核心模块执行签名操作:for mod in vboxdrv vboxnetflt vboxnetadp vboxpci; then /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 MOK.priv MOK.der /lib/modules/$(uname -r)/updates/dkms/$mod.ko; done - 重启完成MOK信任登记
系统重启后会自动进入蓝色MOK管理界面,注意不要直接按任意键跳过倒计时,选择“Enroll MOK”选项,输入之前设置的临时密码完成密钥信任登记,之后正常进入系统。 - 重新触发VirtualBox模块初始化
进入系统后以root权限执行配置脚本,让系统自动完成模块的注册与加载:/sbin/vboxconfig
最后执行modprobe vboxdrv验证模块是否加载成功。
常见踩坑提醒
- 可执行
sudo mokutil --list-enrolled查看已信任的MOK列表,若存在之前旧方案导入的、和VirtualBox相关的残留密钥条目,可先执行sudo mokutil --delete <对应密钥的哈希值>移除,避免新旧密钥冲突 - 若批量签名时提示找不到对应模块文件,先执行
dkms status检查vboxdrv模块是否在当前内核目录下完成安装,缺失则执行sudo dkms install vboxdrv/6.1.18补装模块 - 若流程全部走完仍加载失败,可直接将VirtualBox升级到6.1.32及以上的小版本(该版本修复了对5.8系列内核的早期适配问题),替换安装包后重新走一遍上述签名流程即可,全程无需关闭Secure Boot。
内容的提问来源于stack exchange,提问作者Subhasish Gupta
相关产品推荐
相关产品推荐

