chmod 755不管用是因为删除文件取决于父目录写权限而非文件自身权限;需设粘滞位(chmod +t)限制删除,或配合acl、chattr等机制实现细粒度防护。

为什么 chmod 755 不管用
很多人试过 chmod 755 或 chmod 555 目录,发现普通用户仍能删里面文件——因为「删除文件」实际取决于**父目录的写权限**,而非文件自身权限。只要用户对目录有 w 权限,就能 rm 该目录下任意文件(哪怕文件属主是别人、权限是 000)。所以光改文件权限没用,必须锁住父目录的「删除能力」。
粘滞位(sticky bit)是核心机制
Linux 用粘滞位(t)限制目录内文件的删除行为:启用后,只有文件所有者、目录所有者或 root 才能删除或重命名该目录下的文件。这是实现「可读不可删」最标准、最轻量的方式。
- 设置方式:
chmod +t /path/to/dir(等价于chmod 1755) - 验证是否生效:
ls -ld /path/to/dir→ 最后一位显示为t(如drwxr-xr-t),不是T(大写表示执行位缺失) - 注意:粘滞位只对目录有效,对文件设
+t没实际意义 - 常见误操作:设了
+t但忘了给其他用户r和x权限,导致他们连ls都看不到内容
ACL 可以补足细粒度控制
如果粘滞位不够用(比如要禁止某几个用户读,却允许其他人读),就得上 POSIX ACL。它不依赖用户/组归属,直接按需授权。
- 先确保文件系统挂载时启用了
acl选项(mount | grep acl查看;若无,需在/etc/fstab中对应行加acl并mount -o remount) - 禁止用户
alice删除,但允许她读:setfacl -m u:alice:r-x /path/to/dir - 禁止整个组
guests写目录:setfacl -m g:guests:rx /path/to/dir - 关键点:ACL 的
write权限(w)对目录而言包含「创建/删除/重命名」,所以只要不给w,就天然防删
chattr +a 或 +i 是硬性兜底手段
当需要更强防护(比如防止 root 误删),就得用文件系统级属性。但注意:这些是「全有或全无」策略,不适合共享目录日常管理。
-
chattr +a /path/to/dir:只允许追加(echo >>、cat >>),不能rm、mv、cp出去,也不能覆盖写(>会失败) -
chattr +i /path/to/dir:彻底锁定,连 root 都不能删、改、重命名——除非先chattr -i,适合静态归档目录 - 风险提示:
+i一旦设错,服务可能无法写日志或生成临时文件;+a对 Samba 共享可能不兼容(部分客户端不识别)
chmod 444 filename)或 chattr +a —— 这些细节常被忽略,但恰恰决定策略是否真正落地。











