必须为目录设置默认ACL才能让新建子文件自动继承权限;默认ACL仅对目录生效、不影响已有内容,需确认文件系统挂载含acl选项、安装acl工具包,再用setfacl -d -m设置,并配合umask 002和chmod g+s确保权限准确落地。

要让新建的子文件自动获得指定权限,必须为目录设置默认 ACL(default ACL),而不是普通文件。默认 ACL 只对目录生效,且只影响后续创建的对象,不改变已有内容。
确认前提条件
确保系统支持并启用了 ACL:
- 检查文件系统是否挂载时带
acl选项:运行tune2fs -l /dev/your_partition | grep "Default mount options",输出中需含acl - 若不支持,编辑
/etc/fstab,在对应挂载项的 options 字段添加acl,例如:/dev/sda1 /shared ext4 defaults,acl 0 2,然后执行sudo mount -o remount /shared - 确认已安装
acl工具包:which setfacl,未安装则用sudo apt install acl(Debian/Ubuntu)或sudo dnf install acl(RHEL/CentOS)
设置默认 ACL 的核心命令
对目标目录(如 /shared/project)执行:
-
setfacl -d -m u:alice:rwX /shared/project—— 给用户 alice 默认读写权限(X表示仅对目录和已有执行位的文件加 x) -
setfacl -d -m g:devteam:rwx /shared/project—— 给组 devteam 默认读写执行权限 - 如需同时赋予当前目录本身相同权限,再补一条不带
-d的命令:setfacl -m g:devteam:rwx /shared/project
执行后用 getfacl /shared/project 查看,确认输出中有以 default: 开头的条目。
配合 umask 和 setgid 确保权限落地
默认 ACL 设了 ≠ 新文件真有权限,还需两层协同:
-
umask:它会过滤掉新建文件的权限位。协作目录建议统一设为
002(文件得664,目录得775),可在/etc/profile或用户~/.bashrc中添加umask 002 -
setgid:对目录执行
chmod g+s /shared/project,确保新创建的文件/子目录继承父目录所属组
验证与清理
测试是否生效:
- 在
/shared/project下新建文件:touch test.txt,再运行getfacl test.txt,应看到 alice 和 devteam 的权限条目 - 新建子目录:
mkdir subdir,运行getfacl subdir,应同时包含常规权限和default:条目(说明具备继续继承能力) - 清除某条默认规则:
setfacl -d -x u:alice /shared/project - 彻底清空所有默认 ACL:
setfacl -d -b /shared/project(注意-d不可省略)











