CentOS 8下签名VirtualBox内核模块(vboxdrv、vboxnetflt、vboxnetadp、vboxpci)求助
嗨,我之前在CentOS 8开启Secure Boot的环境下也遇到过完全一样的问题!VirtualBox的内核模块因为没被UEFI信任所以加载失败,下面是亲测有效的手动签名步骤,跟着做就行:
生成签名密钥对
先创建自己的Machine Owner Key(MOK),这是UEFI用来验证模块签名的密钥。打开终端,以root身份执行:openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Your Custom Label/"把
Your Custom Label换成你自己的标识(比如你的名字),这样后面在UEFI界面里能认出这个密钥。安装内核开发工具(如果需要)
签名模块需要用到内核的sign-file工具,如果执行后续命令时报找不到这个工具,先安装对应版本的kernel-devel包:dnf install kernel-devel-$(uname -r)如果提示找不到包,可能是你的内核版本和软件源里的不一致,可以先更新内核再重启:
dnf update kernel reboot重启后再重新安装对应版本的kernel-devel。
签名所有VirtualBox内核模块
找到VirtualBox模块的存放路径,用生成的密钥逐个签名:for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $modfile done这个命令会自动找到vboxdrv、vboxnetflt等所有相关模块并完成签名。
将公钥导入UEFI的MOK列表
现在要把生成的公钥告诉UEFI,让它信任我们签名的模块:mokutil --import MOK.der执行后会提示你输入两次临时密码,一定要记好这个密码!重启系统的时候会用到它。
重启系统完成密钥 enrollment
重启你的CentOS 8机器,这时候会进入一个蓝色的MOK管理界面(不会进入正常系统):- 选择「Enroll MOK」选项
- 点击「Continue」确认
- 输入刚才设置的临时密码
- 选择「Reboot」重启系统
验证模块加载并重新配置VirtualBox
系统重启后,以root身份执行下面的命令验证模块是否能正常加载:modprobe vboxdrv如果没有报错,再重新运行VirtualBox的配置脚本:
/sbin/vboxconfig这时候脚本应该能顺利完成,VirtualBox也就能正常启动虚拟机了!
备注:内容来源于stack exchange,提问作者Younes LAB

