CentOS命令:访问控制【getfacl、setfacl】
accttodo 12/31/2025 运维操作系统Linux
目录
参考:
# CentOS命令:访问控制【getfacl、setfacl】
# 一、ACL 基本概念
- 传统权限:
Linux 文件/目录的权限分为 所有者(owner)、所属组(group)和其他用户(others),权限包括读(r
)、写(w
)和执行(x
)。 - 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
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::<权限>
(限制最大有效权限)
# 四、常用操作示例
为单个用户添加权限:
setfacl -m u:alice:rwx /data/file.txt
1为组添加默认权限(目录下新建文件继承):
setfacl -d -m g:dev:rwx /data/project/
1删除用户的 ACL 条目:
setfacl -x u:alice /data/file.txt
1递归设置目录 ACL:
setfacl -R -m g:dev:r-- /data/
1拷贝 ACL 权限到其他文件:
getfacl file1.txt | setfacl --set-file=- file2.txt
1清除所有扩展 ACL:
setfacl -b /data/file.txt
1
# 五、注意事项
文件权限中的
+
符号:
当文件/目录存在 ACL 规则时,ls -l
显示的权限末尾会有一个+
(如-rw-rw-r--+
)。有效权限掩码(mask):
ACL 的实际生效权限由mask
决定。例如,若mask
为r--
,即使用户被赋予rwx
,实际权限仍为r--
。默认 ACL 的作用:
目录的默认 ACL 会影响其下新建的文件/目录,但需确保文件系统挂载时启用acl
选项(如mount -o acl
)。备份与恢复 ACL:
getfacl -R /data > acl_backup.txt # 备份 setfacl --restore acl_backup.txt # 恢复
1
2
# 六、综合场景
场景:市场部目录 /market
需允许市场组(market_team
)完全访问,但试用期员工 bob
仅允许读。
步骤:
设置目录默认权限:
setfacl -d -m g:market_team:rwx /market
1为
bob
添加读权限:setfacl -m u:bob:r-- /market
1验证权限:
getfacl /market
1
总结:getfacl
和 setfacl
提供灵活的权限管理,适用于需精细化控制用户/组访问的场景。