ACL(Access Control List,访问控制列表)是传统Linux权限系统的扩展,允许更细粒度的权限控制。与标准的user/group/other权限模型相比,ACL提供了:
getfacl [文件或目录]
示例输出:
# file: project/
# owner: root
# group: team
user::rwx
user:alice:r-x
group::r-x
group:dev:rwx
mask::rwx
other::---
setfacl [选项] [规则] [文件或目录]
常用选项:
- -m
修改ACL规则
- -x
删除ACL规则
- -d
设置默认ACL(用于目录继承)
- -R
递归应用
setfacl -m u:username:permissions file
示例:允许用户alice读写日志文件但不执行
setfacl -m u:alice:rw /var/log/app.log
setfacl -m g:groupname:permissions file
示例:允许qa组读取测试结果
setfacl -m g:qa:r /opt/test_results/
setfacl -d -m u:username:permissions directory
示例:新创建的文件自动继承developer用户的rw权限
setfacl -d -m u:developer:rw /shared/projects/
ACL中的mask定义了用户和组能获得的最高权限,类似于umask。设置mask:
setfacl -m m::permissions file
示例:限制最大权限为读执行
setfacl -m m::rx script.sh
权限继承规划:在项目目录顶层设置默认ACL,确保新文件自动获得正确权限
定期审计:使用getfacl -R /important/dir > acl_backup.txt
备份ACL设置
组合使用传统权限和ACL:基础权限使用传统模型,特殊需求使用ACL
文档记录:维护ACL变更日志,说明每个特殊权限的设置原因
性能考虑:在极端高IO场景评估ACL对性能的影响
权限不生效:
mount -o acl
)权限意外继承:
getfacl -d
)备份恢复问题:
setfacl --restore=acl_backup.txt
恢复ACL通过合理使用ACL,可以实现比传统Unix权限模型更灵活、更精确的访问控制,特别适合多用户协作环境或需要精细权限控制的场景。