我在 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"