插件窝 干货文章 深入了解Linux ACL:掌握访问控制列表的使用

深入了解Linux ACL:掌握访问控制列表的使用

ACL 权限 setfacl 设置 544    来源:    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: test.txt
# owner: user1
# group: group1
user::rw-
user:user2:r--
group::r--
mask::r--
other::r--

2. 设置ACL权限

setfacl -m u:用户名:权限 文件名
setfacl -m g:组名:权限 文件名

常用选项: - -m:修改ACL - -x:删除ACL条目 - -b:删除所有ACL条目 - -d:设置默认ACL(对新创建的文件有效) - -R:递归操作

3. 示例操作

# 为用户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

ACL权限掩码(mask)

mask定义了ACL条目中用户和组可以拥有的最大权限。当设置mask后,所有用户和组的有效权限都不会超过mask。

# 设置mask为读执行
setfacl -m m:rx file.txt

递归设置ACL

# 递归设置目录及其内容的ACL
setfacl -R -m u:user2:rwx /path/to/directory

默认ACL

默认ACL只对目录有效,它决定了在该目录下新创建的文件和目录将继承哪些ACL条目。

# 设置默认ACL
setfacl -d -m u:user2:rwx /path/to/directory

备份和恢复ACL

# 备份ACL
getfacl -R /path/to/dir > acl_backup.txt

# 恢复ACL
setfacl --restore=acl_backup.txt

实际应用场景

  1. 共享目录管理

    # 创建共享目录
    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
    
  2. Web服务器权限管理

    # 允许Apache用户访问特定文件
    setfacl -m u:www-data:r-x /var/www/html/secure_files
    
  3. 开发团队协作

    # 允许开发组完全访问,测试组只读访问
    setfacl -m g:dev:rwx,g:qa:r-x /project
    

注意事项

  1. 使用ls -l查看文件时,如果设置了ACL,权限列末尾会显示+号:

    -rw-rw-r--+ 1 user1 group1 0 Jan 1 10:00 file.txt
    
  2. 当复制或移动文件时:

    • cp命令会尝试保留ACL(取决于选项和文件系统)
    • mv命令会保留ACL,因为inode不变
    • 使用--preserve=all选项可以更好地保留ACL
  3. ACL可能会影响系统性能,特别是在包含大量文件的目录上使用递归ACL时。

  4. 某些备份工具可能不会保留ACL信息,请确保你的备份方案支持ACL。

通过掌握ACL,你可以实现比传统Unix权限系统更灵活、更精确的访问控制,特别适用于需要复杂权限管理的多用户环境。