开启Secure Boot的Balena IoT系统内核拒绝加载自签名模块的原因咨询
开启Secure Boot的Balena IoT系统内核拒绝加载自签名模块的原因咨询
我有一台启用了安全启动的Intel NUC,运行的是Balena IoT系统——这个发行版不使用shim,只预装了自身的密钥(没有微软密钥)。为了测试,我想注册自己的MOK来加载自签名模块。我在正常的Debian机器上这样生成密钥:
openssl req -new -x509 -newkey rsa:2048 -subj "/CN=TLA gru MOK/" -keyout MOK.key -out MOK.crt -days 3650 -nodes -sha256 openssl x509 -in MOK.crt -out MOK.cer -outform DER
因为系统没有shim(发行版也不提供),所以我没法用mokutil。于是我重启NUC进入固件界面,把MOK.cer注册为额外密钥。再次重启后,我检查是否成功:
root@692ff14:~# grep gru /proc/keys 393652e5 I------ 1 perm 1f010000 0 0 asymmetri TLA gru MOK: 48dab8f63ef41164535c15799cea88cb216f52df: X509.rsa 216f52df [] root@692ff14:~# dmesg | grep "TLA gru MOK" [ 2.851781] integrity: Loaded X.509 cert 'TLA gru MOK: 48dab8f63ef41164535c15799cea88cb216f52df'
看起来已经成功了。于是我从NUC上取了一个随机模块,用strip -g btrfs.ko移除原有签名,再用我的密钥签名(还是在Debian机器上操作):
/usr/lib/linux-kbuild-6.1/scripts/sign-file sha256 MOK/MOK.key MOK/MOK.cer btrfs.ko
我把签名后的模块传到NUC上,检查签名存在后尝试insmod加载:
root@692ff14:/tmp# strings btrfs.ko | tail -n 5 TLA gru MOK >e], 6P({ #G\:q ~Module signature appended~ root@692ff14:/tmp# lsmod | grep btrfs root@692ff14:/tmp# insmod ./btrfs.ko insmod: ERROR: could not insert module ./btrfs.ko: Key was rejected by service
这结果太让人失望了。为什么会失败?我是不是误解了MOK的概念?
非常感谢任何帮助。
备注:内容来源于stack exchange,提问作者Markus Grunwald
相关产品推荐
相关产品推荐

