Linux默认SUID可执行文件详解

 更新时间:2026年05月31日 08:37:15   作者:vortex5  
在 Linux 权限体系中,SUID是一种特殊权限位,当一个程序被设置了 SUID 位后,任何用户执行该程序时,程序都会以文件所有者的身份运行,而非执行者的身份,本文给大家详细介绍了Linux默认SUID可执行文件,需要的朋友可以参考下

在 Linux 权限体系中,SUID(Set User ID)是一种特殊权限位。当一个程序被设置了 SUID 位后,任何用户执行该程序时,程序都会以文件所有者的身份运行,而非执行者的身份。这一机制是许多系统功能正常运作的基础,但同时也可能成为权限提升的突破口。

SUID 权限位基础

权限表示

SUID 权限在权限位中用 s 表示,出现在所有者执行权限位上:

表示方式含义
-rwsr-xr-x设置了 SUID,且所有者具有执行权限
-rwSr-xr-x设置了 SUID,但所有者没有执行权限(大写 S)

设置与查看

# 查看系统中所有 SUID 文件
find / -perm -u=s 2>/dev/null

# 查看某个文件的权限
ls -l /usr/bin/passwd

# 设置 SUID 权限
chmod u+s /path/to/file
chmod 4755 /path/to/file

各默认 SUID 文件详解

1./bin/mount— 文件系统挂载工具

所有者: root
核心功能: 将文件系统挂载到指定挂载点

mount 命令需要 root 权限才能操作内核的挂载表(/proc/mounts/etc/mtab)和块设备。通过 SUID 机制,普通用户可以在满足特定条件时执行挂载操作。

安全机制:

  • 普通用户只能挂载 /etc/fstab 中配置了 userusers 选项的设备
  • 无法挂载没有明确配置的文件系统
  • 挂载点必须具有适当的权限

渗透测试视角: 如果 /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 中的部分命令(如 sumount 等)能够以 root 身份执行。

注意: 并非所有 Linux 发行版都默认包含此文件,多见于嵌入式系统或精简环境。

4./usr/bin/passwd— 密码修改工具

所有者: root
核心功能: 修改用户密码,更新 /etc/shadow

这是 SUID 机制最经典的用例。/etc/shadow 文件只有 root 可读可写,但普通用户必须能够修改自己的密码。

工作流程:

  1. 普通用户执行 passwd
  2. 程序以 root 身份启动
  3. 验证用户身份(要求输入当前密码)
  4. 检查密码复杂度策略
  5. 更新 /etc/shadow 中对应条目
  6. 放弃特权,以普通权限继续运行

