直接用 setfacl -m g:组名:权限 可添加组 acl 权限,但需确保文件系统挂载时启用 acl 选项、区分目录与文件对默认 acl 的支持、正确设置 mask 掩码以避免权限受限。

直接用 setfacl -m g:组名:权限 即可为目录或文件添加指定用户组的 ACL 权限,但要注意路径类型、文件系统支持、默认 ACL 与 mask 控制等关键细节。
确认目标路径和文件系统支持 ACL
ACL 不是内核默认全开的功能,而是依赖文件系统挂载时启用 acl 选项:
- 检查是否已启用:运行
tune2fs -l /dev/sda1 | grep "Default mount options"(把/dev/sda1换成实际设备),输出中必须含acl - 若未启用,临时生效可执行:
sudo mount -o remount,acl /mount/point - 永久生效需编辑
/etc/fstab,在对应挂载项的 options 字段追加acl,例如:/dev/sda1 /data ext4 defaults,acl 0 2 - 普通文件和目录都支持 ACL,但「默认 ACL」(
-d)仅对目录有效
为用户组添加基础 ACL 权限
使用 -m 添加组权限时,语法明确区分用户与组:
- 给组
developers对/shared/project目录赋予读写执行权限:setfacl -m g:developers:rwx /shared/project - 若目标是普通文件(如
config.txt),同样适用:setfacl -m g:developers:rw config.txt - 权限字符只接受
r、w、x、-,不能写成rw-或省略连字符;rwx可按需缩写为rx、rw等
让新创建的文件自动继承组权限(设默认 ACL)
仅用 -m g:组名:权限 不会影响后续新建文件。要实现继承,必须配合 -d 设置默认 ACL:
- 先确保目标是目录,例如
/shared/project - 执行:
setfacl -d -m g:developers:rwx /shared/project - 注意:已有子文件不会自动获得该规则,需额外递归设置当前权限:
setfacl -R -m g:developers:rwx /shared/project - 默认 ACL 和当前 ACL 是两套独立规则,
getfacl输出中会分别显示group::(属组)、group:developers:(ACL 组)、default:group:developers:(默认组)
检查并修正 mask 掩码限制
即使设置了 g:developers:rwx,实际权限也可能被 mask 锁定。mask 是 ACL 的“最大允许权限闸门”:
- 运行
getfacl /shared/project,查看是否有mask::r-x这类行;若其权限比预期窄(比如只有r-x),则组成员实际无法写入 - 刷新 mask:执行
setfacl --mask -m mask::rwx /shared/project - 更简洁方式是直接在设权限时带上
--mask参数:setfacl -m g:developers:rwx --mask /shared/project - 某些 NFS 或旧内核环境不自动更新 mask,必须显式触发











