ACL(Access Control List,访问控制列表)是Linux系统中一种更细粒度的权限控制机制,它扩展了传统的Unix权限系统(user/group/other)。通过ACL,你可以:
在开始使用ACL前,请确保你的系统支持ACL:
# 检查文件系统是否支持ACL
mount | grep acl
# 如果分区没有acl选项,可以重新挂载(以/为例):
mount -o remount,acl /
getfacl 文件名
示例输出:
# file: test.txt
# owner: user1
# group: group1
user::rw-
user:user2:r--
group::r--
mask::r--
other::r--
setfacl -m u:用户名:权限 文件名
setfacl -m g:组名:权限 文件名
常用选项:
- -m
:修改ACL
- -x
:删除ACL条目
- -b
:删除所有ACL条目
- -d
:设置默认ACL(对新创建的文件有效)
- -R
:递归操作
# 为用户user2添加读写权限
setfacl -m u:user2:rw test.txt
# 为组group2添加读权限
setfacl -m g:group2:r test.txt
# 设置默认ACL(对新创建的文件有效)
setfacl -d -m u:user2:rwx /path/to/dir
# 删除user2的ACL条目
setfacl -x u:user2 test.txt
# 删除所有ACL条目
setfacl -b test.txt
mask定义了ACL条目中用户和组可以拥有的最大权限。当设置mask后,所有用户和组的有效权限都不会超过mask。
# 设置mask为读执行
setfacl -m m:rx file.txt
# 递归设置目录及其内容的ACL
setfacl -R -m u:user2:rwx /path/to/directory
默认ACL只对目录有效,它决定了在该目录下新创建的文件和目录将继承哪些ACL条目。
# 设置默认ACL
setfacl -d -m u:user2:rwx /path/to/directory
# 备份ACL
getfacl -R /path/to/dir > acl_backup.txt
# 恢复ACL
setfacl --restore=acl_backup.txt
共享目录管理:
# 创建共享目录
mkdir /shared
chmod 770 /shared
# 允许特定用户访问
setfacl -m u:user1:rwx /shared
setfacl -m u:user2:rwx /shared
# 设置默认权限,新创建的文件自动继承
setfacl -d -m u:user1:rwx /shared
setfacl -d -m u:user2:rwx /shared
Web服务器权限管理:
# 允许Apache用户访问特定文件
setfacl -m u:www-data:r-x /var/www/html/secure_files
开发团队协作:
# 允许开发组完全访问,测试组只读访问
setfacl -m g:dev:rwx,g:qa:r-x /project
使用ls -l
查看文件时,如果设置了ACL,权限列末尾会显示+
号:
-rw-rw-r--+ 1 user1 group1 0 Jan 1 10:00 file.txt
当复制或移动文件时:
cp
命令会尝试保留ACL(取决于选项和文件系统)mv
命令会保留ACL,因为inode不变--preserve=all
选项可以更好地保留ACLACL可能会影响系统性能,特别是在包含大量文件的目录上使用递归ACL时。
某些备份工具可能不会保留ACL信息,请确保你的备份方案支持ACL。
通过掌握ACL,你可以实现比传统Unix权限系统更灵活、更精确的访问控制,特别适用于需要复杂权限管理的多用户环境。