重新编译打包 linux 源码,开启模块签名支持,安装新打的包后无法进入系统

不知道有没有人做过类似的事情:
因为现在的debian系统内核是没有开始模块签名支持的,如果开启这个支持,那么载入没有签名的模块或者错误签名的模块时会被内核拒绝。这样系统安全性会提升。

现在我重新编译了debian内核开启了这项支持,具体做法是apt-get source linux然后修改debian/config/config加入如下的配置

CONFIG_MODULE_SIG_KEY=“” #这儿的值是根据 这儿 的描述手动生成的
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA256=y

然后编译打包内核,dpkg -i 安装打包出来的linux-kernel-XXX-amd64_XXX.deb 和 linux-libc-dev_XXX_amd64.deb
重启系统之后发现无法进入系统,原因是initramfs启动的时候找不到设备,猜测是initramfs中的内核模块的加载被拒绝了,目前还不知道如何解决。

提交一个BUG到BTS?

debian-kernel@lists.debian.org 去了封邮件看看会不会得到什么帮助。

又重新检查了一下新安装的内核模块,确定这些模块并没有被签名,因为如果被签名了,hexdump -C查看模块文件的时候文件末尾应该有~Module signature appended~这样的字符,那么内核在启动时拒绝加载模块的原因就找到了。

然后手动给系统中的所有内核模块签名,再update-initramfs -u -k all重新生成initramfs,此时再重启系统可以正常进入了,但是还是不知道为什么没有自动签名模块。

解决了: https://lists.debian.org/debian-kernel/2018/03/msg00050.html