sudo 日志回答什么
sudo 日志用于回答「谁在何时提权、执行了什么」。记录出现在两个地方:/var/log/auth.log 或 /var/log/secure 中的 sudo 行,以及 journal 中带 sudo 标记的记录。成功记录里包含 USER、TTY 与 COMMAND= 字段。
排查的重点
重点不是 sudo 用得多,而是「与该账号日常行为不符」的提权:非常规账号使用 sudo、执行与职责无关的命令、时间点与入侵吻合、TTY 显示来自远程会话。这些组合基本可以还原提权路径。
基本信息
| 记录位置 | /var/log/auth.log 或 /var/log/secure 中的 sudo 行 |
|---|---|
| journal 查询 | journalctl -t sudo 或按 _COMM=sudo 过滤 |
| 成功记录字段 | USER、TTY 与 COMMAND= |
| 失败特征 | 行内出现 incorrect password attempts |
| 核对要点 | 该账号平时是否使用 sudo,所执行命令是否属其职责 |
| 权限要求 | 读取认证日志需 root |
典型使用场景
- 还原入侵者提权之后的操作
- 确认哪个账号被用于提权
- 排查 sudoers 配置是否被改动
- 与登录日志配合还原时间线
- 复盘时说明提权路径与影响范围
查看 sudo 历史与失败
查看 sudo 历史与失败
grep -h 'sudo' /var/log/auth.log 2>/dev/null | grep -a 'COMMAND=' | tail -n 30
journalctl -t sudo --since "today" --no-pager | tail -n 30
grep -h 'incorrect password' /var/log/auth.log 2>/dev/null | tail -n 10
grep -h 'sudo' /var/log/secure 2>/dev/null | tail -n 20
zgrep -ah 'COMMAND=' /var/log/auth.log.*.gz 2>/dev/null | tail -n 20输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| USER | 发起提权的账号 | 非常规账号的提权需重点核对 |
| TTY | 会话终端 | pts 表示远程会话,tty1 为本地控制台 |
| COMMAND= | 实际执行的命令 | 出现下载、打包、改权限等命令需跟进 |
| 时间戳 | 发生时间 | 与入侵时间窗对齐是判定的关键 |
攻击者拿到 sudo 权限后常从 sudo su - 或 sudo -i 起步:TTY 为 pts、时间点与入侵吻合的记录优先追查。
只看成功记录会漏掉爆破尝试:失败记录同样说明有人试探提权,需要一并统计来源与频率。
按账号与时间窗统计
按账号与时间窗统计
journalctl -t sudo --since "2026-10-01" --until "2026-10-12" --no-pager | grep -c 'COMMAND='
awk '/sudo/ && /COMMAND=/' /var/log/auth.log | awk '{print $1" "$2}' | sort | uniq -c | tail
ausearch -m USER_CMD -ts today | tail -n 20 # 若启用了审计规则与登录记录配合
- sudo 记录要与登录记录对齐,确认提权来自哪个会话
- SSH 登录与 sudo 之间间隔过短的情况需重点核查
- 同一账号在多个终端同时提权本身就值得追问
- 提权后是否改动了 sudoers 与凭据同样要核对
判定要点
- 时间是否落入侵时间窗
- 账号是否本不该拥有 sudo 权限
- 命令是否属于该角色的管理职责
- TTY 是否来自远程会话
- 命令是否涉及凭据读取与持久化写入