我有一个 Debian 10 系统。它启用了安全启动。我正在尝试为 virtualbox 签名并加载新的内核模块。我使用 生成了证书和私钥openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=My Name/" -nodes
。然后我用 导入了这个密钥mokutil --import MOK.der
。然后我输入一些密码,重新启动并注册密钥。然后,在阅读了数十个不准确的教程(包括 Debian.org 自己的教程)后,他们都建议使用一个名为sign-file
.然而,sign-file
它完全丢失了,并且对系统每个目录的递归搜索没有返回任何结果。在浏览了一些不起眼的论坛后,我发现了一个名为 的工具sbsign
,它似乎是签名任何内容的唯一可用选项。任何时候我尝试使用命令来签署模块sbsign --cert ~/MOK.pem --key ~/MOK.priv /lib/modules/4.19.0-9-amd64/misc/vboxdrv.ko
。然而,该命令返回Invalid DOS Header Magic
.互联网上几乎没有任何地方提到此错误,也没有以任何有意义的方式与我的具体问题相关。
这个错误是什么意思?我可以做什么来签署这些模块?
答案1
sbsign
用于签署.efi
二进制文件和其他 PE32(+) 格式的可执行文件。
sign-file
与内核源代码(在scripts
源代码 tarball 的目录中)和linux-kbuild-4.19
Debian 10 的 .deb 包中一起提供。它对 ELF 格式的二进制文件进行签名,这就是 Linux 内核模块。
您不能用一种替代另一种,因为文件格式不同。
如果您知道所需工具的确切名称,但不知道其所在包的名称,则应该转到发行版的包内容搜索引擎(好的发行版都有一个)。这是 Debian 的:https://www.debian.org/distrib/packages
向下滚动到搜索包内容,在“关键字”字段中输入“sign-file”,单击“搜索”,如果该文件存在于该发行版的任何包中,则您可以将要找到它。