我正在尝试为实时启动的 Debian 系统配置 selinux。
由于构建和系统配置期间发生大量更改,SELinux 无法运行,需要重新标记整个文件系统。这必须在构建时使用解压的 squashfs 文件从 chroot 或 systemd-nspawn 内部或从主机系统完成。
尚未找到成功实现此目的的方法。/etc/selinux/default/contexts/files/file_contexts.subs_dist 文件应该将文件系统目标别名置于文件系统位置后面,但在 SELinux 重新标记期间尝试使用它将主机文件系统重定向到解压的 squash 系统失败:SELinux 继续重新标记主机文件系统,并且 squashfs 文件系统被引用为未知文件类型。
有没有一种简单的方法可以在 squashfs 中为 SELinux 重新标记文件系统?
答案1
目前,我还没有找到解决这个问题的已知方法,但我确信可以在可写的解压 squashfs 中或上操作 SELinux。
否则,一种实时构建解决方案是使用 debootstrap 手动构建,此时不使用 isolinux,因此没有 squashfs 或 iso,添加内核和软件包;然后将这个可写的 Debian 引导到 USB 密钥或在虚拟客户机中引导;然后运行 SELinux 重新标记文件系统。完成此操作后,构建过程可以从 isolinux 继续到 squashfs、iso 和通常的不可写混合系统。
可写方法概述如下:
https://vdmit.org/linux/debian-live-usb-debootstrap.html
有利的、不可写的混合手动构建 - 否则尝试使用 Debian 实时构建脚本自动完成的手动方法 - 概述如下:
https://l3net.wordpress.com/2013/09/21/how-to-build-a-debian-livecd/
该方法的唯一缺点是,为了使标记正确,必须在 debootstrap 阶段提供完整的配置,因为它将位于可启动混合系统中,并且没有可用的方法来重新标记解压后的 squash,我认为这是不可接受的,因为 squashfs 可能需要在构建后进行编辑。
当然,使用配置钩子导入的附加对象需要适当或自定义的上下文,或者启动后标记的宽松上下文,但这是一项很少消耗 RAM 的小任务。
否则,这仍然是一个悬而未决的问题。