批量转换旧目录为标准ACL协作目录需分三步:先启用文件系统ACL支持,再为目录设置默认ACL继承规则,最后用校验脚本递归修复现有内容并固化基线权限。

批量将旧目录转为标准 ACL 协作目录,核心不是“全盘重设权限”,而是分三步走:先启用 ACL 支持,再设置默认继承规则,最后用校验脚本固化基线。关键在于让新创建的文件/子目录自动获得协作所需权限,避免每次手动 chmod/chown。
确认并启用文件系统 ACL 支持
ACL 不是默认开启的,需检查挂载参数:
- 运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" | grep acl,若无输出,说明未启用
- 临时启用(重启失效):sudo mount -o remount,acl /your/mount/point
- 永久生效:编辑 /etc/fstab,在对应分区行的 options 字段中加入 acl(如 defaults,acl),再执行 sudo mount -o remount /mount/point
为目录配置默认 ACL 继承规则
仅靠 chmod 无法让新建文件自动带组写权限,必须用 setfacl 设置默认规则:
- 例如协作目录 /opt/myapp/data 需同组可写:sudo setfacl -d -m g:myapp:rwx /opt/myapp/data
- 同时确保目录本身权限允许组访问(如 770 或 750):sudo chmod 770 /opt/myapp/data
- 验证是否生效:getfacl /opt/myapp/data | grep "default:" 应看到类似 default:group:myapp:rwx
- 注意:默认 ACL 只影响新创建项,已有文件需单独处理(见下一步)
批量修复现有内容并固化检查逻辑
已有文件不会自动继承默认 ACL,需递归补全;建议用轻量脚本统一管理:
- 先给目录下所有现有子项补 ACL:sudo setfacl -R -m g:myapp:rwx /opt/myapp/data
- 再用校验脚本确保基线一致(保存为 fix-acl-baseline.sh):
DIR="/opt/myapp/data"
GROUP="myapp"
# 确保目录本身权限和 ACL
sudo chmod 770 "$DIR"
sudo setfacl -d -m g:"$GROUP":rwx "$DIR"
sudo setfacl -R -m g:"$GROUP":rwx "$DIR"
# 可选:清理冗余 ACL 条目(保留默认 + 组规则即可)
sudo setfacl -R -b "$DIR"
sudo setfacl -d -m g:"$GROUP":rwx "$DIR"
sudo setfacl -R -m g:"$GROUP":rwx "$DIR"
- 脚本末尾的 setfacl -b 是清理非必要 ACL,避免规则堆积干扰判断
- 后续可集成进 CI/CD 流程或定时任务,定期运行校验


















