我有一个 cron 作业正在备份以严格模式运行的 SELinux 系统。问题是 SELinux 想要拒绝对备份脚本的访问,因为它想要访问文件系统上的每个文件(以及这些文件上的所有上下文)。我现在正在宽容模式下运行,因此脚本可以工作,但我想关闭宽容模式。
kernel: [1491196.754521] type=1400 audit(1325232096.275:12572): avc: denied { read open } for pid=24642 comm="xfsdump" name="init.d" dev=dm-1 ino=268794309 scontext=root:sysadm_r:cronjob_t tcontext=system_u:object_r:initrc_state_t tclass=dir
以 unconfined_t 身份运行脚本不起作用,因为运行严格策略时似乎不允许 unconfined_t 。
通过拍摄根的 LVM 快照、安装该快照,然后执行 xfsdump 来执行备份。它还将 /boot 分区 (ext2) 备份到 tarball 中。
执行此类备份的正确方法是什么?
有没有一种方法可以挂载文件系统,其中可以备份文件上下文,但不会强制执行?但也出于学术目的,如果我想备份一个无法进行此类安装的系统(已安装且无法重新安装),那么如何完成?
答案1
您需要更具体地告诉我们您正在运行的发行版/策略,有些允许“不受限制”的进程来满足您的需求(man runcon),其他则不允许 - 在这种情况下,您必须标记您的备份脚本使用允许对所有文件进行读取访问的 SELinux 类型或为其创建新的应用程序策略(困难)。
编辑:我假设你已经读过SELinux 备份常见问题解答: 使用star
答案2
有一个可以使用的备份策略模块,它提供 backup_t 并允许系统备份。它是 Tresys refpolicy 的一部分,http://oss.tresys.com/projects/clip/browser/trunk/refpolicy/src/selinux-policy-clip/policy/modules/admin/backup.te
安装后,只需将备份脚本的文件上下文设置为backup_exec_t,它就可以访问整个系统。