Linux提权后怎么查:SUID、sudo与登录日志排查清单 核心要点图解,提权排查顺序:先看登录日志定位入口,再查SUID与sudo确认提权路径。;用find按时间与权限筛SUID文件,比全量对比基线更快出结果。;sudo -l与sudoers审计能发现NOPASSWD等隐蔽提权配置。;排查完必须重置凭据、清理后门并封禁入口,否则会二次入侵。
Linux提权后怎么查:SUID、sudo与登录日志排查清单 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 提权排查顺序:先看登录日志定位入口,再查SUID与sudo确认提权路径。
  • 用find按时间与权限筛SUID文件,比全量对比基线更快出结果。
  • sudo -l与sudoers审计能发现NOPASSWD等隐蔽提权配置。
  • 排查完必须重置凭据、清理后门并封禁入口,否则会二次入侵。

服务器突然出现陌生 root 会话、CPU 莫名飙高,或者你在 last 里看到不认识的登录 IP——这往往意味着攻击者已经完成提权。此时最忌讳的是直接重启或删文件,正确做法是按固定顺序取证排查。Linux 提权排查的核心是三件事:登录日志定入口、SUID 与 sudo 定路径、清理加固防二次入侵。下面给出可直接复制执行的命令与判读要点。

第一步:用登录日志还原入侵时间线

先确认“谁、从哪、什么时候”进来的。日志路径按发行版区分:Debian/Ubuntu 为 /var/log/auth.log,RHEL/CentOS 为 /var/log/secure。

last -F -a | head -30
lastb | head -20
grep -E 'Accepted|Failed|sudo:' /var/log/auth.log | tail -50

判读要点:

  • 成功登录(Accepted)的 IP 是否属于你的办公或跳板机网段;
  • 同一 IP 是否先大量 Failed 再 Accepted,典型的爆破成功特征;
  • sudo: 行记录谁执行了什么命令,注意 COMMAND=/bin/bash 这类直接起 shell 的行为;
  • 若日志被清空,检查 /var/log/wtmp、btmp 文件大小与 mtime,异常变小即为清理痕迹。

第二步:排查异常 SUID/SGID 文件

SUID 是提权最常用的落地方式:把 bash、find、vim 复制到临时目录再 chmod u+s,普通用户执行即得 root。按时间筛选比全量对比基线更快:

find / -xdev -perm -4000 -type f -mtime -30 2>/dev/null
find / -xdev -perm -4000 -type f -printf '%TY-%Tm-%Td %p\n' 2>/dev/null | sort
find /tmp /var/tmp /dev/shm -perm -4000 -type f 2>/dev/null

重点看三类:临时目录下的 SUID 文件、系统目录里近期新增的 SUID 文件、名字伪装成 .db、.cache 的可执行文件。SGID 同理,把 -4000 换成 -2000。确认可疑后先 cp 备份再 chmod u-s,不要直接删除,保留取证样本。

第三步:审计 sudo 配置与授权面

攻击者拿到普通账号后,常通过 sudo 配置缺陷完成提权。检查所有 sudoers 文件:

grep -rE 'NOPASSWD|ALL.*ALL|!authenticate' /etc/sudoers /etc/sudoers.d/
sudo -l
visudo -c
危险配置风险说明
NOPASSWD: ALL免密执行任意命令,等于直接 root
授权可写脚本脚本或所在目录普通用户可写,可注入命令
sudo 调用 vim/find/less可在编辑器内起 shell 逃逸

发现陌生规则立即注释,改完必须 visudo -c 校验语法,否则 sudo 全量失效可能导致你无法登录维护。同时核对 /etc/passwd 中 UID 为 0 的账号:awk -F: '==0{print }' /etc/passwd,除 root 外均为后门。

第四步:清理后门与持久化项

提权后攻击者通常留持久化。逐项核对:

  • 计划任务:crontab -l、ls -l /etc/cron.*、/var/spool/cron/;
  • 自启服务:systemctl list-unit-files --state=enabled,排查陌生 unit;
  • SSH 后门:检查 ~/.ssh/authorized_keys 与 /etc/ssh/sshd_config 是否被改;
  • 动态库劫持:cat /etc/ld.so.preload,非空即高度可疑;
  • 进程:ps auxf 找父进程为 1、路径在 /tmp 的可执行文件。

第五步:加固清单与持续监测

排查结束不等于安全。按清单收尾:重置全部账号密码与 SSH 密钥、删除陌生用户、封禁攻击 IP、升级内核与软件包、关闭密码登录改用密钥。长期看,一次性排查容易漏掉隐蔽后门,建议启用 auditd 记录 execve 与 sudo 调用,并借助 AegisX 的主机文件完整性与登录行为监测能力,对 SUID 变更、sudoers 修改和异常登录实时告警,把“事后排查”变成“事中拦截”。

行动建议:现在就把上面的命令存成一份排查脚本,出事时按“日志—SUID—sudo—持久化”顺序执行,先备份再清理,全程记录时间线。

常见问题(FAQ)

怎么快速判断Linux服务器是不是被提权了?

先看是否有异常root登录与陌生进程。执行last -a、lastb与grep 'sudo:' /var/log/auth.log,确认root登录来源IP与时间;再用ps auxf查看父进程为1的可疑进程、crontab -l与systemctl list-units --type=service核对自启项。若出现非本人操作的root会话或sudo提权记录,基本可判定已被提权,应立即隔离主机并保留现场。

查找异常SUID文件有没有高效命令?

有。用find / -xdev -perm -4000 -type f -mtime -30 2>/dev/null按最近30天筛新增SUID文件,比全量列出更聚焦;再用find / -xdev -perm -4000 -type f -printf '%TY-%Tm-%Td %p\n' 2>/dev/null | sort输出时间线。重点看/tmp、/var/tmp、/dev/shm下的SUID文件,以及bash、find、vim等被复制后加SUID的常见提权载体。

sudo配置里哪些项最危险?

最危险的是NOPASSWD、ALL=(ALL) ALL与可写脚本路径。检查/etc/sudoers与/etc/sudoers.d/下所有文件,grep -rE 'NOPASSWD|ALL.*ALL' /etc/sudoers /etc/sudoers.d/;再确认被授权脚本或目录是否对普通用户可写,因为可写即等于可提权。发现陌生规则应立刻注释并执行visudo -c校验语法,避免配置损坏导致无法sudo。

登录日志该看哪些文件、怎么还原时间线?

Debian/Ubuntu看/var/log/auth.log,RHEL/CentOS看/var/log/secure,配合last、lastb、lastlog。用grep -E 'Accepted|Failed|sudo' /var/log/auth.log按时间排序,找出成功登录IP与sudo执行命令;再用last -F -a核对会话起止。若日志被清空,检查wtmp/btmp大小与auditd记录,并对比文件修改时间判断是否遭清理。

排查完成后还需要做哪些加固?

必须重置所有账号密码与SSH密钥,删除陌生用户与authorized_keys条目,清理crontab、systemd服务与SUID后门,封禁攻击IP并升级补丁。建议启用auditd监控execve与sudo调用,用AegisX对主机文件完整性与登录行为做持续监测,把一次性排查变成常态化告警,防止二次提权。