我在管理装有华硕 X99 主板的机器上的安全启动设置时遇到了一些问题。
我已成功使用 生成 MOK openssl
,然后使用它为 WiFi 卡 ( bcmwl-kernel-source
/ wl.ko
) 的内核模块签名,并使用 MokManager 将密钥注册到其中shim
(如果我理解正确的话?)。我通过为其添加 EFI 引导记录来运行 MokManager,然后使用 EFI 在引导时启动它。mokutil
但我无法开始工作,不得不手动将密钥复制到分区/boot
,重新启动,然后选择“从磁盘注册密钥”并按此操作。但一旦完成,wifi 驱动程序的内核模块就会在安全引导下加载并运行,没有任何问题。
因此,在安全启动模式下签名、验证和加载内核模块确实有效。
看起来,失败mokutil
与 X99 的某种主板/固件错误有关(根据 Fedora 错误报告,还有其他一些型号也存在此问题):
https://bugzilla.redhat.com/show_bug.cgi?id=1263992
以下是mokutil
我的机器上的一些示例输出:
alex@alex-dev-desktop:~$ mokutil --sb-state
SecureBoot enabled
alex@alex-dev-desktop:~$ sudo mokutil --password
input password:
input password again:
Failed to write MokPW: Invalid argument
alex@alex-dev-desktop:~$ sudo mokutil --import MOK.der
SKIP: MOK.der is already enrolled
alex@alex-dev-desktop:~$ sudo mokutil --list-enrolled |grep Issuer
Issuer: C=GB, ST=London, L=London, O=ghostaldev, CN=Secure Boot Signing/emailAddress=<my email>
Issuer: C=GB, ST=Isle of Man, L=Douglas, O=Canonical Ltd., CN=Canonical Ltd. Master Certificate Authority
alex@alex-dev-desktop:~$ sudo mokutil --import SOMENEWKEY.der
input password:
input password again:
Failed to enroll new keys
alex@alex-dev-desktop:~$ sudo mokutil --disable-validation
password length: 8~16
input password:
input password again:
Failed to request new MokSB state
alex@alex-dev-desktop:~$
如图所示,我用来签署 wifi 驱动程序的密钥位于已注册密钥列表中,与 Canonicals 并列,但用于mokutil
注册密钥不起作用。似乎所有用于控制 MokManager 的写入数据的命令都失败了。
我正在尝试做的事情:对 Virtualbox 内核模块进行签名,以便它们在安全启动下运行
当我执行 时sudo apt-get install virtualbox-dkms
,我收到一个终端 GUI 提示,告诉我我处于安全启动模式,模块需要签名和密钥注册,并要求我设置密码。在后台,软件包安装看起来像是试图使用mokutil
,并且在输出中我看到了Failed to enroll new keys
消息。使用hexdump
,看起来好像vboxdrv.ko
模块已经由某种密钥签名:
alex@alex-dev-desktop:~$ hexdump -e "16 \"%_p\" \"\\n\"" /lib/modules/4.15.0-58-generic/updates/vboxdrv.ko |tail -n 27 |head -n 5
......1..q0..m..
.0H001.0,..U...%
mint Secure Boot
Module Signatur
e key..W+.0.x..(
alex@alex-dev-desktop:~$
我不确定这个使用了什么密钥,但显然这不是一个有效的解决方案,因为它没有注册。
我正在寻找一种解决方法来让这些内核模块在安全启动下签名并加载。以下是我对潜在解决方法的想法(以及我为什么陷入困境):
- 注册用于签署 virtualbox 模块的密钥(我不知道在哪里可以找到它)
- 使用我已经注册的密钥自行对它们进行签名(我尝试过这个,但似乎不起作用 - 我不确定是否可以使用多个密钥对内核模块进行签名)
- 禁用内核模块验证
shim
(我的理解是,这是该mokutil --disable-validation
命令的用途,但它不起作用,当我启动 MokManager 时,我没有看到可用的选项 - 只有“继续启动”,“从磁盘注册密钥”和“从磁盘注册哈希”,没有“更改安全启动状态”选项,如图所示这一页, 例如)。
真的很感谢这里的一些帮助!:)