在 Linux 里文件权限大家都很熟r / w / x再加上属主、属组、其他用户日常用起来已经够多了。但真正在生产环境里混久了总会遇到几个“看起来怪怪的权限位”——多出来的s、t甚至数字前面多了一个 4、2、1。这就是 Linux 的 三种特殊权限。它们不常用但一旦用上往往都很关键。一、SUID谁执行权限就像谁先说 SUIDSet User ID。正常情况下一个程序是“谁运行就用谁的权限”。那如果一个普通用户想执行一个必须用 root 权限才能完成的操作怎么办这时候就轮到 SUID 出场了。当一个可执行文件设置了 SUID 位后程序在运行时会临时拥有文件属主的身份而不是执行者的身份。最经典的例子就是passwd命令。你有没有想过普通用户为什么能改/etc/shadow明明那个文件只有 root 才能写。答案很简单passwd是 root 拥有的并且设置了 SUID。你运行它时表面上是你在执行实际上程序是“以 root 的身份”在干活。所以 SUID 的核心一句话可以记住“执行者不重要重要的是这个文件是谁的。”当然这个权限也很危险。给错了程序等于给了别人一把“半个 root 的钥匙”。二、SGID不只是文件目录更关键SGIDSet Group ID 和 SUID 很像只不过它管的是“组”。在可执行文件上SGID 表示程序运行时使用文件所属的组权限。但它真正常用的地方其实是 目录。当一个目录设置了 SGID 后会发生一件非常实用的事在这个目录里新建的文件默认继承目录的属组而不是创建者自己的主组。这在多人协作目录里非常重要。否则会出现什么问题A 建的文件组是 A 的B 建的文件组又是 B 的权限一乱协作立刻变成灾难。所以 SGID 更像是在说“进了这个目录就按这里的组规矩来。”三、Sticky Bit能创建不一定能删最后一个是 Sticky Bit也就是常见的t。它几乎只对 目录 有意义用来解决一个非常现实的问题所有人都能写的目录谁来保证文件不会被乱删典型场景就是/tmp目录。所有用户都能往里面写文件但如果没有 Sticky Bit那任何人都可以删除别人的临时文件这显然不现实。开启 Sticky Bit 后规则变成了只有文件的所有者、目录的所有者或者 root才能删除或重命名这个文件。所以 Sticky Bit 的本质不是“限制创建”而是“你可以在这放东西但别动不属于你的。”总结一下这三种特殊权限SUID程序执行时临时获得文件属主的权限SGID文件执行时继承文件属组目录新文件继承目录的属组Sticky Bit目录里谁创建谁负责别人不能乱删如果说普通权限解决的是“你能不能读、写、执行”那这三种特殊权限解决的就是更现实的问题你到底是“以谁的身份”在做事又“能对谁的东西动手”。这也正是它们存在的意义。