做什么

ACL = Access Control List。传统 rwx 只能"所有者 / 一个组 / 其他人"三档——ACL 让你给具体用户 / 组单独授权

前置

文件系统必须挂载时启用 acl(ext4 / xfs 现代版默认就开了)。看:

mount | grep acl
# 或 fstab 里加 acl 选项

getfacl:看

getfacl file.txt
# # file: file.txt
# # owner: wadely
# # group: wadely
# user::rw-
# group::r--
# other::r--

setfacl:设

# 给具体用户加权限
sudo setfacl -m u:alice:rw file.txt

# 给具体组
sudo setfacl -m g:devteam:rwx folder/

# 默认 ACL(目录里新建的文件继承)
sudo setfacl -d -m u:alice:rw folder/

# 递归
sudo setfacl -R -m u:alice:rw folder/

# 删除某条 ACL
sudo setfacl -x u:alice file.txt

# 清空所有 ACL
sudo setfacl -b file.txt

看效果

getfacl file.txt
# user:alice:rw-      ← 加的 ACL 这里
ls -l file.txt
# -rw-rw-r--+ 1 wadely wadely 0 May 9 file.txt
#         ↑
#         + 号表示有 ACL

实战

# 给 alice 单独读写一个共享文件
sudo setfacl -m u:alice:rw /srv/data/file.csv

# 把整个项目目录授权给 alice
sudo setfacl -R -m u:alice:rwx /srv/project
sudo setfacl -d -R -m u:alice:rwx /srv/project    # 新文件继承

# 看效果
getfacl /srv/project | head

ACL vs 传统组

场景
几个固定组 + 简单需求 传统 rwx + 组
给单个用户授权 / 复杂组合 ACL
跨多个项目临时授权 ACL

  • 不是所有备份 / 复制工具都保留 ACL——cp 默认不保留,要加 --preserve=all 或用 rsync -aA
  • NFS / CIFS 等网络文件系统对 ACL 支持有限
  • ACL 不能替代传统 chmod——chmod 同样影响 ACL 的"effective rights mask"