linux文件权限可通过acl工具链实现精准备份与恢复:用getfacl -r /path > permissions.acl备份,再用setfacl --restore=permissions.acl原样还原,涵盖所有权、权限位及特殊权限。

“Backup Restore备份法”不是标准术语,也没有统一定义。它常被非正式地用来泛指“先备份权限状态,再在需要时恢复”的操作思路,但具体怎么做,完全取决于你面对的是哪类权限——操作系统文件权限、数据库用户权限、macOS隐私授权,还是应用级权限(如Laravel角色)。不同系统机制差异大,不能套用同一套流程。
macOS 隐私与辅助功能权限
Time Machine 会随系统备份一起保存“完全磁盘访问”“辅助功能”“屏幕录制”等开关状态,但前提是整机恢复且账户一致。跨设备迁移或重装系统后,这些权限通常不会自动启用。
- 手动记录:进入 系统设置 > 隐私与安全性,逐项截图或用备忘录记下已勾选的 App 名称(如“DuMate macOS版”“CleanMyMac”)
- 恢复后检查:重装系统后,必须手动重新开启对应开关;钥匙串访问策略也可能重置,建议对关键服务提前测试
- 不依赖备份工具:没有一键导出/导入权限列表的功能,Apple 未提供 TCC 数据库的直接备份接口
Linux 文件与目录权限
真正的“权限备份”在这里是可落地的,核心靠 ACL 工具链,而非简单记下 chmod 数字。
- 备份命令:getfacl -R /path/to/dir > permissions.acl(含所有子目录和文件的完整 ACL+所有权+权限位)
- 恢复命令:setfacl --restore=permissions.acl(原样还原,包括特殊权限如 setuid、ACL 条目)
- 注意点:仅备份权限,不影响文件内容;若目标路径结构已变,需先确保目录存在,否则 restore 会报错
MySQL 用户与权限恢复
mydumper 不处理权限,这是常见误区。权限信息只存在于 mysql 系统库 中,必须用 mysqldump 单独导出。
- 备份权限:运行 mysqldump -u root -p --skip-triggers mysql user db tables_priv procs_priv proxies_priv > mysql_privs.sql
- 恢复权限:导入后执行 mysql -u root -p mysql
- 关键提醒:不要用 mydumper -B mysql 尝试备份权限表,它会静默跳过;恢复前确认目标实例版本兼容性,尤其是 MySQL 8.0+ 的 roles 和 role_edges 表
应用层权限(如 Laravel)
这类权限本质是业务数据,存储在普通数据表中(如 roles、permissions、model_has_permissions),备份方式和业务表完全一致。
- 冗余方案:用 Laravel 的 migration + seeder 实现权限快照,例如把当前权限配置导出为 seed 类,在部署时回填
- 自动化备份:写 Artisan 命令,定期将权限表 dump 成 JSON 或 SQL,存入指定目录,配合定时任务
- 恢复逻辑:清空权限相关表 → 执行 seed 或导入 SQL → 触发缓存刷新(如 Spatie 包的 php artisan permission:cache-reset)











