su 提权事件
su 切换身份时 PAM 会向 syslog 写入会话的开始与结束记录,是判断谁在何时取得 root 权限的主要来源。Debian 系写进 /var/log/auth.log,RHEL 系写进 /var/log/secure。su 成功之后执行了什么命令不在这条日志里,需要用审计或 shell 历史补齐。
基本信息
| 适用平台 | Linux(util-linux su 加 pam_unix) |
|---|---|
| 日志位置 | Debian 系 /var/log/auth.log,RHEL 系 /var/log/secure |
| 成功样例 | su[1234]: pam_unix(su:session): session opened for user root by alice(uid=1000) |
| 失败样例 | su[1234]: FAILED su for root by alice |
| sudo 样例 | alice : TTY=pts/0 ; PWD=/home/alice ; USER=root ; COMMAND=/bin/bash |
| 权限要求 | 读取需 root 或 adm、wheel 组成员 |
典型使用场景
- 判断谁取得过 root 身份、来自哪个终端
- 区分 su 与 sudo 两条提权路径的使用情况
- 与登录记录配合还原完整会话窗口
- 统计失败提权次数,识别口令爆破
- 合规审计中核对特权账号的使用记录
最小示例
最小示例
grep -E 'su\[|FAILED su' /var/log/auth.log | tail -30 # 成功与失败一并看
grep 'session opened for user root' /var/log/secure | tail -20 # RHEL 系对应文件
grep -E 'sudo:' /var/log/auth.log | tail -20 # sudo 为命令级记录
grep -c 'FAILED su' /var/log/auth.log # 统计失败次数
last -F | head -10 # 与登录来源交叉核对
journalctl --since today | grep -E 'su\[|sudo' | tail -20 # journal 环境下的兜底查询输出字段读法
| 字段 | 含义 | 异常信号 |
|---|---|---|
| by 后的账号 | 发起切换的用户 | 服务账号或禁用账号发起提权 |
| uid=1000 | 发起者的 uid | uid 与账号名对应不上 |
| TTY 字段 | 来源终端与设备 | 来自非常规 tty 或未知 pts |
| opened/closed | 会话边界 | 只有 opened 没有 closed |
| FAILED su | 认证失败记录 | 同一来源高频失败 |
| COMMAND= | sudo 执行的命令 | 直接拉起交互式 shell |
| su[PID] | 进程号,方括号内数字 | 同一 PID 反复出现说明复用异常 |
su 只留下会话边界,具体命令要看 auditd 的 EXECVE 记录,或 root 账号与目标账号的 shell 历史。
日志轮转后旧记录会进入 .1 与 .gz 文件,长时间跨度的事件统计必须把轮转文件一并纳入。
su 与 sudo 写在同一文件里但行格式不同:sudo 行以发起者账号开头,su 行以 su[PID] 开头,提取时两种模式要分别匹配,否则会互相漏掉。
在目标主机上反复执行 su 或 sudo 会持续写入日志并改变会话对象;取证期间尽量只做只读读取,必要时改用离线镜像分析。