别再 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,就能做到"知道名字就能取,不知道就逛不了"。这正是备份场景想要的------脚本按固定文件名取,不需要列目录。
相关推荐
Decay__2 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
深蓝AI3 小时前
JWT 不是登录方案:三种登录态架构怎么选
后端
starzy19903 小时前
深入理解Scala Map:从实现原理到工程实践
开发语言·后端·scala
卷无止境4 小时前
凌晨三点的绿灯
后端
excel4 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端
其实防守也摸鱼6 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
风若飞6 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Nuanyt7 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
天远API7 小时前
零信任架构实战:基于天远运营商三要素详版V即时版构建自动化消费电子大促电商平台高价值权益秒杀与优惠券防羊毛高并发实名核验网关
运维·人工智能·架构·自动化