Linux 默认 SUID 可执行文件详解

Linux 默认 SUID 可执行文件详解 在 Linux 权限体系中SUIDSet User ID是一种特殊权限位。当一个程序被设置了 SUID 位后任何用户执行该程序时程序都会以文件所有者的身份运行而非执行者的身份。这一机制是许多系统功能正常运作的基础但同时也可能成为权限提升的突破口。SUID 权限位基础权限表示SUID 权限在权限位中用s表示出现在所有者执行权限位上表示方式含义-rwsr-xr-x设置了 SUID且所有者具有执行权限-rwSr-xr-x设置了 SUID但所有者没有执行权限大写 S设置与查看# 查看系统中所有 SUID 文件find/-perm-us2/dev/null# 查看某个文件的权限ls-l/usr/bin/passwd# 设置 SUID 权限chmodus /path/to/filechmod4755/path/to/file各默认 SUID 文件详解1./bin/mount— 文件系统挂载工具所有者root核心功能将文件系统挂载到指定挂载点mount 命令需要 root 权限才能操作内核的挂载表/proc/mounts、/etc/mtab和块设备。通过 SUID 机制普通用户可以在满足特定条件时执行挂载操作。安全机制普通用户只能挂载/etc/fstab中配置了user或users选项的设备无法挂载没有明确配置的文件系统挂载点必须具有适当的权限渗透测试视角如果/etc/fstab配置不当如允许用户挂载且挂载了可写文件系统可能利用 mount 配合特定文件系统类型如 ext4 配合 debugfs进行提权。2./bin/umount— 文件系统卸载工具所有者root核心功能卸载已挂载的文件系统与 mount 配对使用同样需要 root 权限来更新内核挂载表。普通用户只能卸载自己在/etc/fstab中挂载的文件系统。安全机制只能卸载由同一用户挂载的文件系统无法卸载系统关键挂载点3./bin/bbsuid— BusyBox SUID 包装器所有者root核心功能BusyBox 多工具集的 SUID 包装器这是 BusyBox 环境中的特殊组件。BusyBox 将大量 Unix 工具集成到一个可执行文件中通过符号链接调用不同功能。bbsuid作为 SUID 包装器使得 BusyBox 中的部分命令如su、mount等能够以 root 身份执行。注意并非所有 Linux 发行版都默认包含此文件多见于嵌入式系统或精简环境。4./usr/bin/passwd— 密码修改工具所有者root核心功能修改用户密码更新/etc/shadow这是 SUID 机制最经典的用例。/etc/shadow文件只有 root 可读可写但普通用户必须能够修改自己的密码。工作流程普通用户执行passwd程序以 root 身份启动验证用户身份要求输入当前密码检查密码复杂度策略更新/etc/shadow中对应条目放弃特权以普通权限继续运行安全机制严格的身份验证必须知道当前密码才能修改密码复杂度检查只能修改自己的密码除非以 root 身份运行渗透测试视角历史上存在过passwd的缓冲区溢出漏洞但现代发行版中已非常罕见。5./usr/bin/chsh— 修改默认 Shell所有者root核心功能修改用户的登录 Shell/etc/passwd中的 shell 字段/etc/passwd文件虽然全局可读但只有 root 可写。用户需要修改自己的登录 Shell 时必须通过 SUID 程序。安全机制只能修改自己的 shell 字段新 Shell 必须在/etc/shells白名单中需要身份验证潜在风险如果将非标准 shell 加入/etc/shells或系统允许自定义 shell可能通过恶意 shell 脚本实现权限维持。6./usr/bin/chfn— 修改用户信息finger所有者root核心功能修改用户的 GECOS 字段全名、办公室、电话等信息与chsh类似需要修改/etc/passwd文件。安全机制只能修改自己的信息对输入内容进行过滤防止注入攻击限制字段长度历史漏洞早期版本的chfn存在缓冲区溢出漏洞如 CVE-2000-0666现代版本已修复。7./usr/bin/chage— 密码过期信息管理所有者root核心功能查看和修改用户密码过期策略chage用于管理/etc/shadow中的密码过期相关字段密码最后修改日期密码最小使用期限密码最大使用期限密码过期前警告天数账户过期日期安全机制普通用户只能查看和修改自己的密码过期信息root 可以管理所有用户8./usr/bin/expiry— 账户过期检查所有者root核心功能检查账户密码是否过期expiry用于检查当前用户的密码是否即将过期或已过期通常由登录脚本调用。工作流程读取/etc/shadow获取过期信息计算剩余天数输出警告信息9./usr/bin/gpasswd— 组密码管理所有者root核心功能管理/etc/group和/etc/gshadowgpasswd用于设置组密码添加/删除组成员指定组管理员安全机制普通用户可以作为组管理员管理特定组组成员变更受/etc/gshadow中的组管理员配置控制10./usr/bin/sudo— 以超级用户身份执行命令所有者root核心功能允许授权用户以 root 或其他用户身份执行命令sudo是 Linux 系统中最重要的 SUID 程序之一也是权限管理的核心组件。工作流程用户执行sudo commandsudo以 root 身份启动验证用户身份密码或免密配置检查/etc/sudoers或/etc/sudoers.d/中的授权规则如果授权通过以目标用户身份执行命令记录审计日志通常到/var/log/auth.log配置示例# /etc/sudoersrootALL(ALL:ALL)ALL %adminALL(ALL)ALL user1ALL(root)NOPASSWD: /usr/bin/systemctl restart nginx渗透测试视角重点关注sudo -l查看当前用户的 sudo 权限检查是否存在 NOPASSWD 配置检查是否允许执行可编辑的脚本利用 GTFOBins 查询 sudo 允许的程序是否存在提权路径版本漏洞如 CVE-2021-3156Baron Samedit11./usr/sbin/suexec— Apache suEXEC 包装器所有者root核心功能Apache HTTP Server 的 suEXEC 模块suexec允许 Apache 以特定用户身份运行 CGI 程序而非默认的www-data用户。这在共享主机环境中尤为重要可以实现不同虚拟主机以不同用户身份运行。安全机制严格的目录和文件权限检查目标用户必须是系统有效用户程序路径必须在允许范围内日志记录到/var/log/apache2/suexec.log配置要求CGI 程序必须位于DocumentRoot下不能被其他用户写入不能是符号链接渗透测试视角如果配置不当如允许任意用户执行或目录权限错误可能导致本地权限提升。SUID 安全审计与渗透测试快速审计脚本#!/bin/bash# 查找所有 SUID/SGID 文件并分析echo SUID Files find/-perm-us-typef2/dev/null|whilereadfile;doowner$(stat-c%U$file)echo[SUID]$file(Owner:$owner)doneechoecho SGID Files find/-perm-gs-typef2/dev/null|whilereadfile;dogroup$(stat-c%G$file)echo[SGID]$file(Group:$group)done利用 GTFOBins 进行提权分析GTFOBins 是一个收集了可用于绕过安全限制的 Unix 二进制文件项目。对于每个 SUID 程序可以查询是否存在滥用路径# 检查 sudo 是否有已知提权路径# 访问 https://gtfobins.github.io/gtfobins/sudo/# 检查其他 SUID 程序# 如 find、vim、less、awk 等自定义 SUID 程序风险除了系统默认的 SUID 程序渗透测试中应特别关注第三方 SUID 程序如自定义脚本、业务程序可写 SUID 程序如果 SUID 程序可被当前用户修改直接替换为 shell环境变量劫持某些 SUID 程序依赖环境变量可能被劫持常见提权向量场景利用方式SUID 程序存在缓冲区溢出编写 exploit 获取 root shellSUID 程序调用其他程序未使用绝对路径PATH 环境变量劫持SUID 程序允许文件读取/写入读取敏感文件或写入恶意配置SUID 程序是解释器如 python、php直接执行系统命令SUID 程序可加载共享库LD_PRELOAD / LD_LIBRARY_PATH 劫持防御与加固建议1. 最小化 SUID 程序# 移除不必要的 SUID 权限chmodu-s /usr/bin/unnecessary_suid# 或使用更安全的替代方案# 如用 sudo 替代直接 SUID2. 使用文件完整性监控# AIDE (Advanced Intrusion Detection Environment)aide--check# Tripwiretripwire--check3. 定期审计# 建立 SUID 程序基线find/-perm-us-o-perm-gs-typef2/dev/null|sortsuid_baseline.txt# 定期对比find/-perm-us-o-perm-gs-typef2/dev/null|sort|diffsuid_baseline.txt -4. 使用 capabilities 替代 SUIDLinux capabilities 提供了更细粒度的权限控制可以替代部分 SUID 需求# 示例给 ping 添加 CAP_NET_RAW capability 而非 SUIDsetcap cap_net_rawep /bin/pingchmodu-s /bin/ping5. 内核加固# 限制普通用户的 SUID 程序使用# /etc/sysctl.conffs.suid_dumpable0# 禁止 SUID 程序生成 core dumpkernel.randomize_va_space2# 启用 ASLR总结系统默认的 SUID 程序是 Linux 正常运作的基础设施它们经过长期安全审计直接漏洞较少。但在渗透测试中应重点关注sudo 配置这是最常见的提权入口自定义/第三方 SUID 程序往往存在安全漏洞SUID 程序的组合利用单个程序可能安全但组合使用可能产生意外效果环境变量和配置文件不当配置可能使安全程序变得危险理解这些默认 SUID 程序的设计原理和安全机制是进行 Linux 安全审计和权限提升测试的基础。