wtmp 与认证日志互校
wtmp 记录会话的建立与结束,认证日志记录认证过程,两者来源不同、更新方式也不同。配合使用能发现单看一份看不出的缺口:如果 wtmp 里有登录记录而认证日志没有对应的成功行,说明日志链路存在问题或者被清理过。
基本信息
| 一侧 | last -F,输出含来源主机与完整时间 |
|---|---|
| 另一侧 | auth.log 或 secure 中的 Accepted 行 |
| 对齐键 | 时间、用户名、来源地址与终端 |
| 观察点 | 两侧条数与时间是否吻合 |
| 常见差异 | 日志轮转、远端转发中断、系统时钟跳变 |
| 权限要求 | 读取 wtmp 与认证日志通常需要 root |
典型使用场景
- 交叉验证登录记录的真实性
- 发现认证日志被删改的线索
- 确认会话的结束时间
- 处理时钟跳变导致的时间错位
- 为报告提供双来源支撑的登录证据
最小示例
最小示例
last -F | head -10 # wtmp 侧记录,含来源与完整时间
grep -E 'Accepted (password|publickey)' /var/log/auth.log | tail -10
grep -c 'Accepted password' /var/log/auth.log # 认证侧成功条数
last -F | grep -c 'still logged in' # 仍在线的会话数
utmpdump /var/log/wtmp | tail -10 # 二进制原始记录
journalctl -u sshd --since today | tail -20 # journal 环境下的另一视图观察点与处理
| 观察点 | 含义 | 处理方式 |
|---|---|---|
| 时间与账号 | 两侧应对应 | 先排查时区与时钟是否一致 |
| 来源地址 | wtmp 中的来源字段 | 与认证日志来源逐条比对 |
| 条数差异 | 两侧统计不一致 | 确认轮转与日志保存位置 |
| 结束时间 | wtmp 的会话结束记录 | 缺失时用近似边界并注明 |
| still logged in | 未正常注销 | 断电或崩溃会留下这种状态 |
wtmp 有登录记录而认证日志缺失对应行时,说明日志链路存在缺口或被清理,这个差异本身就是一个重要发现。
来源字段可能为空:本地控制台登录不记录主机,比对时应改用终端字段而不是来源地址。
系统时间被调整过时两侧时间必然对不上,先确认时钟来源与调整记录,再判断是否属于证据矛盾。
不要手动编辑 wtmp 或认证日志来对齐数据:任何改动都会破坏原始性,使后续比对失去意义。