在CentOS系统中,setfacl和getfacl是管理文件系统访问控制列表(ACL)的核心命令,提供比传统权限模型(用户/组/其他)更精细的权限控制。以下是详细解析及操作指南:
⚙️ 一、ACL与传统权限模型的区别
| 特性 | 传统权限模型 | ACL权限模型 |
|---|---|---|
| 控制粒度 | 仅所有者、组、其他三类 | 可为多个用户/组独立设置权限 |
| 灵活性 | 无法为特定用户单独授权 | 支持为不同用户/组分配差异化权限(如userA:rw-) |
| 继承机制 | 无目录权限继承 | 支持默认ACL,子文件/目录自动继承权限 |
| 权限优先级 | 组权限统一生效 | ACL权限高于传统权限,且可通过mask限制 |
| 适用场景 | 简单权限控制 | 共享目录、多团队协作等复杂场景 |
💡 ACL核心概念:
- Access ACL:直接作用于文件/目录的权限规则。
- Default ACL:仅适用于目录,新创建的子项自动继承其规则。
🔧 二、setfacl命令详解:设置ACL权限
基本语法
setfacl [选项] 规则 文件/目录
常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-m |
添加/修改ACL规则 | setfacl -m u:alice:rwx file.txt |
-x |
删除指定ACL规则 | setfacl -x u:alice file.txt |
-b |
清除所有扩展ACL,恢复传统权限 | setfacl -b dir/ |
-d |
设置默认ACL(仅目录有效) | setfacl -d -m g:dev:r-x project/ |
-R |
递归操作目录及子内容 | setfacl -R -m u:bob:rw logs/ |
-k |
删除目录的默认ACL | setfacl -k project/ |
关键操作示例
-
为用户/组添加权限
# 用户alice对file.txt拥有读写权限 setfacl -m u:alice:rw- file.txt # 组dev对目录project拥有读和执行权限 setfacl -m g:dev:r-x project/✅ 执行后文件权限末尾显示
+(如-rw-rw-r--+),表示已启用ACL。 -
设置目录默认ACL(自动继承)
# 新文件自动继承:用户alice拥有rwx权限 setfacl -d -m u:alice:rwx shared_dir/继承验证:在
shared_dir/下创建新文件,getfacl查看其自动包含user:alice:rwx。 -
递归设置目录权限
# 目录data/及其子内容均允许组backup读取 setfacl -R -m g:backup:r-- data/ -
删除权限
# 删除用户alice的ACL条目 setfacl -x u:alice file.txt # 清除目录所有ACL规则 setfacl -b project/
🔍 三、getfacl命令详解:查看ACL权限
基本语法
getfacl [选项] 文件/目录
常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-c |
省略注释头(所有者/组信息) | getfacl -c file.txt |
-d |
仅显示默认ACL(针对目录) | getfacl -d project/ |
-R |
递归列出子目录ACL | getfacl -R data/ |
-n |
显示数字UID/GID(避免解析用户名) | getfacl -n /etc/shadow |
输出解析示例
$ getfacl file.txt
# file: file.txt # 文件名
# owner: root # 所有者
# group: staff # 所属组
user::rw- # 所有者权限
user:alice:rw- # 用户alice的ACL权限
group::r-- # 所属组权限
mask::rw- # 有效权限掩码
other::r-- # 其他用户权限
⚠️
mask的作用:限制所有ACL用户/组的最大权限(如mask::r--时,即使alice有rw-,实际仅r--生效)。
⚖️ 四、ACL权限的优先级与掩码机制
-
权限生效顺序:
ACL_USER>ACL_GROUP> 传统组权限 >ACL_OTHER。 -
掩码(
mask):- 自动创建:当添加首个
ACL_USER或ACL_GROUP条目时生成。 - 动态限制:所有非所有者的ACL用户/组权限均受
mask约束。# 设置mask为r--,限制alice的实际权限 setfacl -m mask::r-- file.txt getfacl file.txt # 输出:user:alice:rw- #effective:r--
- 自动创建:当添加首个
🔄 五、最佳实践与注意事项
-
文件系统支持
ACL需文件系统支持(如ext4/xfs),且挂载时启用acl选项:# 检查是否支持 mount | grep acl # 若无输出,编辑/etc/fstab添加挂载选项:defaults,acl -
权限冲突处理
- ACL规则优先级高于传统权限。
- 用户权限累加:若用户同时属于多个授权组,取权限并集。
-
备份与恢复ACL
# 备份ACL规则 getfacl -R /data > acl_backup.txt # 从备份恢复 setfacl --restore acl_backup.txt -
避免递归权限泛滥
慎用-R,尤其对大型目录。可先测试:# 测试模式(不实际修改) setfacl -R --test -m u:user:rw /large_dir
💎 总结
-
setfacl:通过细粒度规则扩展权限控制,突破传统模型的用户/组数量限制。 -
getfacl:透视复杂权限结构的核心工具,尤其需关注mask和effective权限。 -
适用场景:共享目录(如团队项目)、日志目录(多服务写入)、需继承权限的层级结构。
执行前建议用
getfacl验证现有权限,避免冲突。完整选项可通过man setfacl或man getfacl查看。
浙公网安备 33010602011771号