18.10 上的内核锁定阻止了个人签名的 DKMS 模块。我可以禁用它吗?

18.10 上的内核锁定阻止了个人签名的 DKMS 模块。我可以禁用它吗?

我使用一款名为 Douane 的防火墙应用,它需要 DKMS 模块才能运行。该应用仅作为源代码提供,我使用 UEFI 安全启动,因此我一直在通过 mokutil 对我编译的模块进行签名,并在我的 bios 中注册我用来签名的密钥(请参阅我在杜安 维基)。

对模块进行签名和注册在 17.10(内核 4.13.x)下有效,甚至在 18.04(4.15.x)下也有效。

在 18.10(4.18.x 和 4.15.x 下)中,我的 /var/logs/kernel.log 中出现以下错误:

... [  278.847882] PKCS#7 signature not signed with a trusted key
... [  278.848545] Lockdown: Loading of unsigned modules is restricted; see man kernel_lockdown.7

当我输入时,模块已签名并且列出了 DKMS

dkms status

但我的印象是,内核中的锁定可能无法识别非 ubuntu 密钥?

我尝试禁用安全启动,但没有用。从网上读到的资料来看,锁定机制与 UEFI 安全启动完全分开,所以我本来也不指望它能起什么作用。

我想通过禁用内核锁定来验证这个理论。有什么方法可以做到这一点,或者为我的模块添加例外,或者锁定机制是否硬编码到内核中以实现安全稳健性?

答案1

如果我注销并关闭笔记本电脑盖,也会发生类似的事情,之后一切都会冻结,我无法启动,甚至无法进入恢复模式。我最终发现我的 BIOS 已更改为启用安全启动和启用快速启动,并且磁盘配置为 RAID。这不是我在安装时设置的 BIOS。重置 BIOS 后,我可以正常启动。现在,除非我关机,否则我会一直打开笔记本电脑盖。

答案2

这很有趣。我在 Debian 10(内核 5.2.0-bpo.3 = 5.2.17)上的 VirtualBox 中遇到了类似的问题。模块由自生成的密钥签名,但 modprobe 无法加载它们并出现错误

modprobe: ERROR: could not insert 'vboxdrv': Operation not permitted
dmesg 或日志中没有该问题的踪迹。但是可以使用命令暂时禁用锁定
echo 1 > /proc/sys/kernel/sysrq
echo x > /proc/sysrq-trigger
允许加载模块。

答案3

检查用于对模块进行签名的密钥是否确实是您注册的密钥。我怀疑 Ubuntu 18.10 与 Debian bookworm 做了同样的事情,并默认使用新生成的密钥对模块进行签名。

其中/etc/dkms/framework.conf应该有私钥的配置条目,可能被注释掉以使用默认值

# mok_signing_key=/var/lib/dkms/mok.key
# mok_certificate=/var/lib/dkms/mok.pub

几乎所有你可以在网上找到的教程都使用不同的路径,例如

mok_signing_key="/var/lib/shim-signed/mok/MOK.priv"
mok_certificate="/var/lib/shim-signed/mok/MOK.der"

很常见,因为安全启动在 Debian wiki 中使用它——如果该设置被恢复,您将再次使用由 dkms 包生成的密钥,而该密钥默认情况下未注册。

相关内容