Linux 权限提升基础:SUID、sudo、计划任务与敏感文件

一、前言

在渗透测试中,拿到 WebShell 或普通用户 SSH 权限并不代表结束。很多真实场景中,初始权限往往只是低权限用户,后续还需要通过本机信息收集、错误配置、敏感文件、计划任务或 SUID 程序完成权限提升。

本文总结 Linux 提权的基础排查流程,适用于本地靶场、VulnHub、HTB、CTF 和授权测试环境。

二、提权前的基本信息收集

拿到 shell 后,先确认当前权限和系统环境。

1
2
3
4
5
6
whoami
id
hostname
pwd
uname -a
cat /etc/os-release

查看当前用户能访问哪些目录:

1
2
3
ls -la
ls -la /home
ls -la /var/www

查看网络连接和进程:

1
2
ss -antp
ps aux

这些信息能帮助判断当前用户、系统版本、服务进程和可能的横向移动入口。

三、sudo 权限检查

首先检查当前用户是否拥有 sudo 权限:

1
sudo -l

如果出现类似:

1
(root) NOPASSWD: /bin/bash

说明当前用户可以免密以 root 权限执行 /bin/bash

1
sudo /bin/bash

如果是其他程序,也要判断是否能逃逸到 shell。例如:

1
2
3
4
5
6
7
vim
less
find
tar
python
perl
nmap

可以结合 GTFOBins 查询对应提权方式。

风险原因:

  • sudo 配置过宽。
  • 普通用户可执行高危命令。
  • 配置了 NOPASSWD

修复建议:

  • 使用 visudo 收敛权限。
  • 只允许执行业务必须命令。
  • 避免允许普通用户执行 shell、编辑器、解释器。
  • 对 sudo 操作做日志审计。

四、SUID 程序排查

SUID 程序会以文件所有者权限运行。如果某个可利用程序拥有 SUID root 权限,就可能被用来提权。

查找 SUID 文件:

1
find / -perm -u=s -type f 2>/dev/null

常见需要重点关注的程序:

1
2
3
4
5
6
7
8
/usr/bin/find
/usr/bin/bash
/usr/bin/vim
/usr/bin/nmap
/usr/bin/cp
/usr/bin/tar
/usr/bin/python
/usr/bin/perl

如果发现异常 SUID 程序,可以先查看权限:

1
ls -l /path/to/file

示例:

1
-rwsr-xr-x 1 root root 123456 /usr/bin/find

其中 s 表示设置了 SUID。

风险原因:

  • 管理员误给普通程序加 SUID。
  • 第三方软件安装后权限配置不当。
  • 攻击者留下 SUID 后门。

修复建议:

1
chmod u-s /path/to/suspicious_file

同时定期基线检查 SUID 文件变化。

五、计划任务提权

计划任务是 Linux 提权中常见入口。如果 root 定时执行某个脚本,而普通用户可写这个脚本,就可以修改脚本内容,等待 root 触发。

查看系统计划任务:

1
2
3
4
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/
ls -la /etc/cron.daily/

查看当前用户计划任务:

1
crontab -l

重点关注:

  • root 定时执行的脚本。
  • 脚本路径位于 /tmp/var/www、用户目录。
  • 脚本或目录当前用户可写。

检查权限:

1
2
ls -l /path/to/script.sh
ls -ld /path/to/

风险原因:

  • root 计划任务执行了低权限用户可写文件。
  • 计划任务脚本所在目录权限过宽。
  • 使用相对路径导致 PATH 劫持。

修复建议:

  • root 计划任务脚本归属 root。
  • 文件权限设置为 700755
  • 避免执行 /tmp 等不可信目录下的脚本。
  • 计划任务中使用绝对路径。

六、敏感文件排查

1. 配置文件中的账号密码

Web 项目和数据库配置文件经常保存明文凭据。

1
grep -RniE "password|passwd|pwd|user|username|db_|secret|key" /var/www 2>/dev/null

常见文件:

1
2
3
4
5
6
.env
config.php
database.php
settings.py
application.yml
wp-config.php

如果拿到数据库密码,可以尝试:

  • 登录数据库读取敏感信息。
  • 查看是否复用为系统用户密码。
  • 找到后台账号密码。

2. SSH 私钥

1
find / -name "id_rsa" -o -name "id_dsa" 2>/dev/null

如果发现私钥,需要检查权限和可登录用户:

1
2
ls -l id_rsa
cat id_rsa

使用私钥登录:

1
2
chmod 600 id_rsa
ssh -i id_rsa user@target

3. history 文件

1
2
cat ~/.bash_history
find /home -name ".bash_history" -exec cat {} \; 2>/dev/null

history 中可能出现:

  • 数据库连接命令。
  • 明文密码。
  • 上传脚本。
  • 管理员操作记录。

七、可写目录和可写文件

查找全局可写目录:

1
find / -writable -type d 2>/dev/null

查找 777 权限文件:

1
find / -perm 0777 -type f 2>/dev/null

重点关注:

  • root 定时任务会执行的文件是否可写。
  • 服务启动脚本是否可写。
  • Web 目录中是否可以写入脚本。
  • PATH 中是否存在可写目录。

八、内核漏洞提权

查看系统版本:

1
2
uname -a
cat /etc/os-release

如果系统版本较老,可以搜索是否存在公开本地提权漏洞。

注意事项:

  • 内核提权风险较高,可能导致系统崩溃。
  • 授权测试中应先确认是否允许使用 Exploit。
  • 优先尝试配置错误类提权。

九、自动化辅助工具

常见 Linux 提权辅助脚本:

1
2
3
linpeas.sh
linux-exploit-suggester
lse.sh

使用方式:

1
2
chmod +x linpeas.sh
./linpeas.sh

自动化工具适合快速发现线索,但不要完全依赖工具。面试或报告中要能解释每个发现为什么有风险。

十、提权思路总结

Linux 提权可以按这个顺序排查:

1
2
3
4
5
6
7
8
9
10
当前用户信息
-> sudo -l
-> SUID 文件
-> 计划任务
-> 敏感配置文件
-> SSH 密钥
-> history
-> 可写目录
-> 服务进程
-> 内核版本

红队面试时,如果能把这套流程说清楚,再结合一两个靶场案例,面试官会更容易判断你不是只会跑工具,而是真的理解提权思路。

十一、防护建议

  • 最小权限原则配置用户权限。
  • 定期检查 sudo 配置。
  • 定期基线扫描 SUID 文件。
  • root 计划任务脚本不可被普通用户写入。
  • 配置文件中避免明文密码。
  • SSH 私钥设置严格权限。
  • 删除无用账号和历史敏感命令。
  • 及时更新系统补丁。

十二、总结

Linux 提权的本质是从低权限用户出发,寻找系统中的权限边界错误。常见入口包括 sudo 配置、SUID 文件、计划任务、敏感凭据和可写路径。

对红队方向来说,提权能力非常重要。因为真实渗透中,初始入口往往只是一个普通 shell,能否继续扩大战果,很大程度取决于本机枚举和提权思路是否扎实。