这是一篇关于在 Debian 系统上编写并签名“Hello, world”内核模块使其在启用安全启动时可加载的快速指南:
- 首先创建工作目录,编写名为
hwkm
的简单内核模块并编译,生成hwkm.ko
二进制文件。尝试加载时内核会拒绝,因为现代主流发行版默认启用安全启动,要求内核模块签名才能加载。 - 在 Debian 上负责安全启动的主要程序是
shim
,它默认包含在 Debian 11 中并由微软 UEFI CA 签名。shim
会检查内核和内核模块是否签名。要签名内核模块,需要注册“机器所有者密钥”。 - 生成“机器所有者密钥”的步骤:创建
openssl.cnf
文件,使用openssl req
生成MOK.priv
和MOK.der
文件。然后使用mokutil
导入密钥,需输入密码并记住。 - 重启后通过
MokManager
完成密钥注册,包括选择“Enroll MOK”、“Continue”、回答“yes”并输入之前的密码,最后再次重启。 - 注册成功后可以使用密钥签名内核模块,如
/usr/lib/linux-kbuild-$(uname -r | awk -F'.' '{print $1"."$2}')/scripts/sign-file sha256 ~/mok/MOK.priv ~/mok/MOK.der./hwkm.ko
。 - 最后确认签名成功,加载和卸载内核模块,并在
dmesg
中查找相应日志,确认签名后的内核模块可以正常加载和卸载。 - 参考资料包括多个关于安全启动和内核模块签名的相关文档和网站。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。