我在内核构建时设置了嵌入式设备的内核参数,但可以通过从引导加载程序传递其他参数来覆盖这些参数。
有没有办法构建一个忽略传递给它的参数的内核?
我想要这个的理由有两个:
首先,最好将内核内容隔离在内核“包”中,以方便更新的分发。我们目前不使用 initramfs,但我想它(如果嵌入到内核中)可能是轻松过滤传入参数的一个点。
其次,我们安全策略的另一层。在现有内核上进行二进制补丁或构建一个能够成功启动自定义主板的新内核,这将是一个不小的障碍;有了安全启动链,这几乎是不可能的。
答案1
我认为不存在这样的配置,因为它没有任何意义。如果您不想将参数传递给内核,请锁定引导加载程序,以便无法更改它传递的命令行参数。
引导加载程序决定加载哪个内核,因此阻止内核中的参数更改不会增加任何安全性。构建一个在某些机器上启动的内核并不是一件容易的事。
如果您有安全启动链,则无法替换内核,但当然,保护启动链包括保护内核参数。这是引导加载程序的安全属性,而不是内核的安全属性。
您无法从 initramfs 设置内核参数(当然,可以在内核启动后在运行时设置的参数除外)。太晚了。如果您需要设置一些内核参数,则需要在引导加载程序中完成 - 这就是它的工作。在打包方面不会有任何优势:如果您单独打包引导加载程序,并且您不想从引导加载程序调整某些参数,则只需在内核二进制文件中设置正确的默认值即可不需要阻止内核在其命令行上接受覆盖。