我在两个独立的磁盘上运行双启动(Linux 和 Windows 7),以 grub2 作为引导加载程序。
过去几个月,我花了很多时间尝试找到一种方法来注册密钥并签署安全启动模块mokutil
。我有一个问题这里我详细描述了这个问题以及我所能想到的所有尝试过的解决方法,但却没有什么回应,我真的觉得自己走进了死胡同。
我发现许多例子似乎表明这是华硕主板的常见问题:
- mokutil - 几乎所有选项都失败
- 无法在 16.04 中使用 mokutil 禁用安全启动
- 由于 Shim IEFI 密钥管理在重启后未显示,因此无法注册密钥
- Fedora 错误报告
- 关于华硕自己的支持论坛的问题
在里面第一个问题上面,@larrysb 说:
这似乎是主板上的 UEFI 错误。其他一些 UEFI/BIOS 也无法实现 mokutil 工作所需的方法之一。我的华硕 X99-E USB3.1 主板也出现了问题。
他们建议手动签署模块并注册密钥,我已尝试这样做但仍然有些不对劲,因为它似乎不起作用 - 该模块仍然被禁止。
此时,我觉得购买支持安全启动的新主板、mokutil
重建机器并依靠软件包安装程序提供的模块自动注册和签名会更简单。但我不知道如何确保主板实现了必要的固件方法。
哪些主板完全支持mokutil
?有清单吗?
答案1
我完全理解您所遇到的困难,我花了几个月的时间试图找到在启用了安全启动的 UEFI 系统上安装 VirtualBox 的完整指南,我想保持安全启动处于启用状态,但在为数不多的指南中,我都无法使用,大多数指南都建议禁用安全启动,但我不想这样做,而且无论如何都无法在我的系统 (Acer) 上禁用安全启动,我相信 ASUS 也是如此,您不能禁用安全启动,而且您也不必这样做。我还遇到了一些 UEFI 处理器错误,它在启动时报告了这个问题?一旦我删除 Windows 并安装 Ubuntu,我很好奇,我想既然在安装 Windows 时我从未遇到过任何 UEFI 错误,为什么它是一台全新的笔记本电脑,我把它归咎于微软和制造商,试图阻止人们离开 Windows,这个所谓的错误与我的 Ubuntu 或 VirtualBox 安装没有任何关系,也从未阻止我注册 MOK 密钥。我的意思是,按照其他说明,重启后我从未看到任何 MOK 屏幕,一开始我以为这是所谓的错误,但事实并非如此。如果我没记错的话,我重新安装了 Windows,并更新了 BIOS 固件,这只是为了确保我拥有最新的固件作为预防措施,然后才迁移到 Ubuntu,我确信固件更新没有任何区别,我在启动时一直看到 UEFI 错误,但这个所谓的错误在内核更新后神奇地消失了。
对我来说,唯一的区别是我从不使用双启动,安装 VirtualBox 的全部意义在于,如果我需要使用 Windows,我会将其安装在来宾虚拟机中。安装时,我使用的是 VirtualBox 6.0 和我的内核版本 4.18.0-25-generic,由于我已升级到 5.0.0-36-generic 和 Ubuntu 18.04.3,而且我还将 VirtualBox 升级到版本 6.0.14,我从未不得不重新签署模块,也没有遇到任何问题,我想在某个时候可能从 v6.0.10 开始,我被告知您不必手动签署模块,但我发现无论如何了解它很有用。这是我所做的:
在启用安全启动的 UEFI 系统上安装 Oracle Virtualbox 6.0
仅适用于基于 64 位 Debian 的 Linux 发行版的说明,在本例中我使用的是 ubuntu 18.04.02(bionic)。
1. 从 Oracle 存储库安装 Virtualbox(从 Oracle 存储库安装的优势在于 Virtualbox 会随系统更新而自动更新)。使用以下命令将 Oracle VirtualBox 存储库添加到存储库列表中:
sudo add-apt-repository "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian <dist> contrib"
replace <dist> in the above command with your distribution from the following:
bionic (18.04)
artful (17.10)
zesty (17.04)
yakkety (16.10
xenial (16.04)
wily (15.10)
vivid (15.04)
utopic (14.10)
因此,如果您的系统是 bionic (18.04),则命令是:
sudo add-apt-repository "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian bionic contrib"
1.2 通过发出以下命令下载并注册 OracleVirtualbox GPG 密钥:(GPG 密钥允许您验证并与 VirtualBox 存储库通信)
wget –q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add –
2. 签名 virtualbox 模块并注册 MOK 密钥
2.1. 首先运行以下命令在主驱动器中创建一个目录(文件夹)来存储密钥,从而创建公钥和私钥:
mkdir ~/keys
2.2现在运行以下命令来生成公钥和私钥
openssl req -new -x509 -newkey rsa:2048 -keyout ~keys/MOK.priv -outform DER -out ~keys/MOK.der -nodes -days 36500 -subj "/CN=\Vbox"
注意: 使用上述命令生成的 Mok 密钥输出到 /keys/ 运行命令 ls -al ~/keys/ 即可看到 mok 密钥已成功生成
2.3. 使用公钥和私钥对 virtualbox 模块进行签名(uname -r 替换你的 linux 内核版本,例如 4.18.0-25-generic),这样你就不必手动找到它并将其添加到命令中
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ~/keys/MOK.priv ~/keys/MOK.der $(modinfo -n vboxdrv)
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ~/keys/MOK.priv ~/keys/MOK.der $(modinfo -n vboxnetflt)
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ~/keys/MOK.priv ~/keys/MOK.der $(modinfo -n vboxnetadp)
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ~/keys/MOK.priv ~/keys/MOK.der $(modinfo -n vboxpci)
2.4. 将 MOK(机器所有者密钥)导入安全启动。(注意:MOK Util 将要求输入密码)
sudo mokutil --import MOK.der
2.5. 重新启动并按照说明注册 MOK。
2.6. 确认 MOK 已注册。在终端中输入以下命令
$ cd ~/keys
$ mokutil --test-key MOK.der
MOK.der is already enrolled