sudo 记录怎么判读
sudo 的认证与执行记录写入系统认证日志(Debian 系 /var/log/auth.log,RHEL 系 /var/log/secure),每条成功提权记录包含执行账号、终端、工作目录、目标用户与目标程序。判读的重点不是“有没有 sudo”,而是形态是否异常:服务账号却执行交互式命令、运维账号执行与日常无关的工具、短时间内连续提权失败、账号未登录却有提权记录。把这些形态与登录记录、审计记录交叉,才能还原提权链路。
基本信息
| 适用平台 | 安装 sudo 的 Linux/Unix 发行版 |
|---|---|
| 日志位置 | Debian 系 /var/log/auth.log;RHEL 系 /var/log/secure;journald 系统用 journalctl -t sudo |
| 关键字段 | 执行账号、TTY、PWD、USER(目标用户)、COMMAND(目标程序) |
| 失败标记 | incorrect password attempts、authentication failure、user NOT in sudoers |
| 交叉来源 | 登录记录(last/lastlog)、auditd 执行记录、shell 历史文件 |
典型使用场景
- 识别服务账号被用于交互式操作:它说明有人借用了服务凭据
- 发现运维账号执行非常规命令(内网扫描、隧道、下载工具),锁定横向或外带行为
- 统计连续失败记录,判断是否存在口令爆破或权限摸索
- 与账号登录时段对照,识别“无人登录却发生提权”的异常
- 为处置顺序提供依据:先处理提权链路最上游的账号
检索与聚合
检索与聚合
# 近期提权命令
grep 'COMMAND=' /var/log/auth.log | tail -50
# 过滤掉 session opened/closed 之类噪声
grep 'sudo' /var/log/auth.log | grep -v 'session opened' | tail -30
# 统计每个执行账号的提权次数,找出高频账号
awk -F' : ' '/COMMAND=/{split($1,a," "); print a[1]}' /var/log/auth.log | sort | uniq -c | sort -rn | head
# 失败与越权尝试
journalctl -t sudo --since '7 days ago' | grep -Ei 'incorrect password|not in sudoers' | tail -20
# 与登录记录交叉:确认提权时该账号是否在线
last -F | head -20记录形态对照
| 记录形态 | 含义 | 判读要点 |
|---|---|---|
| 服务账号 + 交互命令 | 服务账号被当作人工账号使用 | 通常意味着凭据泄露或恶意脚本 |
| 运维账号 + 非常规工具 | 执行了与职责无关的程序 | 结合工具用途判断是否为横向或外带 |
| 短时间内多次失败 | 口令尝试 | 定位来源 IP 与目标账号,评估爆破规模 |
| 无登录记录的提权 | 会话已关闭或日志被裁剪 | 优先级最高,需从其他日志补齐上下文 |
| 目标用户为 root 的 shell | 获得交互式 root 权限 | 后续命令需审计或回放补全 |
sudo 只记录它启动的程序。COMMAND=/bin/bash 之后在其中执行的所有命令都不在这条记录里,必须靠 auditd 的执行记录或会话回放补齐。
与账号登录时间交叉是最有效的判读方法:非登录期出现 sudo 记录即可疑,若同一账号在多台主机同时出现提权记录,通常说明凭据被批量使用。