做什么
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"