Linux特殊权限是嵌入传统权限的三个独立位:SUID(千位4)、SGID(百位2)、Sticky Bit(十位1),分别控制程序以所有者身份运行、目录下文件继承属组、仅文件所有者可删除文件。

Linux 的特殊权限不是“额外开关”,而是嵌入在传统权限结构里的三个独立位:SUID 对应千位(4),SGID 对应百位(2),Sticky Bit 对应十位(1)。它们不替代 rwx,而是叠加或改写执行位的显示方式,作用明确、互不干扰。
SUID:让程序临时以文件所有者身份运行
当一个可执行文件设置了 SUID 位,任何用户运行它时,进程的有效 UID 就变成该文件所有者的 UID。这是普通用户能修改 /etc/shadow 的根本原因——/usr/bin/passwd 属于 root,带 SUID,所以执行时等效于 root 在操作。
- 权限显示为 rwsr-xr-x(小写 s 表示同时有 x 权限)或 rwSr--r--(大写 S 表示无 x,SUID 无效)
- 设置方式:
chmod u+s /usr/bin/passwd或chmod 4755 /usr/bin/passwd - 取消方式:
chmod u-s filename或chmod 0755 filename - 风险提示:非必要不设 SUID;给 vim、bash 等通用工具加 SUID 可能被用于提权
SGID:对文件和目录作用不同
SGID 的行为取决于目标类型:
- 对可执行文件:进程有效 GID 变为文件所属组(类似 SUID 的组级版本,但实际极少使用)
- 对目录:这才是 SGID 最常用场景——该目录下新建的文件和子目录,自动继承目录的属组,而非创建者默认组。团队协作共享目录依赖这个特性
- 权限显示为 rwxr-sr-x(小写 s)或 rwxr-Sr-x(大写 S)
- 设置方式:
chmod g+s /shared或chmod 2775 /shared - 注意:若目录已设 SGID 但属组未正确配置(如未用
chown :dev /shared),新文件仍不会继承预期组
Sticky Bit:只管“谁可以删文件”,不管读写
Sticky Bit 仅对目录有意义,它的唯一作用是限制删除和重命名操作:即使你对目录有 w 权限,也**只能删除自己拥有(own)的文件**。它不控制创建、读取或修改,也不影响文件权限本身。
- 典型位置:/tmp,权限通常是
drwxrwxrwt(末尾 t 表示 Sticky Bit 已启用) - 设置方式:
chmod +t /tmp或chmod 1777 /tmp - 取消方式:
chmod -t /tmp或chmod 0777 /tmp - 常见误区:Sticky Bit 不防病毒、不加密、不阻止覆盖内容;它只是加了一道“删除门槛”
这三个位本质是权限数字的高三位,不是魔法开关。理解它们各自生效的条件和边界,比死记命令更重要。滥用或误配反而会削弱安全,比如在非共享目录设 SGID,或给脚本加 SUID 却没做输入校验。


















