当在单独的系统(即可能与最初安装和使用文件系统的系统不同的系统)上恢复文件系统时,我想将正确的安全标签应用于正在恢复的文件。
这个查询有几个方面:
如果可能的话,我想为每个文件应用正确的标签作为它会进行恢复(而不是先进行恢复,然后再使用 SELinux 工具单独应用标签)。
恢复的操作系统可能与最初托管要恢复的文件系统的操作系统不同。
如果(1)是可能的,我可以以某种方式将恢复工具指向与恢复操作系统默认值不同的一组文件上下文(例如,/etc/selinux/targeted/contexts/files/file_contexts) - 或者覆盖任何安全上下文可能与档案相关的信息。另见 (5)。
与(2)类似,恢复操作系统与目标操作系统有多大“不同”?也就是说,不同的内核版本(例如,恢复操作系统的 linux 2.6 与目标操作系统的 4.4)、不同的文件系统或不同的用户空间(例如 libc 和 selinux 工具)会在什么时候产生影响?是否有适用于“跨版本”恢复的经验法则(例如,API/ABI 保证从操作系统的一个主要版本到另一个版本以及需要注意的前向/后向兼容性问题)。
就像人们可能希望保留经典的 UNIX 权限、文件所有权和扩展文件属性一样,人们可能希望保留正在恢复的文件的原始安全上下文。许多备份工具 [1] 可以嵌入文件所有权,但可能大多数没有扩展来保留安全上下文(从而使恢复期间更容易恢复上下文) - 也许有一些?安全上下文不需要嵌入到存档中 - 它可以“带外”保存在一个或多个可以与存档本身一起保存的文件中。
提出这个问题主要关注 SELinux 实现,但通常适用于其他安全框架(例如 MAC 和 Capsicum)。适用于其他安全框架的相关信息也很有帮助。
这个问题也围绕着恢复文件系统而展开,但通常也适用于从不一定是文件系统的备份映像进行恢复——它可能只是文件系统一部分的文件层次结构。这种区别有时很重要,因为不同的备份工具在存储(和提取)有关存档内容的一些扩展信息方面具有不同的功能。
[1] 该问题也适用于 dump(8)/restore(8) 工具,但也适用于其他工具,例如基于 tar(1) 和 libarchive(3) 的选项。
最近的 RPM 格式对嵌入安全策略信息提供了一些支持。我没有详细研究它,因为它并不是真正的通用备份工具。也许我应该开始使用 RPM 进行备份? </笑话>
更新:尝试在正确定义了 selinux 上下文但主机的 selinux 上下文(在 chroot 之外)不同的 chroot 中进行恢复<chroot_dir>/etc/selinux
并不能解决此问题。例如,当主机环境为 CentOS 6 时,尝试在 CentOS 7 chroot(在 /mnt 中)中设置 CentOS 7 文件的上下文会失败:
sudo chroot /mnt chcon -v -v system_u:object_r:vmtools_unconfined_exec_t /etc/vmware-tools changing security context of '/etc/vmware-tools'
chcon: failed to change context of '/etc/vmware-tools' to 'system_u:object_r:vmtools_unconfined_exec_t': Invalid argument