我使用的是华为Matebook X Pro笔记本电脑,默认开启了UEFI安全引导(UEFI Secure Boot),安装了Windows和Ubuntu双操作系统,平时基本上都是使用Ubuntu 22.04(Linux Mint 21.3),使用上也没有碰到什么问题,最近因为要使用虚拟机,发现在Windows系统中可以正常使用Virtualbox,但无法在Ubuntu中使用VirtualBox软件,启动虚拟机就报错,错误跟Secure Boot相关,查询了一下资料,找到了解决办法。
UEFI安全引导(UEFI Secure Boot)是PC制造商开发的一种安全标准,旨在帮助保护计算机免受恶意软件的攻击。它限制系统只能使用注册到系统固件中的模块进行引导。这意味着在引导过程中运行的所有软件和驱动程序都需要注册和验证。虽然可以通过禁用UEFI Secure Boot来解决Virtualbox的启动问题,但是我也想尝试启用Secure Boot的情况下安装使用Virtualbox;如果我们要进行安全引导,解决办法是对VirtualBox模块进行签名。这包括生成一个密钥对,将密钥注册到系统的固件中,并对VirtualBox模块进行签名。根据查询网络资料,执行这个操作一般需要三个步骤:
1、生成密钥对
要生成密钥对,请使用openssl命令,如下所示:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/
此命令生成一个新的RSA密钥对(MOK.priv和MOK.der)。“-days 36500”选项将密钥设置为100年后过期,“-subj”选项为密钥设置描述性通用名称。
2、注册密钥
要在系统固件中注册密钥,请按如下方式使用mokutil命令:
sudo mokutil --import MOK.der
此命令将密钥导入机器所有者密钥(MOK)数据库,该数据库是系统信任的密钥列表。
3、对VirtualBox模块进行签名
要对VirtualBox模块进行签名,请使用以下命令:
这些命令使用您的密钥对VirtualBox内核模块(vboxdrv、vboxnetflt和vboxnetadp)进行签名。
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv) sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxnetflt) sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxnetadp)
但是在实际的Ubuntu 22.04操作系统中已经为我们生成了RSA密钥对(MOK.priv和MOK.der),位于Ubuntu操作系统的/var/lib/shim-signed/mok目录中,我们需要做的就是第二步注册秘钥,进入上述目录执行命令:
sudo mokutil --import MOK.der
执行命令后,按照提示要求设定注册秘钥的密码,然后通过sudo reboot重启动电脑,重启过程中华为的笔记本电脑就提示设定UEFI Secure Boot,按照提示要求选择第一项,输入刚才设定的密码就在BIOS中注册成功了。进入操作系统后通过执行以下命令来检查注册情况:
sudo mokutil --test-key /var/lib/shim-signed/mok/MOK.der 2
如果提示以下信息,表示已经注册成功:
/var/lib/shim-signed/mok/MOK.der is already enrolled
最后执行配置程序,也就替代是前面所述的第三步的内容,命令为:
sudo /sbin/vboxconfig
如果,提示如下信息:
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Signing VirtualBox kernel modules.
表示配置成功,就可以启动并正常使用VirtualBox 6.1软件了。