迁移后权限为什么会变
复制、打包解包、同步工具对权限的保留行为各不相同:有的默认重设属主,有的在目标端找不到同名用户时直接落成数字属主,还有的会因为运行账号不同而把属主改成执行者。迁移后出现的「能读不能写」「服务起不来」,多数都能追溯到这类差异。
对账而不是凭感觉修
有效做法是把两端权限清单导出后比对:权限位、属主属组、附加访问控制条目三类信息一起看。差异项逐条判断是迁移造成的还是业务本来就需要的,再按最小权限原则修正,并把改动写入变更记录,便于日后追溯。
基本信息
| 清单导出 | 用文件状态格式输出权限、属主与路径 |
|---|---|
| 附加条目 | 访问控制列表需单独导出与恢复 |
| 修正原则 | 按业务需要最小化授权 |
| 记录要求 | 改动范围与原因写入变更记录 |
典型使用场景
- 迁移后应用报权限不足,无法写入数据目录
- 服务启动失败,日志提示无法创建或写入文件
- 共享目录权限在迁移后扩大,安全扫描提出整改
- 对账发现部分文件属主变成数字标识
- 交付验收时提供权限一致性比对结果
权限清单
权限清单
# 源端与目标端分别导出,再比对差异
find /data -exec stat -c '%A %U:%G %n' {} + | sort > /tmp/perm.src
find /data -exec stat -c '%A %U:%G %n' {} + | sort > /tmp/perm.dst
diff /tmp/perm.src /tmp/perm.dst | head -40
getfacl -R /data > /tmp/acl.bak 2>/dev/null # 保存访问控制列表现状
ls -l /data | head # 抽样确认属主显示是否正常按需修正
按需修正
chown -R app:app /data/app # 恢复应用目录属主
find /data/app -type d -exec chmod 750 {} \;
find /data/app -type f -exec chmod 640 {} \;
setfacl --restore=/tmp/acl.bak # 需要时恢复访问控制列表
# 修正后跑一次业务功能验证,确认读写正常差异与处置
| 差异现象 | 原因 | 处置 |
|---|---|---|
| 属主变成数字标识 | 目标端无同名用户 | 建立同名用户或重新映射属主 |
| 目录权限变小 | 复制工具未保留权限 | 按业务需要恢复权限位 |
| 附加条目丢失 | 传统复制工具不处理列表 | 从导出的清单恢复 |
| 属主被改成执行者 | 以高权限账号执行同步 | 改回业务账号并复核 |
| 权限被放宽 | 为图省事统一设成可读写 | 按最小权限重新收紧 |
不要用把所有文件和目录设成完全开放权限的方式解决权限问题:这既是安全基线的不符合项,也会掩盖真正的属主错配,后续更难定位。