
在 Linux/Unix 世界里,除了大家熟知的 rwx 权限之外,还有三种特殊权限位:
👉 setuid、setgid 和 sticky bit。
它们往往在多用户服务器、共享目录和系统命令里扮演关键角色。理解这三者,是从“会用 Linux”到“玩转 Linux 安全”的必修课。
一、setuid(Set User ID)
1. 定义
当一个可执行文件设置了 setuid 标志时,运行它的进程会临时获得该文件所有者的权限。
常用于 普通用户需要执行 root 操作,但不能直接给 root 权限 的场景。
2. 权限表现

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Sep 29 /usr/bin/passwd普通执行权限
x位置变成了 s,表示启用了 setuid。
3. 常见应用
/usr/bin/passwd:普通用户修改密码(实际上需要修改/etc/shadow)。ping:普通用户发送 ICMP 报文。
4. 风险
如果带 setuid 的程序有漏洞,攻击者可能直接提权到 root。
需严格控制、审计。
二、setgid(Set Group ID)
1. 定义
对可执行文件:运行该程序的进程,会临时以文件所属组的身份运行。
对目录:目录下新建的文件/子目录,自动继承父目录的组 ID,而不是当前用户的默认组。
2. 权限表现

ls -ld /project
drwxr-sr-x 2 root dev 4096 Sep 29 /project组执行位变成了 s,表示目录启用了 setgid。
3. 常见应用
程序层面:某些共享工具需要继承组权限。
目录层面:团队协作目录(如
/project),所有人新建文件都属于dev组,方便共享。
4. 风险
对程序:与 setuid 类似,有提权风险。
对目录:若组权限设置过宽,可能被越权访问。
三、sticky bit
1. 定义
只对目录生效。
当一个目录设置了 sticky bit,目录下的文件即使所有人可写,也只有文件的所有者或 root 能删除/修改。
2. 权限表现

ls -ld /tmp
drwxrwxrwt 10 root root 4096 Sep 29 /tmp其他用户的执行位显示为 t,就是 sticky bit。
3. 常见应用
/tmp目录:全员可写,但必须防止用户互相删除文件。公共共享目录:比如 FTP 上传区。
4. 风险
误以为 sticky bit 提权,其实只是“防护锁”。
如果没开,用户可能删掉别人文件,引发事故。
四、三者对比总结
如何设置:
操作这些标志与操作文件权限的命令是一样的, 都是使用chmod。
有两种方法对这些标志来操作
chmod u+s temp– 为temp文件加上setuid标志. (setuid只对文件有效,u=用户)chmod g+s tempdir– 为tempdir目录加上setgid标志 (setgid只对目录有效,g=组名)chmod o+t temp– 为temp文件加上sticky标志 (sticky只对文件有效)采用八进制方式. 这一组八进制数字三位的意义如下,
abca-setuid位, 如果该位为1, 则表示设置setuidb-setgid位, 如果该位为1, 则表示设置setgidc-sticky位, 如果该位为1, 则表示设置sticky
设置后, 可以用 ls -l 来查看. 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)
如:
rwsrw-r-- 表示有setuid标志 (rwxrw-r--:rwsrw-r--)rwxrwsrw- 表示有setgid标志 (rwxrwxrw-:rwxrwsrw-)rwxrw-rwt 表示有sticky标志 (rwxrw-rwx:rwxrw-rwt)
五、总结
setuid:给用户临时“换个身份”,最常见是普通用户执行 root 程序。
setgid:给组临时“换个身份”,特别适合团队目录共享。
sticky bit:不是提权,而是“文件删除保险锁”。
👉 简单记忆法:
uid → 用户换身份
gid → 组换身份
sticky → 文件锁保险