粘滞位仅对目录生效且必须配合执行权限(x)——设在文件上无效,目录若无others执行权则显示大写T、功能不生效;推荐用chmod +t设置并验证末位为小写t。

粘滞位只能设在目录上,设在文件上没用
Linux的粘滞位(Sticky Bit)对文件完全不起作用,内核会直接无视它。你要是用chmod +t给普通文件加上粘滞位,ls -l可能会显示T或者t,但文件的行为不会有任何改变——既不能阻止别人删除文件,也不会影响文件的执行。粘滞位只对目录有效,而且必须和执行权限(x)一起使用才会生效。
先确认目录有 others 执行权,否则粘滞位不生效
这是最容易踩的坑:如果目录当前权限是 drwxrwx--- 或 drwxrwxr--(即 others 没有 x),你执行 chmod +t 后,ls -ld 会显示末位是大写 T,表示“粘滞位已设但无效”。用户甚至进不去这个目录,更别说删文件了。
- 检查命令:
ls -ld /path/to/dir,看第三组权限(others)最后一位是不是x - 补执行权:
chmod o+x /path/to/dir(确保 others 可进入) - 再加粘滞位:
chmod +t /path/to/dir,此时应显示小写t(如drwxrwxrwt)
两种设置方式:符号法 vs 八进制法
chmod +t 最安全,只加粘滞位,不动已有权限;四位八进制(如 1755)适合一次性定死权限,但容易配错。
chmod +t /shared:推荐日常使用,不破坏原有读写权限chmod 1755 /shared:等价于chmod o+x,g+rx,u+rwx /shared && chmod +t /shared,注意首位1是粘滞位,后三位是常规权限- 别用
chmod 1770或1760:others 没x,进不去目录,粘滞位白设 - 避免
chmod -R +t:递归设粘滞位对子目录有效,但对文件无效,且可能覆盖不该动的权限
设了粘滞位,不代表万事大吉
粘滞位只管“删”和“重命名”,不管“读”“写”“执行”。它不阻止别人修改你的文件内容(只要文件本身权限允许),也不阻止他们往目录里塞恶意脚本——它只是把删除权锁死在文件所有者手里。
- 协作目录建议搭配
chmod g+s(setgid):让新文件自动继承目录属组,再配合组写权限(如2775) - /tmp 类场景用
1777合理,但 Web 上传目录(如/var/www/uploads)慎用:PHP 进程以www-data身份运行,运维手动清理时会被粘滞位拦住 - 挂载选项如
noexec不影响粘滞位,但某些容器环境或旧内核可能不识别,务必用ls -ld实测