简单谈文件SUID位的作用

本文深入解析了Linux系统中SUID位的作用及其实现原理。通过理解SUID位如何改变进程的有效用户ID(euid),使得普通用户也能执行通常仅限于root用户的特定操作,例如修改/etc/passwd文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux是一个多用户多任务的操作系统,身为一个优秀安全的多用户操作系统,linux对用户之间资源的访问权限管理得十分严谨。

linux每个文件和目录都有一组访问权限标志位,用9个二进制位表示:


如用ls -l显示/etc/passwd文件:  

-rw-r--r--  1 root    root   1687  passwd

代表passwd文件的访问权限是:所属用户(拥有者)可读可写;组用户可读;其他用户可读;(其中passwd所属用户为root,所属为root组)

1、按这权限标记意味着只有passwd的所属者root对其有可写权限,那么真得用其它用户登录的情况下就不能对其进行写操作吗?

首先我们得明白linux系统是怎么判定访问者是谁。其实我们无论图形操作和终端命令操作都是调用一段程序对某个文件资源的访问。而进程(执行中的程序)中有个euid(有效用户)这个才是系统用来判定访问者的根据。意味着即使是非root用户只要执行的程序进程中的euid==root,那么系统就认为访问者是root,就能对/etc/passwd进行可写操作!

2、那么什么时候非root用户执行进程的euid才会是root呢?

这就关系到今天的主题SUID位的作用。在程序没设置SUID的情况下,哪个用户执行该程序,该程序进程中的euid就为该用户uid。

比如用户JaxonXu执行了权限描述为-rwxr-xr-x  root  root  foo的foo程序,那么该进程的euid就为JaxonXu,就不能对/etc/passwd进行写操作。

但在某程序文件设置了SUID位以后,比如bar程序,其权限描述为:-rwsr-xr-x root root bar(注意在所属用户可执行位里标的是s,表明文件设置了SUID并且所属用户可执行,具体请翻看APUE)当JaxonXu执行bar程序,该进程的euid为程序的所属用户root(这就是SUID的作用),因此该进程就可以对/etc/passwd进行可写操作(即使是非root用户运行的)!


这就是passwd命令可以让非root用户修改/etc/passwd文件的原因。

我们用which passwd定位到passwd命令的位置/usr/bin/passwd,用ls -l查看:

-rwsr-xr-x 1 root   root      37100  passwd

可知/usr/bin/passwd命令文件设置了SUID的标记位。

