ACL权限备份与恢复需用getfacl -R --absolute-names导出、setfacl --restore精确还原,确保路径绝对化、UID/GID一致、文件系统支持ACL,并验证默认ACL及掩码是否生效。

用 getfacl 备份目录权限并异地还原,核心在于“完整捕获 + 精确重建”,不是简单导出再导入。关键点是:必须保留绝对路径、递归处理所有子项、规避 umask 干扰、灾备端环境需兼容(如相同 UID/GID 映射或提前同步)、还原时禁用默认 ACL 继承干扰。
一、生产端:全量精细权限采集(含默认ACL)
进入目标全站根目录(如 /var/www/html),执行:
getfacl -R --absolute-names . > /backup/www_acl_full.acl
说明:
-
-R:递归抓取所有子文件/目录 -
--absolute-names:强制输出绝对路径(避免还原时路径错位) -
.表示当前目录,配合--absolute-names可确保路径不依赖执行位置 - 默认 ACL(
default:行)会自动包含在输出中,无需额外参数
二、灾备端:预检与环境对齐(还原前必做)
还原前必须确认以下三点,否则 ACL 会失效或错配:
-
UID/GID 一致:检查生产端用户(如
www-data:33)在灾备机是否同 UID/GID;若不同,需先用usermod -u 33 www-data同步,或用sed批量替换 ACL 文件中的数字 ID(不推荐,易出错) -
文件系统支持 ACL:运行
tune2fs -l /dev/sdXN | grep "Default mount options",确认含acl;挂载时未加noacl -
目标目录为空或已清空:ACL 还原不覆盖内容,只改权限。建议先
rsync -a --delete同步文件本体,再单独还原 ACL
三、灾备端:一键无损还原(含默认ACL继承)
在灾备机目标目录下执行(如 /var/www/html):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
setfacl --restore=/backup/www_acl_full.acl
注意:
- 该命令严格按 ACL 文件中的绝对路径还原,因此备份时用了
--absolute-names至关重要 - 自动重建所有访问 ACL 和默认 ACL(
default:行),子目录新建文件将继承默认权限 - 不修改文件内容、mtime、atime,仅操作权限元数据
- 如提示
Operation not supported,说明文件系统未启用 ACL 支持
四、验证与兜底(还原后必验)
抽样验证典型路径:
getfacl index.php getfacl uploads/ getfacl uploads/.htaccess
重点核对:
- 用户/组权限位(
user::,group::,other::)是否与生产一致 - 是否存在
default:user:等行(证明默认 ACL 已生效) - 是否有
mask::行且值合理(setfacl会自动计算,通常无需干预)
若发现遗漏,可临时用 setfacl -d -m u:deploy:r-x uploads/ 手动补默认 ACL,但应溯源为何主备份未捕获。
整个流程不依赖外部工具,纯 POSIX ACL 标准,兼容主流发行版(CentOS/RHEL 7+, Ubuntu 18.04+)。只要备份时路径和 ID 对齐,还原就是原子级精准。

















