ACL (Access Control List) 是Linux系统中用于实现更细粒度权限控制的机制,它扩展了传统的Unix权限系统(user/group/other)。通过ACL,你可以:
在开始使用ACL前,请确保你的文件系统支持ACL:
# 检查文件系统是否支持ACL
mount | grep acl
# 如果文件系统不支持ACL,可以重新挂载启用
mount -o remount,acl /
getfacl 文件名
示例输出:
# file: testfile
# owner: user1
# group: group1
user::rw-
user:user2:r--
group::r--
mask::r--
other::r--
setfacl -m u:用户名:权限 文件名 # 为用户设置
setfacl -m g:组名:权限 文件名 # 为组设置
示例:
setfacl -m u:user2:rwx testdir # 给user2赋予rwx权限
setfacl -m g:developers:rx project/ # 给developers组赋予rx权限
setfacl -x u:用户名 文件名 # 删除特定用户的ACL
setfacl -x g:组名 文件名 # 删除特定组的ACL
setfacl -b 文件名 # 删除所有ACL条目
对于目录,可以设置默认ACL,这样在该目录下新建的文件/目录会继承这些权限:
setfacl -d -m u:用户名:权限 目录名
setfacl -d -m g:组名:权限 目录名
示例:
setfacl -d -m u:user2:rwx shared_dir/
setfacl -d -m g:team:rw shared_dir/
# 创建共享目录
mkdir /shared
# 设置组所有权
chown :developers /shared
# 设置基本权限
chmod 770 /shared
# 为特定用户添加额外权限
setfacl -m u:contractor1:rx /shared
# 设置默认ACL,使新文件继承权限
setfacl -d -m g:developers:rwx /shared
# 允许Apache用户读取网站文件
setfacl -R -m u:www-data:rx /var/www/html
# 允许开发组修改内容
setfacl -R -m g:webdev:rwx /var/www/html
# 设置默认ACL
setfacl -d -R -m g:webdev:rwx /var/www/html
备份ACL:可以使用getfacl -R /path > acl_backup.txt
备份ACL,用setfacl --restore=acl_backup.txt
恢复
权限掩码(mask):ACL有一个mask条目,它限制了ACL用户和组的最大有效权限
性能影响:大量ACL条目可能会轻微影响性能
兼容性:确保需要访问这些文件的所有应用程序都支持ACL
递归设置:使用-R
参数递归设置目录及其内容
通过合理使用ACL,你可以实现比传统Unix权限系统更灵活、更精确的权限管理方案。