插件窝 干货文章 利用Linux ACL进行细化权限管理

利用Linux ACL进行细化权限管理

权限 ACL setfacl 设置 814    来源:    2025-04-09

Linux ACL 细化权限管理指南

什么是ACL

ACL (Access Control List) 是Linux系统中用于实现更细粒度权限控制的机制,它扩展了传统的Unix权限系统(user/group/other)。通过ACL,你可以:

  • 为特定用户设置文件/目录权限
  • 为特定组设置文件/目录权限
  • 设置默认权限,使新创建的文件/目录继承这些权限

检查ACL支持

在开始使用ACL前,请确保你的文件系统支持ACL:

# 检查文件系统是否支持ACL
mount | grep acl

# 如果文件系统不支持ACL,可以重新挂载启用
mount -o remount,acl /

ACL基本命令

1. 查看ACL权限

getfacl 文件名

示例输出:

# file: testfile
# owner: user1
# group: group1
user::rw-
user:user2:r--
group::r--
mask::r--
other::r--

2. 设置ACL权限

setfacl -m u:用户名:权限 文件名  # 为用户设置
setfacl -m g:组名:权限 文件名    # 为组设置

示例:

setfacl -m u:user2:rwx testdir  # 给user2赋予rwx权限
setfacl -m g:developers:rx project/  # 给developers组赋予rx权限

3. 删除ACL权限

setfacl -x u:用户名 文件名  # 删除特定用户的ACL
setfacl -x g:组名 文件名    # 删除特定组的ACL
setfacl -b 文件名           # 删除所有ACL条目

默认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/

实用示例

1. 共享目录管理

# 创建共享目录
mkdir /shared

# 设置组所有权
chown :developers /shared

# 设置基本权限
chmod 770 /shared

# 为特定用户添加额外权限
setfacl -m u:contractor1:rx /shared

# 设置默认ACL,使新文件继承权限
setfacl -d -m g:developers:rwx /shared

2. Web服务器权限管理

# 允许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

注意事项

  1. 备份ACL:可以使用getfacl -R /path > acl_backup.txt备份ACL,用setfacl --restore=acl_backup.txt恢复

  2. 权限掩码(mask):ACL有一个mask条目,它限制了ACL用户和组的最大有效权限

  3. 性能影响:大量ACL条目可能会轻微影响性能

  4. 兼容性:确保需要访问这些文件的所有应用程序都支持ACL

  5. 递归设置:使用-R参数递归设置目录及其内容

通过合理使用ACL,你可以实现比传统Unix权限系统更灵活、更精确的权限管理方案。