在 Linux 的权限体系中基础rwx只能解决“谁能读写执行”但无法覆盖一些更复杂的场景例如需要“临时以文件所有者身份执行”需要“目录内文件自动继承组”需要“共享目录禁止互删”于是引入了三种特殊权限位SUID / SGID / Sticky Bit一、SUIDSet User ID1. 核心定义一句话执行文件时以文件所有者身份运行进程2. 权限表现-rwsr-xr-x root root /usr/bin/passwd重点s出现在 user 权限位表示 SUID 生效3. 行为机制非常重要当普通用户执行程序项目值Real UIDuserAEffective UIDroot文件所有者root 关键点进程权限由 EUID 决定而不是实际用户4. 典型用途系统级工具/usr/bin/passwd修改/etc/shadowmountping早期版本5. 安全本质重点SUID 本质是权限提升通道风险来源shell 调用PATH 劫持环境变量污染可写配置文件生产结论SUID 高风险设计必须极度克制6. 设置方式chmod us file chmod 4755 file二、SGIDSet Group IDSGID 分两种语义文件 目录重点是目录2.1 SGID作用于文件行为执行文件时进程 GID 文件所属组实际使用较少主要用于特定共享工具。2.2 SGID作用于目录 ⭐生产重点1. 核心定义在该目录下创建的文件自动继承目录的 group2. 示例chmod gs /data/shared表现drwxrwsr-xs出现在 group 位3. 行为机制假设目录 group www用户 userA 创建文件结果文件 group www自动继承4. 典型场景Web 目录www-data / nginx团队共享目录CI/CD 构建目录5. 关键价值SGID 解决的是“多人协作时 group 不一致问题”否则需要手动 chgrp非常容易出错。三、Sticky Bit粘滞位1. 核心定义目录中用户只能删除自己创建的文件2. 典型目录/tmp权限drwxrwxrwtt表示 sticky bit3. 行为规则非常关键在 sticky 目录中用户能否删除他人文件文件所有者✔root✔其他用户✘4. 为什么必须存在如果没有 sticky bit/tmp 777任意用户可以删所有人文件系统直接不可用5. 设置方式chmod t dir chmod 1777 dir四、三者对比核心理解表特性作用对象行为本质SUID文件以 owner 身份执行临时提权SGID文件/目录继承 group / 执行组权限协作控制Sticky Bit目录限制删除权限防互删五、权限位在 Linux 中的编码权限八进制SUID4000SGID2000Sticky1000示例组合chmod 2755 dir # SGID chmod 4755 file # SUID chmod 1777 tmp # Sticky六、真实生产理解模型非常重要可以用一句话理解三者SUID权限“借用”我执行程序但借用文件主人的身份SGID权限“继承”我在这个目录创建的东西自动归某个组Sticky Bit权限“保护”这个地方可以共享但不能互相破坏七、常见误区生产踩坑点❌ 误区1SUID 安全功能实际上SUID 是安全风险入口❌ 误区2SGID 只用于执行实际上80% 场景是目录继承❌ 误区3Sticky Bit 没用实际上是 /tmp 安全模型核心总结Linux 三大特殊权限本质是三种控制模型SUID →身份切换提权SGID →组继承协作Sticky →删除约束保护
Linux 特殊权限详解(SUID / SGID / Sticky Bit)
在 Linux 的权限体系中基础rwx只能解决“谁能读写执行”但无法覆盖一些更复杂的场景例如需要“临时以文件所有者身份执行”需要“目录内文件自动继承组”需要“共享目录禁止互删”于是引入了三种特殊权限位SUID / SGID / Sticky Bit一、SUIDSet User ID1. 核心定义一句话执行文件时以文件所有者身份运行进程2. 权限表现-rwsr-xr-x root root /usr/bin/passwd重点s出现在 user 权限位表示 SUID 生效3. 行为机制非常重要当普通用户执行程序项目值Real UIDuserAEffective UIDroot文件所有者root 关键点进程权限由 EUID 决定而不是实际用户4. 典型用途系统级工具/usr/bin/passwd修改/etc/shadowmountping早期版本5. 安全本质重点SUID 本质是权限提升通道风险来源shell 调用PATH 劫持环境变量污染可写配置文件生产结论SUID 高风险设计必须极度克制6. 设置方式chmod us file chmod 4755 file二、SGIDSet Group IDSGID 分两种语义文件 目录重点是目录2.1 SGID作用于文件行为执行文件时进程 GID 文件所属组实际使用较少主要用于特定共享工具。2.2 SGID作用于目录 ⭐生产重点1. 核心定义在该目录下创建的文件自动继承目录的 group2. 示例chmod gs /data/shared表现drwxrwsr-xs出现在 group 位3. 行为机制假设目录 group www用户 userA 创建文件结果文件 group www自动继承4. 典型场景Web 目录www-data / nginx团队共享目录CI/CD 构建目录5. 关键价值SGID 解决的是“多人协作时 group 不一致问题”否则需要手动 chgrp非常容易出错。三、Sticky Bit粘滞位1. 核心定义目录中用户只能删除自己创建的文件2. 典型目录/tmp权限drwxrwxrwtt表示 sticky bit3. 行为规则非常关键在 sticky 目录中用户能否删除他人文件文件所有者✔root✔其他用户✘4. 为什么必须存在如果没有 sticky bit/tmp 777任意用户可以删所有人文件系统直接不可用5. 设置方式chmod t dir chmod 1777 dir四、三者对比核心理解表特性作用对象行为本质SUID文件以 owner 身份执行临时提权SGID文件/目录继承 group / 执行组权限协作控制Sticky Bit目录限制删除权限防互删五、权限位在 Linux 中的编码权限八进制SUID4000SGID2000Sticky1000示例组合chmod 2755 dir # SGID chmod 4755 file # SUID chmod 1777 tmp # Sticky六、真实生产理解模型非常重要可以用一句话理解三者SUID权限“借用”我执行程序但借用文件主人的身份SGID权限“继承”我在这个目录创建的东西自动归某个组Sticky Bit权限“保护”这个地方可以共享但不能互相破坏七、常见误区生产踩坑点❌ 误区1SUID 安全功能实际上SUID 是安全风险入口❌ 误区2SGID 只用于执行实际上80% 场景是目录继承❌ 误区3Sticky Bit 没用实际上是 /tmp 安全模型核心总结Linux 三大特殊权限本质是三种控制模型SUID →身份切换提权SGID →组继承协作Sticky →删除约束保护