SUID权限简介

SUID简介:
1.只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
2.命令执行者要对该程序文件拥有执行(x)权限.
3.命令执行者在执行该程序时获得该程序文件属主的身份.
4.SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

以passwd命令说明

1 [vampire@LAMP ~]$ whereis passwd
2 passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

passwd是一个命令,即一个可执行二进制文件,可以使用这个命令来修改用户密码
由于用户密码是存储在/etc/shadow文件中,但是该文件权限是000,就是不允许任何人修改(root除外),
使用该命令能修改用户密码,是因为执行该命令的时候我们拥有了一个特殊权限,这个特殊权限让我们可以
修改/etc/shadow文件

查看passwd文件的详细信息

1 [vampire@LAMP ~]$ ll /usr/bin/passwd 
2 -rwsr-xr-x. 1 root root 25980 Feb 17  2012 /usr/bin/passwd  //可以看到该文件所属主权限标志位上是rws,文件属主是root,其他人具有执行权限(x),就是说当其他人执行该命令是会暂时获得文件属主权限,即root权限,而root是可以操作/etc/shadow文件的

查看shadow文件得权限

1 [vampire@LAMP ~]$ ll /etc/shadow
2 ---------- 1 root root 969 May 16 22:44 /etc/shadow
3 
4 [vampire@LAMP ~]$ cat /etc/shadow   
5 cat: /etc/shadow: Permission denied    //尝试查看shadow文件,没有权限,会发现使用vim,tail,head也一样没有权限

这样就相当于把shadow文件保护起来了,只有使用执行passwd命令修改密码那一刻才能修改shadow文件

给文件设定SUID权限

1 [vampire@LAMP vampire]$ touch test.file     //创建一个新文件
2 [vampire@LAMP vampire]$ ll
3 total 0
4 -rw-rw-r-- 1 vampire vampire 0 May 20 10:34 test.file
5 [vampire@LAMP vampire]$ chmod u+s test.file    //给文件添加SUID权限
6 [vampire@LAMP vampire]$ ll
7 total 0
8 -rwSrw-r-- 1 vampire vampire 0 May 20 10:34 test.file

上面给文件添加SUID权限貌似成功了,但是是错误的,正常的拥有SUID权限的文件中属主标志位第三位是s.
之所以出现S,是因为我们设置的文件之前就没有执行权限,test.file权限为664

1 [vampire@LAMP vampire]$ chmod 4775 test.file    //给文件赋予可执行权限,再设置SUID权限
2 [vampire@LAMP vampire]$ ll
3 total 0
4 -rwsrwxr-x 1 vampire vampire 0 May 20 10:34 test.file

取消文件SUID权限

1 [vampire@LAMP vampire]$ chmod 755 test.file
2 [vampire@LAMP vampire]$ ll
3 total 0
4 -rwxr-xr-x 1 vampire vampire 0 May 20 10:34 test.file

注:给文件赋予SUID权限之前,该文件一定要有可执行权限(x)
给文件赋予SUID权限的两种方式
chmod 4xxx test.file (后面xxx中任何一个有可执行权限即可)

chmod u+x test.file

转载于:https://www.cnblogs.com/iaknehc/p/6881517.html

<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. 除了 SUID,Linux 还有哪些特殊权限可能被用于提权? 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、付费专栏及课程。

余额充值