initrd.img 都是 644,而 vmlinuz 是 600。这在许多其他发行版(如果不是全部)上都是相反的。我认为其他发行版实际上做得正确。vlinuz 中的内容都是公开的,里面没有秘密。但是,initrd 可以包含各种自定义设置,当other
无法root
读取其内容时,这些设置可能会暴露攻击面。此外,人们在进行全盘加密时会将 luks 密钥包含在 initrd 中,这是一种趋势。因此,绝对no! no!
要将 initrd 设置为全局可读。
这种设计背后的原因是什么?为什么 ubuntu 需要 initrd.img 全局可读?是否有任何功能依赖于此?
我希望有经验的用户可以告诉我如何在 ubuntu 中将 initrd.img 永久设置为 600。因为这些文件是在内核更新期间自动生成的。也许可以添加一些脚本/etc/kernel/postinst.d/
?
答案1
我发现 20.04 和 22.04 之间存在差异,我的机器上都安装了这两个版本。在 20.04 中,我看到了您在问题中描述的行为,而在 22.04 中,initrd.img* 文件具有 600 个权限。
跌跌撞撞这个错误我检查了文件/etc/initramfs-tools
并发现相关文件在 22.04 中存在但在 20.04 中不存在:
~$ sudo cat /etc/initramfs-tools/conf.d/calamares-safe-initramfs.conf
[sudo] password for mook:
UMASK=0077
~$ ls -l /etc/initramfs-tools/conf.d/calamares-safe-initramfs.conf
-rw------- 1 root root 11 Apr 25 02:53 /etc/initramfs-tools/conf.d/calamares-safe-initramfs.conf
所以我认为,这是您需要添加的文件,以便为您的 initrd.img* 文件获取安全权限。
当然,这不会影响已经存在的 initramfs 映像,用于chmod
将其权限更改为 600。
答案2
内核和符号文件以权限 0600 安装,因此漏洞利用者无法读取这些文件以了解攻击中要使用的地址或偏移量。这远非万无一失,因为攻击者可以提前下载所有内核包并自行构建必要的偏移表,但这需要额外的工作。
改变默认的 initramfs 权限如 @mook765 的答案中所述。如果您对此有强烈不满,请提交错误报告。help.ubuntu.com 上有关全盘加密的文章包括此步骤以及如何将密钥嵌入到 initramfs 的建议。
对于没有将其他文件系统的密钥材料嵌入到其 initramfs 中的用户来说,默认设置应该是安全的。(我相信这是一种非常罕见的配置。)