限制特定用户在指定目录的写权限,关键不是“删掉权限”,而是“精准收窄”——用标准权限打底,再靠ACL补漏;先确认目录属主与权限是否合理,若用户本就是属主且含w位,才需用setfacl -m u:username:rx禁写,并可递归(-R)和设默认ACL(-d)确保新文件继承,最后用getfacl验证。

限制特定用户在指定目录的写权限,关键不是“删掉权限”,而是“精准收窄”——用标准权限打底,再靠 ACL 补漏,避免误伤系统稳定性。
先确认基础权限是否合理
Linux 默认已对非主目录做了写权限隔离:普通用户对 /、/home、他人家目录等只有 r-x(读+执行),天然不能写。所以真正要干预的,往往是用户本应有写权但需临时收回的路径,比如自己的家目录下某子目录。
- 检查目标目录当前权限:
ls -ld /path/to/dir - 若该目录属主是用户自己,且权限含
w(如drwxr-xr-x),那用户默认就能写 —— 这时才需要 ACL 干预 - 不建议直接改
/或/home的chmod,可能影响系统服务或其它用户
用 setfacl 精确禁写(推荐方式)
ACL 是最安全、可逆、不影响其他用户的手段。它允许你为单个用户设置独立于传统 rwx 的权限,包括彻底禁止写入。
- 禁止用户
alice在/home/bob/project写入:sudo setfacl -m u:alice:rx /home/bob/project - 若要递归应用到所有现有子文件/子目录:
sudo setfacl -R -m u:alice:rx /home/bob/project - 同时设默认 ACL(让新创建的文件也继承该限制):
sudo setfacl -d -m u:alice:rx /home/bob/project - 验证效果:
getfacl /home/bob/project,确认输出中含user:alice:r-x
配合默认 shell 限制交互式越权
即使目录写权限被 ACL 锁死,用户仍可能通过脚本、cron 或其他程序间接写入。更稳妥的做法是切断其交互入口。
- 禁止 SSH 登录但保留 cron 和文件归属:
sudo usermod -s /sbin/nologin alice - 若需支持 rsync/scp 等非交互操作,可用
/bin/false替代 - 恢复登录只需:
sudo usermod -s /bin/bash alice,无需重设密码
慎用 chroot 或 SELinux(按需选)
chroot 适合完全隔离环境(如 FTP 用户),但维护成本高;SELinux 更强但配置复杂,一般用于合规场景。
- chroot 不是权限控制,而是路径虚拟化,需复制完整运行环境,易出错
- SELinux 适合全局策略,例如禁止某用户域访问任何
etc_t类型文件,但日常运维中 ACL + shell 控制已覆盖 95% 场景


















