4. 设置用户ACL:增、改、删,三板斧
好,咱们进入实操环节。前面讲了ACL是个什么东西,现在该动手了。这一章我带你过一遍用户ACL的增、改、删操作。说白了,就是怎么给一个用户开权限、改权限、收权限。
我个人习惯把这三步叫做「三板斧」。你把这几个命令练熟了,日常工作中80%的ACL场景都能搞定。
4.1 给用户添加ACL权限
先看添加。命令是 setfacl -m,-m 就是 modify 的意思。虽然叫modify,但第一次用的时候就是添加。
基本语法长这样:
setfacl -m u:用户名:权限 文件或目录
权限部分和普通Linux权限一样,用 rwx 表示。举个例子:
# 给用户 zhangsan 添加对 report.txt 的读写权限
setfacl -m u:zhangsan:rw report.txt
# 查看效果
getfacl report.txt
输出大概是这样:
# file: report.txt
# owner: root
# group: root
user::rw-
user:zhangsan:rw-
group::r--
mask::rw-
other::r--
看到没?多了一行 user:zhangsan:rw-。这就是ACL的威力——zhangsan 这个用户,既不是文件所有者,也不在文件所属组里,但照样能读写这个文件。
getfacl 看一眼。确认无误再走下一步,避免手滑写错权限。
给目录添加ACL也类似:
setfacl -m u:zhangsan:rx /data/project
不过这里有个坑。你给目录加了ACL,目录里已有的文件并不会自动继承。想让新文件也继承?得加 -d 参数,这个后面章节会细讲。
4.2 修改用户ACL权限
修改和添加用的是同一个命令——setfacl -m。你没看错,就是同一个。系统会判断:如果这个用户还没有ACL条目,就新建;如果已经有了,就覆盖。
举个例子:
# zhangsan 原来只有 rw 权限,现在改成 rwx
setfacl -m u:zhangsan:rwx report.txt
再看一下:
getfacl report.txt
# file: report.txt
# owner: root
# group: root
user::rw-
user:zhangsan:rwx
group::r--
mask::rwx
other::r--
注意看,mask 也自动变成了 rwx。这个 mask 是什么?我简单解释一下——它是ACL的「上限阀门」。你给用户设了 rwx,但如果 mask 只有 r--,那用户实际能拿到的只有 r--。
rwx 权限,但他还是写不了文件。查了半天,发现是 mask 被卡住了。所以修改权限后,记得看一眼 mask 有没有跟着变。
修改权限时,我建议你遵循「最小权限原则」。给够用的就行,别一上来就 rwx。比如用户只需要读,就给 r--;需要读和写,就给 rw-。权限给大了,安全风险就上来了。
4.3 删除用户ACL权限
删除分两种:删单个用户的ACL,或者删整个文件的ACL。
4.3.1 删除指定用户的ACL
用 setfacl -x,-x 就是 remove 的意思。
# 删除 zhangsan 的 ACL 条目
setfacl -x u:zhangsan report.txt
执行完再看:
getfacl report.txt
# file: report.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
zhangsan 那行没了。干净利落。
4.3.2 删除所有ACL条目
有时候你想把整个文件的ACL全部清掉,恢复到传统权限模式。用 -b 参数:
setfacl -b report.txt
这个 -b 是「全部移除」的意思。执行后,所有ACL条目都会被删除,只保留传统的 owner/group/other 权限。
setfacl -b 是「核弹级」操作。执行前一定确认清楚,是不是真的要把所有ACL都清掉。我见过有人手快,把整个项目目录的ACL全清了,结果一堆人访问不了,线上事故。
4.4 核心逻辑图:ACL增删改流程
下面这张图帮你理清整个流程。从判断用户是否存在,到执行命令,再到验证结果,一步不落。
4.5 常用命令速查表
我把这一章的命令整理成了一张表。你把它存下来,用的时候直接查。
| 操作 | 命令 | 示例 | 说明 |
|---|---|---|---|
| 添加/修改用户ACL | setfacl -m u:用户名:权限 文件 |
setfacl -m u:zhangsan:rwx file |
用户不存在则添加,存在则覆盖 |
| 删除指定用户ACL | setfacl -x u:用户名 文件 |
setfacl -x u:zhangsan file |
只删除该用户的ACL条目 |
| 删除所有ACL | setfacl -b 文件 |
setfacl -b file |
清空所有ACL,恢复传统权限 |
| 查看ACL | getfacl 文件 |
getfacl file |
查看当前所有ACL条目 |
4.6 避坑总结
最后,我把这一章容易踩的坑列出来。你记住这几个,能省不少排查时间。
- mask 会限制权限:你给用户设了
rwx,但 mask 只有r--,用户实际只能读。修改后记得用getfacl确认 mask。 - 目录ACL不自动继承:给目录加ACL,已有文件不受影响。想让新文件继承,需要加
-d参数。 - 删除操作不可逆:
setfacl -b清掉所有ACL后,没法一键恢复。操作前最好备份一下getfacl的输出。 - 权限别给太大:能用
r--就别给rwx。权限越大,风险越大。