Linux 特殊权限详解(SUID / SGID / Sticky Bit)

📅 2026/7/3 16:46:06 👁️ 阅读次数 📝 编程学习
Linux 特殊权限详解(SUID / SGID / Sticky Bit)

在 Linux 的权限体系中,基础rwx只能解决“谁能读写执行”,但无法覆盖一些更复杂的场景,例如:

  • 需要“临时以文件所有者身份执行”

  • 需要“目录内文件自动继承组”

  • 需要“共享目录禁止互删”

于是引入了三种特殊权限位:

SUID / SGID / Sticky Bit


一、SUID(Set User ID)

1. 核心定义(一句话)

执行文件时,以文件所有者身份运行进程


2. 权限表现

-rwsr-xr-x root root /usr/bin/passwd

重点:

  • s出现在 user 权限位

  • 表示 SUID 生效


3. 行为机制(非常重要)

当普通用户执行程序:

项目
Real UIDuserA
Effective UIDroot
文件所有者root

👉 关键点:

进程权限由 EUID 决定,而不是实际用户


4. 典型用途

系统级工具:

  • /usr/bin/passwd(修改/etc/shadow

  • mount

  • ping(早期版本)


5. 安全本质(重点)

SUID 本质是:

权限提升通道

风险来源:

  • shell 调用

  • PATH 劫持

  • 环境变量污染

  • 可写配置文件

生产结论:

SUID = 高风险设计(必须极度克制)


6. 设置方式

chmod u+s file chmod 4755 file

二、SGID(Set Group ID)

SGID 分两种语义:文件 & 目录(重点是目录)


2.1 SGID(作用于文件)

行为:

执行文件时,进程 GID = 文件所属组

实际使用较少,主要用于特定共享工具。


2.2 SGID(作用于目录 ⭐生产重点)

1. 核心定义

在该目录下创建的文件,自动继承目录的 group


2. 示例

chmod g+s /data/shared

表现:

drwxrwsr-x

s出现在 group 位


3. 行为机制

假设:

  • 目录 group = www

  • 用户 userA 创建文件

结果:

文件 group = www(自动继承)

4. 典型场景

  • Web 目录(www-data / nginx)

  • 团队共享目录

  • CI/CD 构建目录


5. 关键价值

SGID 解决的是:

“多人协作时 group 不一致问题”

否则需要手动 chgrp,非常容易出错。


三、Sticky Bit(粘滞位)


1. 核心定义

目录中用户只能删除自己创建的文件


2. 典型目录

/tmp

权限:

drwxrwxrwt

t表示 sticky bit


3. 行为规则(非常关键)

在 sticky 目录中:

用户能否删除他人文件
文件所有者
root
其他用户

4. 为什么必须存在?

如果没有 sticky bit:

  • /tmp= 777

  • 任意用户可以删所有人文件

  • 系统直接不可用


5. 设置方式

chmod +t dir chmod 1777 dir

四、三者对比(核心理解表)

特性作用对象行为本质
SUID文件以 owner 身份执行临时提权
SGID文件/目录继承 group / 执行组权限协作控制
Sticky Bit目录限制删除权限防互删

五、权限位在 Linux 中的编码

权限八进制
SUID4000
SGID2000
Sticky1000

示例组合

chmod 2755 dir # SGID chmod 4755 file # SUID chmod 1777 tmp # Sticky

六、真实生产理解模型(非常重要)

可以用一句话理解三者:


SUID:权限“借用”

我执行程序,但借用文件主人的身份


SGID:权限“继承”

我在这个目录创建的东西自动归某个组


Sticky Bit:权限“保护”

这个地方可以共享,但不能互相破坏


七、常见误区(生产踩坑点)

❌ 误区1:SUID = 安全功能

实际上:

SUID 是安全风险入口


❌ 误区2:SGID 只用于执行

实际上:

80% 场景是目录继承


❌ 误区3:Sticky Bit 没用

实际上:

是 /tmp 安全模型核心


总结

Linux 三大特殊权限本质是三种控制模型:

  • SUID →身份切换(提权)

  • SGID →组继承(协作)

  • Sticky →删除约束(保护)