CentOS命令:访问控制【getfacl、setfacl】

12/31/2025 运维操作系统Linux

目录


参考:


# CentOS命令:访问控制【getfacl、setfacl】


# 一、ACL 基本概念

  1. 传统权限
    Linux 文件/目录的权限分为 所有者(owner)、所属组(group)和其他用户(others),权限包括读(r)、写(w)和执行(x)。
  2. ACL 权限
    Access Control List(访问控制列表)提供更细粒度的权限控制,允许为 特定用户或组 设置独立权限,突破传统权限的限制。

# 二、getfacl:查看 ACL 权限

用途:显示文件/目录的 ACL 策略及权限。
语法

getfacl [选项] <文件或目录>
1

常用选项

选项 说明
-a 仅显示文件的访问 ACL(默认行为)
-d 仅显示默认 ACL(适用于目录)
-c 不显示注释头(如文件名、所有者等)
-n 显示用户/组的 UID/GID 而非名称
-p 保留路径开头的 /(不自动去除绝对路径前缀)
-t 以表格形式输出
-R 递归显示子目录 ACL

示例

getfacl /data/file.txt
# 输出:
# file: data/file.txt
# owner: root
# group: root
user::rw-
user:alice:r--   # alice 用户有读权限
group::r--
mask::r--
other::r--
1
2
3
4
5
6
7
8
9
10

# 三、setfacl:设置 ACL 权限

用途:设置文件/目录的 ACL 策略,支持精细化权限控制。
语法

setfacl [选项] <权限规则> <文件或目录>
1

常用选项

选项 说明
-m 修改 ACL(添加/更新权限)
-x 删除 ACL 条目
-b 删除所有扩展 ACL 规则(保留基础权限)
-k 删除默认 ACL 规则
-d 设置默认 ACL(影响目录下新建的文件)
-R 递归设置子目录及文件
--mask 自动计算有效权限掩码

权限规则格式

  • 用户u:<用户名>:<权限>(如 u:alice:rwx
  • g:<组名>:<权限>(如 g:dev:r--
  • 其他用户o::<权限>
  • 掩码m::<权限>(限制最大有效权限)

# 四、常用操作示例

  1. 为单个用户添加权限

    setfacl -m u:alice:rwx /data/file.txt
    
    1
  2. 为组添加默认权限(目录下新建文件继承):

    setfacl -d -m g:dev:rwx /data/project/
    
    1
  3. 删除用户的 ACL 条目

    setfacl -x u:alice /data/file.txt
    
    1
  4. 递归设置目录 ACL

    setfacl -R -m g:dev:r-- /data/
    
    1
  5. 拷贝 ACL 权限到其他文件

    getfacl file1.txt | setfacl --set-file=- file2.txt
    
    1
  6. 清除所有扩展 ACL

    setfacl -b /data/file.txt
    
    1

# 五、注意事项

  1. 文件权限中的 + 符号
    当文件/目录存在 ACL 规则时,ls -l 显示的权限末尾会有一个 +(如 -rw-rw-r--+)。

  2. 有效权限掩码(mask)
    ACL 的实际生效权限由 mask 决定。例如,若 maskr--,即使用户被赋予 rwx,实际权限仍为 r--

  3. 默认 ACL 的作用
    目录的默认 ACL 会影响其下新建的文件/目录,但需确保文件系统挂载时启用 acl 选项(如 mount -o acl)。

  4. 备份与恢复 ACL

    getfacl -R /data > acl_backup.txt  # 备份
    setfacl --restore acl_backup.txt    # 恢复
    
    1
    2

# 六、综合场景

场景:市场部目录 /market 需允许市场组(market_team)完全访问,但试用期员工 bob 仅允许读。
步骤

  1. 设置目录默认权限:

    setfacl -d -m g:market_team:rwx /market
    
    1
  2. bob 添加读权限:

    setfacl -m u:bob:r-- /market
    
    1
  3. 验证权限:

    getfacl /market
    
    1

总结getfaclsetfacl 提供灵活的权限管理,适用于需精细化控制用户/组访问的场景。

上次更新时间: 6/5/2025, 9:59:26 AM