粘滞位在/tmp目录中解决“多用户可写但不能互删”的矛盾,仅允许文件所有者、目录所有者或root删除/重命名文件;生效时权限末位显示小写t,如drwxrwxrwt。

粘滞位在 /tmp 目录中的作用,本质是解决“多用户可写但不能互删”的权限矛盾——它不干涉读、写、执行文件内容的自由,只卡住删除和重命名这一道关键操作。
为什么普通目录做不到这点
Linux 删除文件的动作,实际由**父目录的写权限**控制,而不是看目标文件本身的权限。也就是说,只要用户对 /tmp 有写权限(比如权限是 777),默认就能删掉里面任何文件,哪怕那是别人创建的。这显然不适合公共临时区。
粘滞位怎么改变这个规则
一旦给目录加上粘滞位,系统就额外加了一层校验:
- 用户想删或重命名某个文件时,除了要有目录的写权限,还必须满足以下任一条件:
- 是那个文件的拥有者
- 是该目录的拥有者(如
/tmp的 owner 是root) - 拥有 root 权限
这就让 /tmp 实现了“谁建谁管”:userA 创建 log1.txt,userB 可以读、可以往里写(如果文件本身有 w 权限),但删不了、移不走——除非 userB 是 root 或者 /tmp 的 owner。
如何确认它真的在起作用
运行命令:ls -ld /tmp
看到输出类似:drwxrwxrwt 10 root root 4096 Sep 24 13:45 /tmp
注意末尾那个 t:它代表粘滞位已启用,且其他用户(others)同时具备执行权限(x)。如果显示的是大写 T,说明缺少执行权,粘滞位实际未生效——因为进入目录、列出内容都需要 x 权限,没有它,t 就没意义。
它不防什么,你得心里有数
粘滞位只管“删和改名”,不管“改内容”:
- 如果 userA 创建的文件权限是
666(即所有用户可写),userB 依然能用echo "hi" >> file往里追加内容 - 它也不影响新建文件的属主和属组——所以团队共享时,常配合 SGID 使用,让新文件自动继承目录所属组


















