内核编译后签署模块

内核编译后签署模块

我在 tmpfs 中构建了一个内核,然后重新启动。

现在,当我编译第 3 方模块时,我看到一条消息,

NO SIGN [M] XXXX.ko

我怎样才能得到它的签名?我猜期间生成的密钥对rpmbuild已经丢失了

答案1

令人惊讶的是缺乏文档。我找到了这个文件,模块签名.txt,它是 RHEL6 内核文档的一部分。在本文档中,它展示了如何生成签名密钥,假设您想要将所有模块签名作为内核构建的一部分:

cat >genkey <<EOF
%pubring kernel.pub
%secring kernel.sec
Key-Type: DSA
Key-Length: 512
Name-Real: A. N. Other
Name-Comment: Kernel Module GPG key
%commit
EOF
make scripts/bin2c
gpg --homedir . --batch --gen-key genkey
gpg --homedir . --export --keyring kernel.pub keyname |
 scripts/bin2c ksign_def_public_key __initdata >crypto/signature/key.h

还有来自 Linux Journal 的文章,标题为:签名的内核模块有一些关于如何执行此操作的详细信息和步骤,但我找不到用户空间工具extract_pkey及其mod引用。

你可能想四处看看格雷格·克罗的网站,您可能会在他的演讲中发现一些有用的东西。

参考

答案2

转到内核源目录并执行以下操作(示例):

./scripts/sign-file sha512 ./signing_key.priv ./signing_key.x509 /lib/modules/3.10.1/kernel/drivers/char/my_module.ko

CONFIG_MODULE_SIG通过打开 .config 并在配置值中读取它来检查内核正在使用的摘要算法是什么:

CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA512=y
CONFIG_MODULE_SIG_HASH="sha512"

相关内容