人人都会AI编程

特殊权限:SUID、SGID、Sticky Bit 原理与场景

更新时间:2026-07-12

在 Linux 的基本权限模型中,每个文件或目录都有读(r)、写(w)、执行(x)三组权限,分别对应属主、属组和其他用户。但在某些情况下,这种权限不足以满足安全性和协作需求,于是系统引入了三种特殊权限位:SUID(Set User ID)SGID(Set Group ID)Sticky Bit。它们虽然只在执行或目录场景下生效,但在日常运维和理解系统安全中极为重要。

一、SUID(Set User ID)

原理:当可执行文件设置了 SUID 位后,任何用户执行该文件时,进程将会获得该文件属主的权限,而不是执行者本人的权限。换句话说,程序“临时借用”了文件所有者的身份来运行。

表示方式:使用 ls -l 查看时,属主执行位原先的 x 会被替换为 s;如果属主本身没有执行权限,则显示为大写 S(表示 SUID 位已设置但无执行权,这种组合几乎没有实际用途)。

典型场景

  • passwd 命令:普通用户修改自己的密码时需要改写 /etc/shadow 文件,而该文件只有 root 有写权限。passwd 程序属于 root 且设置了 SUID 位,所以用户执行 passwd 时临时获得 root 权限,得以完成密码更新,随后退出恢复正常身份。
  • sudo 命令sudo 同样属于 root 且开启 SUID,普通用户通过它执行特权命令时,实际是以 root 身份运行相关程序。

设置命令

chmod u+s /path/to/file      # 符号模式
chmod 4755 /path/to/file     # 数字模式(4 表示 SUID 位)

安全要点:SUID 程序必须编写得极度谨慎,任何漏洞都可能被利用来提权。系统管理员应定期检查系统中不必要或可疑的 SUID 文件:

find / -perm -4000 -type f 2>/dev/null

二、SGID(Set Group ID)

SGID 对文件目录的行为有所不同。

1. 文件上的 SGID
原理:与 SUID 类似,只是借用的身份变为文件的属组。当用户执行设置了 SGID 位的文件时,进程的有效组 ID 会被设置为文件的属组,从而可以访问该组才有权限的资源。

表示方式:属组执行位显示为 s,若无执行权限则为 S

典型场景:较少见,一些系统工具如 wall(发广播消息)、write 等可能使用 SGID 来访问 tty 设备组。不过,现代系统中 SGID 在文件上的用途已大大减少。

设置命令

chmod g+s /path/to/file       # 符号模式
chmod 2755 /path/to/file      # 数字模式(2 表示 SGID 位)

2. 目录上的 SGID(更常用)
原理:当目录设置了 SGID 位后,任何用户在该目录下新创建的文件或子目录,其属组会自动继承目录的属组,而不是创建者的默认属组。这使得团队协作共享目录变得极其方便,无需每个人手动修改所属组。

典型场景

  • 项目共享目录 /shared/project,属组为 dev-team,并设置 SGID 位。团队成员(即使默认组不是 dev-team)在该目录下新建的任何文件都会自动归属于 dev-team 组,从而组成员之间可以互相读写(配合组权限 rw)而不必每次调整权限。

设置命令

chmod g+s /path/to/dir
chmod 2770 /path/to/dir       # 数字模式,同时设置目录属组和权限

验证效果:目录权限会显示为 drwxrws---,注意属组执行位为 s

三、Sticky Bit(粘滞位)

原理:Sticky Bit 只作用于目录。当目录设置了粘滞位后,即使该目录对所有用户都开放了写权限(如 /tmp),那么目录下的文件也只允许文件所有者目录所有者root 进行删除或重命名操作。它阻止了用户之间随意删除彼此的文件,而又保持了共享目录的写入自由。

表示方式:权限字符串的其他用户(other)执行位显示为 t(如果原本有 x),否则显示为 T

典型场景

  • /tmp/var/tmp:这两个目录是系统中典型的公共临时目录,权限通常为 drwxrwxrwt(1777)。所有用户都能在里面创建临时文件,但无法删除别人的文件,保障了多用户环境下的安全性和公平使用。

设置命令

chmod +t /path/to/dir          # 添加粘滞位
chmod 1777 /path/to/dir        # 数字模式(1 表示 Sticky Bit)

验证ls -ld /tmp 输出应为 drwxrwxrwt,最后一位 t 即代表 Sticky Bit。

四、数字模式速查表

chmod 的数字模式(四位八进制)中,第一位数用于表示这些特殊权限:

| 数字 | 含义 |
|------|---------------|
| 4 | SUID (Set UID) |
| 2 | SGID (Set GID) |
| 1 | Sticky Bit |
| 0 | 清除所有特殊权限 |

可以组合使用,如 chmod 4755 file(SUID + rwxr-xr-x)、chmod 2770 dir(SGID + rwxrwx---)、chmod 1777 dir(Sticky + rwxrwxrwx)。若特殊权限位后为 0,则表示清除,如 chmod 0755 会清除所有特殊权限。

理解这三种特殊权限是进阶 Linux 文件权限管理的关键一步,尤其是在共享服务器、多用户环境和系统安全基线检查中,它们都是必须掌握的内容。