Linux Context备份与恢复
一、概念与判断
ls -Z 能看到类似 unconfined_u:object_r:httpd_sys_content_t:s0 的标签;若是,则本文的方法适用。另有一类“文件系统上下文”(如 ext4 的 project/quota id),与 SELinux 不同,恢复方式也不同,需先明确类型再操作。二、SELinux Context 的备份与恢复
cp /etc/selinux/config /etc/selinux/config.bak 做配置级备份;自定义文件上下文规则建议导出:semanage fcontext -l > fcontext.rules.bak,必要时也备份本地自定义文件(如 /etc/selinux/targeted/contexts/files/file_contexts.local)。这些备份用于“规则级”恢复与审计。tar --preserve=context(或简写 -c)确保归档内保存 security.selinux 扩展属性。示例:tar czvf backup.tgz --preserve=context -C /var/www html/。这样在解包时无需额外修复即可恢复原有上下文。restorecon -Rv <path> 递归按策略重打标签;如需查看过程加 -v。示例:restorecon -Rv /var/www。适合大规模“误改/迁移后”统一修复。restorecon -f filelist.txt 从清单中逐条恢复,便于定点修复。chcon -t httpd_sys_content_t /var/www/index.html 用于少量对象的快速修正(注意:手工修改可能被策略刷新覆盖,优先用 restorecon/semanage fcontext)。setenforce 0,验证无误后再 setenforce 1 回到 Enforcing,避免大面积阻断业务。semanage fcontext 增删规则,恢复时先 semanage fcontext -l 核对,必要时编辑/移除自定义规则后,再 restorecon -Rv <path> 让默认策略重新生效。三、文件系统 Context 的备份与恢复(project/quota ID 等)
tar 不会保存该信息,需使用能保留扩展属性的工具(如 tar --xattrs)并在相同文件系统/内核支持前提下恢复;更稳妥的做法是连同文件系统一起用 LVM 快照或 Clonezilla 整盘镜像做备份与回滚,避免跨文件系统迁移导致 project/quota 信息丢失。四、实战流程与注意事项
semanage fcontext -l > fcontext.rules.bak)、关键配置(/etc/selinux/config)、数据(tar czvf backup.tgz --preserve=context <path>)。restorecon -Rv <path> 统一校准;若曾自定义规则,按备份的规则文件回滚后用 restorecon 生效。ls -Z <path> 抽样核对;服务侧观察是否恢复正常访问。cp 覆盖目标,优先 tar --preserve=context 或 rsync -a(配合 --xattrs 若可用);cp -a 默认只保留 mode/ownership/timestamp,不保证保留 SELinux 上下文。setenforce 0 进入 Permissive 验证是否为 SELinux 导致,再回到 Enforcing 并修正上下文。semanage fcontext 规则,恢复时以“规则备份 + restorecon”为主,避免手工 chcon 造成与策略不一致。