安全机制:

  • 严格的身份验证:必须知道当前密码才能修改
  • 密码复杂度检查
  • 只能修改自己的密码(除非以 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 用于检查当前用户的密码是否即将过期或已过期,通常由登录脚本调用。

工作流程:

  1. 读取 /etc/shadow 获取过期信息
  2. 计算剩余天数
  3. 输出警告信息

9./usr/bin/gpasswd— 组密码管理

所有者: root
核心功能: 管理 /etc/group/etc/gshadow

gpasswd 用于:

  • 设置组密码
  • 添加/删除组成员
  • 指定组管理员

安全机制:

  • 普通用户可以作为组管理员管理特定组
  • 组成员变更受 /etc/gshadow 中的组管理员配置控制

10./usr/bin/sudo— 以超级用户身份执行命令

所有者: root
核心功能: 允许授权用户以 root 或其他用户身份执行命令

sudo 是 Linux 系统中最重要的 SUID 程序之一,也是权限管理的核心组件。

工作流程:

  1. 用户执行 sudo command
  2. sudo 以 root 身份启动
  3. 验证用户身份(密码或免密配置)
  4. 检查 /etc/sudoers/etc/sudoers.d/ 中的授权规则
  5. 如果授权通过,以目标用户身份执行命令
  6. 记录审计日志(通常到 /var/log/auth.log

配置示例:

# /etc/sudoers
root    ALL=(ALL:ALL) ALL
%admin  ALL=(ALL) ALL
user1   ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx

渗透测试视角(重点关注):

  • sudo -l 查看当前用户的 sudo 权限
  • 检查是否存在 NOPASSWD 配置
  • 检查是否允许执行可编辑的脚本
  • 利用 GTFOBins 查询 sudo 允许的程序是否存在提权路径
  • 版本漏洞:如 CVE-2021-3156(Baron Samedit)

11./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 -u=s -type f 2>/dev/null | while read file; do
    owner=$(stat -c '%U' "$file")
    echo "[SUID] $file (Owner: $owner)"
done

echo ""
echo "=== SGID Files ==="
find / -perm -g=s -type f 2>/dev/null | while read file; do
    group=$(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 程序,渗透测试中应特别关注:

  1. 第三方 SUID 程序: 如自定义脚本、业务程序
  2. 可写 SUID 程序: 如果 SUID 程序可被当前用户修改,直接替换为 shell
  3. 环境变量劫持: 某些 SUID 程序依赖环境变量,可能被劫持

常见提权向量

场景利用方式
SUID 程序存在缓冲区溢出编写 exploit 获取 root shell
SUID 程序调用其他程序(未使用绝对路径)PATH 环境变量劫持
SUID 程序允许文件读取/写入读取敏感文件或写入恶意配置
SUID 程序是解释器(如 python、php)直接执行系统命令
SUID 程序可加载共享库LD_PRELOAD / LD_LIBRARY_PATH 劫持

防御与加固建议

1. 最小化 SUID 程序

# 移除不必要的 SUID 权限
chmod u-s /usr/bin/unnecessary_suid

# 或使用更安全的替代方案
# 如用 sudo 替代直接 SUID

2. 使用文件完整性监控

# AIDE (Advanced Intrusion Detection Environment)
aide --check

# Tripwire
tripwire --check

3. 定期审计

# 建立 SUID 程序基线
find / -perm -u=s -o -perm -g=s -type f 2>/dev/null | sort > suid_baseline.txt

# 定期对比
find / -perm -u=s -o -perm -g=s -type f 2>/dev/null | sort | diff suid_baseline.txt -

4. 使用 capabilities 替代 SUID

Linux capabilities 提供了更细粒度的权限控制,可以替代部分 SUID 需求:

# 示例:给 ping 添加 CAP_NET_RAW capability 而非 SUID
setcap cap_net_raw+ep /bin/ping
chmod u-s /bin/ping

5. 内核加固

# 限制普通用户的 SUID 程序使用
# /etc/sysctl.conf
fs.suid_dumpable = 0        # 禁止 SUID 程序生成 core dump
kernel.randomize_va_space = 2  # 启用 ASLR

总结

系统默认的 SUID 程序是 Linux 正常运作的基础设施,它们经过长期安全审计,直接漏洞较少。但在渗透测试中,应重点关注:

  1. sudo 配置: 这是最常见的提权入口
  2. 自定义/第三方 SUID 程序: 往往存在安全漏洞
  3. SUID 程序的组合利用: 单个程序可能安全,但组合使用可能产生意外效果
  4. 环境变量和配置文件: 不当配置可能使安全程序变得危险

理解这些默认 SUID 程序的设计原理和安全机制,是进行 Linux 安全审计和权限提升测试的基础。

以上就是Linux默认SUID可执行文件详解的详细内容,更多关于Linux默认SUID可执行文件的资料请关注脚本之家其它相关文章!

相关文章

  • 在Linux上检查CPU和硬盘温度的方法

    在Linux上检查CPU和硬盘温度的方法

    为了更好地监测您的Linux系统的硬件健康状况,如CPU与硬盘温度、风扇转速等关键指标,采用lm_sensors与hddtemp这两款强大工具是明智之选,以下是关于这些工具的详尽指南,包括它们的功能介绍、安装步骤以及如何配置,需要的朋友可以参考下
    2025-02-02
  • Linux进程信号的捕捉&&信号补充内容方式

    Linux进程信号的捕捉&&信号补充内容方式

    信号处理在进程从内核态返回用户态时触发,涉及状态切换与权限管理,sigaction用于自定义信号处理,支持屏蔽信号,volatile确保变量内存可见性,防止编译器优化导致的信号响应异常
    2025-08-08
  • Linux AMH 服务器管理面板远程访问的操作方法

    Linux AMH 服务器管理面板远程访问的操作方法

    AMH 是一款基于 Linux 系统的服务器管理面板,它提供了一系列的功能,包括网站管理、FTP 管理、数据库管理、DNS 管理、SSL 证书管理等,本文介绍在Linux 中安装AMH面板并结合Cpolar 内网穿透工具实现远程访问,感兴趣的朋友一起看看吧
    2023-11-11
  • 配置Apache支持shtml(SSI)的方法

    配置Apache支持shtml(SSI)的方法

    这篇文章主要介绍了配置Apache支持shtml(SSI)的方法,需要的朋友可以参考下
    2014-03-03
  • Serverless 架构如何演进详细介绍

    Serverless 架构如何演进详细介绍

    这篇文章主要介绍了Serverless 架构如何演进详细介绍的相关资料,需要的朋友可以参考下
    2017-03-03
  • Linux设置命令行无操作超时退出的解决方案

    Linux设置命令行无操作超时退出的解决方案

    在 Linux 系统安全基线检查中,未配置命令行超时退出是一个常见的中危风险,如果用户长时间保持登录状态但未操作,攻击者可能利用这一点进行未授权访问,所以本文给大家介绍了Linux设置命令行无操作超时退出的解决方案,需要的朋友可以参考下
    2025-12-12
  • Linux基于环形队列的生产消费者模型详解

    Linux基于环形队列的生产消费者模型详解

    这篇文章主要介绍了Linux基于环形队列的生产消费者模型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • linux chroot命令详解

    linux chroot命令详解

    这篇文章主要介绍了linux chroot命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Linux内存管理优化的五个实用技巧分享

    Linux内存管理优化的五个实用技巧分享

    在现代计算环境中,内存管理是操作系统性能优化的核心环节之一,对于 Linux 系统而言,内存管理的效率直接影响系统的响应速度、稳定性以及资源利用率,本文将从 Linux 内存管理的基本原理出发,结合实际应用场景,分享五个实用的优化技巧,需要的朋友可以参考下
    2025-05-05
  • Linux实现免密登录的配置方法

    Linux实现免密登录的配置方法

    这篇文章主要介绍了Linux实现免密登录的配置方法,实现的效果是,当前服务器的test账号可以免密登陆15服务器的test账号,需要的朋友可以参考下
    2024-04-04

最新评论