每天 Shaarli

一天内的所有链接,汇聚在一个页面上。

February 10, 2026

Note: ACL 权限小抄

ACL 权限小抄(长期维护版)

一句总纲(先记住这句)
👉 “能不能删 / 改名,看父目录;能不能进 / 写,看当前目录;ACL 是系统级,FTP/SMB 都吃它。”

一、最常见权限语义速查

1️⃣ 只读目录(能看、能进,不能改)

setfacl -m u:linshi:rx DIR

适用:

  • 部门根目录
  • 不允许结构变化的层级

2️⃣ 完全可操作目录(上传 / 删除 / 改名 / 建目录)

setfacl -m u:linshi:rwx DIR
setfacl -m m:rwx DIR

3️⃣ 管理员(xxh)全权

setfacl -m u:xxh:rwx DIR
setfacl -m m:rwx DIR

4️⃣ 只允许在目录里“操作内容”,但不能删目录本身

核心思想:

  • 父目录:rx
  • 子目录:rwx
# 父目录
setfacl -m u:linshi:rx PARENT

# 子目录
setfacl -m u:linshi:rwx CHILD
setfacl -m m:rwx CHILD

二、默认 ACL(新文件/目录自动继承)

5️⃣ 以后新文件也要有同样权限(非常重要)

setfacl -d -m u:linshi:rwx DIR
setfacl -d -m u:xxh:rwx DIR
setfacl -d -m m:rwx DIR

记忆点
-d = 将来

三、递归修复已有文件(常用)

6️⃣ 让“已经存在的文件/目录”立刻生效

setfacl -R -m u:linshi:rwx DIR
setfacl -R -m u:xxh:rwx DIR

四、for 循环批量改目录(你最爱用的)

7️⃣ 一组目录统一赋权(强烈推荐)

for d in 010_* 020_* 030_*; do
  setfacl -m u:linshi:rwx "$d"
  setfacl -m u:xxh:rwx "$d"
  setfacl -m m:rwx "$d"
  setfacl -d -m u:linshi:rwx "$d"
  setfacl -d -m u:xxh:rwx "$d"
  setfacl -d -m m:rwx "$d"
done

8️⃣ 针对“目录下一层”批量操作(你用过的)

for d in /ftp-data/worker-data/090_首审部/*; do
  setfacl -m u:linshi:rwx "$d"
  setfacl -m m:rwx "$d"
  setfacl -d -m u:linshi:rwx "$d"
  setfacl -d -m m:rwx "$d"
done

五、查看 & 排错必备命令

9️⃣ 看 ACL(一定要会)

getfacl DIR

🔟 判断“最终权限”(不看规则,看结果)

sudo -u linshi test -w DIR && echo 可写 || echo 不可写
sudo -u linshi test -x DIR && echo 可进 || echo 进不去

11️⃣ ACL 的“总闸门”(mask)

ACL 明明写了 rwx 但还是不行 → 99% 是 mask

setfacl -m m:rwx DIR

六、你这套环境的“固定规则模板”

📁 /ftp-data/worker-data 顶层

setfacl -m u:linshi:rx /ftp-data/worker-data
setfacl -m u:xxh:rwx /ftp-data/worker-data
setfacl -m m:rwx /ftp-data/worker-data

📁 普通部门目录(010~080、110 等)

setfacl -m u:linshi:rwx DIR
setfacl -m u:xxh:rwx DIR
setfacl -m m:rwx DIR
setfacl -d -m u:linshi:rwx DIR
setfacl -d -m u:xxh:rwx DIR
setfacl -d -m m:rwx DIR

📁 结构锁定目录(090、100)

# 本层
setfacl -m u:linshi:rx DIR

# 子层
for d in DIR/*; do
  setfacl -m u:linshi:rwx "$d"
  setfacl -m m:rwx "$d"
done

七、永远记住的三条“铁律”

1️⃣ 删文件 ≠ 文件权限,看的是父目录
2️⃣ FTP / SMB / shell 全都吃 ACL(系统级)
3️⃣ 能写但删不了,先查:mask / 父目录 / 客户端安全删除

八、你可以直接存成文件

建议你存一份:

vi /root/ACL_运维小抄.txt

把这整份贴进去,未来维护直接照抄。