<think>我们正在讨论Linux中的SUID权限及其在提权中的应用。根据引用,SUID(Set UserID)是一种特殊权限,当它设置在一个可执行文件上时,该文件在执行时会以文件所有者的权限运行,而不是执行者的权限。这为提权提供了可能,因为普通用户执行该文件时可能获得root权限(如果文件所有者是root)。关键点:1. SUID权限的表示:在文件权限中,所有者的执行权限如果是's'(小写)则表示有SUID权限且文件可执行;如果是'S'(大写)则表示有SUID权限但文件不可执行(这通常没有实际意义)。2. SUID权限的设置:可以通过`chmodu+s文件名`来设置,也可以通过数字形式设置,如`chmod4755文件名`(其中4表示SUID)。3.SUID提权原理:如果某个属于root且设置了SUID的可执行文件存在漏洞(或者被精心构造参数执行),那么普通用户执行它就可能获得root权限。常见的可用于提权的SUID程序包括:find、vim、bash、cp、nmap等。这些程序通常不需要SUID权限,因此移除它们的SUID是安全的加固措施。引用[1]详细介绍了SUID、SGID和SBIT三种特殊权限。引用[2]提到了Linux中的用户分类(root、普通用户、虚拟用户)以及权限提升的概念。引用[3]举例说明了SUID的特性:普通用户执行具有SUID的程序时会以文件所有者的身份运行。引用[4]则给出了一个具体的提权例子:通过复制cp命令并保留权限属性,然后利用它修改bash的权限,从而获得root权限。现在,我们将详细解释SUID提权机制,并提供一些实际例子。回答结构:1. SUID权限的基本概念和设置方法2.SUID提权的原理3.常见的SUID提权方法及示例4.如何查找系统中设置了SUID文件5.安全加固建议6.相关问题注意:在解释过程中,我们将使用LaTeX格式来表示权限等数学表达式。</think>### Linux SUID 权限提权详解 #### 一、SUID 权限基础概念 SUID(Set User ID)是 Linux 文件系统中的特殊权限,当设置在可执行文件上时,会使程序**以文件所有者的身份运行**,而非执行者的身份[^1]。其数学表示为: $$ \text{权限} = 4000_{octal} $$ 在权限列表中显示为所有者的执行变为 `s`: ```bash -rwsr-xr-x 1 root root /usr/bin/passwd ``` 此处 `s` 表示: 1. 文件所有者是 root (UID 0) 2. 任何用户执行时都获得 root 权限 #### 二、提权原理与技术实现 当普通用户执行 SUID-root 程序时: ```mermaid graph TB A[普通用户执行] --> B{SUID 程序} B -->|程序以root身份运行| C[执行特权操作] C -->|存在漏洞| D[获取root shell] ``` **经典提权方法**: 1. **环境变量劫持**: ```bash # 利用find命令的-exec漏洞 $ find / -name test -exec /bin/bash -p \; ``` 因 `find` 有 SUID 权限,`-exec` 会以 root 执行 bash[^4] 2. **共享库注入**: ```bash # 劫持LD_PRELOAD加载恶意库 $ gcc -shared -fPIC -o exploit.so exploit.c $ sudo -u root SUID_PROGRAM # 程序加载exploit.so ``` 3. **文件覆盖攻击**: ```bash # 利用cp命令的SUID覆盖/etc/passwd $ cp ./malicious_passwd /etc/passwd ``` 当 `cp` 有 SUID 时,可覆盖系统文件[^4] #### 三、高风险 SUID 程序示例 | 程序 | 提权方法 | 风险等级 | |-----------|------------------------------|----------| | `find` | `-exec /bin/sh` | ⚠️⚠️⚠️ | | `bash` | `bash -p` | ⚠️⚠️⚠️ | | `vim` | `:!sh` | ⚠️⚠️ | | `cp/mv` | 覆盖敏感文件 | ⚠️⚠️ | | `nmap` | `--interactive` 模式 | ⚠️⚠️ | #### 四、防御与加固措施 1. **权限最小化**: ```bash # 移除非必要SUID sudo chmod u-s /path/to/program ``` 2. **文件系统加固**: ```bash # 使用nosuid挂载选项 mount -o remount,nosuid /home ``` 3. **入侵检测**: ```bash # 监控SUID文件变化 auditctl -w / -p wa -k suid_change ``` #### 五、SUID 与 SGID 区别 | 特性 | SUID | SGID | |------------|------------------------------|------------------------------| | **作用对象** | 可执行文件 | 可执行文件/目录 | | **权限继承** | 继承文件所有者权限 | 继承文件所属组权限 | | **提权方向** | 用户→所有者 | 用户→组 | | **数字表示** | $4000_{octal}$ | $2000_{octal}$ | > 注意:`/usr/bin/passwd` 等核心工具需保留 SUID,但应定期审计[^1]。 --- ### 相关问题 1. 如何区分合法 SUID 程序与恶意后门? 2. 在容器环境中,SUID 提权有哪些特殊风险? 3. 除了 SUIDLinux 还有哪些特殊权限可能被用于提权? 4. 如何利用 Linux 能力(Capabilities)替代 SUID 实现最小权限? 5. SUID 权限与 SELinux 策略如何协同工作? [^1]: Linux 特殊权限原理 [^2]: 用户权限层级划分 [^3]: SUID 执行机制示例 [^4]: 文件覆盖提权技术
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值