Linux ACL备份恢复需先确认文件系统启用acl挂载选项,再用getfacl -R导出、setfacl --restore精准还原,并通过getfacl比对、mask检查及实测访问验证生效。

Linux 中 ACL 权限的备份与恢复,核心在于“导出可还原、恢复不静默、验证有依据”。不能只靠 tar 或 cp 默认行为,必须显式处理 ACL 元数据,并确保底层文件系统支持。
确认目标文件系统已启用 ACL 支持
ACL 不是默认“开箱即用”的功能,它依赖挂载选项。未启用时,所有备份操作都会静默失败或降级为普通权限。
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,确认当前挂载点含acl标志 - 若无,临时启用:
sudo mount -o remount,acl /mount/point - 要永久生效,编辑
/etc/fstab,在对应分区的挂载选项中加入acl(如defaults,acl),再执行sudo mount -o remount /mount/point
安全导出 ACL 规则为文本(灾备+审计双用途)
使用 getfacl -R 是最可靠方式——输出格式与 setfacl --restore 完全兼容,且含注释、路径、默认 ACL 等完整信息。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 递归导出整个目录树:
getfacl -R /var/www > www_acl_$(date +%F).acl - 跳过已删除或无访问权限的路径(避免中断):
getfacl -R --skip-missing /opt/app > app_acl.acl - 建议同步记录基础权限快照:
ls -lR /var/www > www_perms_$(date +%F).txt - 导出文件开头手动添加头信息,例如:
# Backup time: $(date -I)T$(date -R | cut -d' ' -f5)<br># Host: $(hostname)<br># Path: /var/www<br># Generated by: getfacl -R --skip-missing
精准恢复 ACL 权限(不覆盖内容,只还原控制规则)
恢复不是解压完就结束。ACL 必须单独应用,且需在正确路径下执行,否则路径不匹配将导致还原失败。
- 先确保目标目录结构已存在(可用
rsync -a或tar -x恢复文件内容) - 切换到备份时所在的父目录(例如
cd /),再执行:sudo setfacl --restore=/backup/www_acl_2026-08-29.acl - 若用
tar --acls备份,解压时加--acls可自动还原,但部分旧版 tar 不稳定,仍推荐显式setfacl --restore - 注意:恢复过程不会修改文件内容、时间戳或属主,仅重写 ACL 条目和 mask
验证 ACL 是否真正生效
跳过验证等于没备份。ACL 错误常表现为“看起来还原了,但用户实际无法访问”。
- 抽查关键文件对比:
getfacl /var/www/index.html与原始备份文件中的对应段落是否一致 - 检查 mask 是否合理:ACL 中的 mask 控制有效权限上限;若权限异常受限,可能需手动修正:
sudo setfacl -n -m m::rwx /var/www - 切到被授权用户实测:
sudo -u tester sh -c 'touch /var/www/testfile 2>/dev/null && echo OK || echo FAIL' - 用
namei -l /var/www检查路径各层是否都允许该用户 traverse(尤其当父目录有 restrictive ACL 时)

















