别再 chmod 777 了,用 ACL 给它开一扇窗

背景 需要一个专用备份用户 backup_reader,能读到 /home/user/backups/ 目录下的文件。

目录是 /home/user/backups/,但 /home/user 的权限是 drwxr-x---(只有 user 和 user 组能进)。backup_reader 进不去,读不到里面的文件。

原因 Linux 权限系统只有三类人:owner、group、other。想给"一个特定的其他用户"开放权限,标准权限模型做不到,只能用这两种粗暴方案:

方案 命令 问题
方案一:放开 other 权限 chmod o+x /home/user 所有人都能穿过,太开放
方案二:加入 user 组 usermod -aG user backup_reader 加入 user 组,能看整个家目录

都不够精确。我们需要的是:只给 backup_reader 一个人开放这一条路径。

解决:ACL ACL(Access Control List)是 Linux 的"更细粒度权限贴纸"。

bash 复制代码
# 1. 装工具
sudo apt install -y acl

# 2. 给 backup_reader 开一扇窗
sudo setfacl -m u:backup_reader:x /home/user

# 3. 看效果
getfacl /home/user

验证效果

sql 复制代码
# file: home/user
# owner: user
# group: user
user::rwx
user:backup_reader:--x       ← 关键
group::r-x
other::---

解读:

user::rwx --- user 本人,读写执行

user:backup_reader:--x --- 只给 x(穿过),不给 r(列目录)

other::--- --- 其他用户,无权限

验证:

bash 复制代码
# backup_reader 能直接读已知文件
sudo -u backup_reader cat /home/user/backups/foo.tar.gz | head -c 10
# → OK

# backup_reader 不能列目录
sudo -u backup_reader ls /home/user/
# → Permission denied  ← 这才是我们想要的

三个坑 坑 1:setfacl 默认没装

Ubuntu 最小化安装没带 acl 包,直接跑 setfacl 会报:

bash 复制代码
sudo: 'setfacl': command not found

先 apt install acl,一条命令的事,但不知道就会卡住。

坑 2:ACL 不覆盖 chmod

如果之后执行 chmod 700 /home/user,可能会覆盖掉 ACL。改完权限用 getfacl 复查。

坑 3:x 和 r 要分清

所以 backup_reader 只需要 x 就能 cat /home/user/backups/foo.tar.gz,不需要 r 去列 /home/user/。 很多人以为要读文件必须先"能列目录",其实不是:

权限 含义
r 列目录,能看到里面所有文件名
x 穿过目录,能按已知名字访问里面的文件
只要 x,就能做到"知道名字就能取,不知道就逛不了"。这正是备份场景想要的------脚本按固定文件名取,不需要列目录。
相关推荐
仿生joe会梦见漫天的大雪吗1 小时前
CTF Misc 工具选型指南:按题型分类的工具、原理与限制
后端·安全
南丘山1 小时前
一个 VARCHAR(1) 的字段,卡住了整条 DTU 数据链路
后端
南丘山1 小时前
多租户隔离失效,我踩过的 3 个坑
后端
IT_陈寒1 小时前
Java缓存踩坑记:明明设置了过期时间,怎么还是读到脏数据?
前端·人工智能·后端
用户8662978480081 小时前
数据库报错"坏块"别急着删库重来,试试 KingbaseES 的离线修复工具
后端
jose1 小时前
URL 里多写了一个端口,为什么请求还能调通?
java·后端
特立独行的猫a1 小时前
仓颉语言UI开发实战:我用仓颉写了个桌面版力扣
算法·leetcode·ui·tauri·仓颉·cj-tarui
用户8356290780511 小时前
使用 Python 在 Excel 中识别并高亮重复数据与唯一数据
后端·python
CCblandy1 小时前
Agent 工具调用怎么编排?本机实测:并行只到 2.63 倍,慢的先发省 30ms,CPU 活加 worker 无效
人工智能·后端·python·性能优化