首页/安全/取证与溯源速查/wtmp 与 last 登录历史
Linux 取证135 条

wtmp 与 last 登录历史

wtmp 以二进制记录每次登录、登出与重启,last 将其还原为时间线;-F 显示完整时间,-x 带上重启与运行级别切换。

取证与溯源速查安全更新于 2026-10-13

wtmp 与 last

wtmp 是一个二进制登录记录文件,每次登录、登出、重启、运行级别切换都会追加一条记录;last 命令把它还原成可读的登录历史。相比文本日志,它通常保留更久、更完整,且不容易被单纯改文本的方式篡改,因此常用于核对「某账号到底登录过几次、从哪来、待了多久」。与之配套的还有 utmp(记录当前在线会话,供 who 使用)和 btmp(记录失败尝试,供 lastb 使用)。

基本信息

文件/var/log/wtmp(历史)、/var/run/utmp 或 /run/utmp(当前)、/var/log/btmp(失败)
读取工具last 读 wtmp、who 读 utmp、lastb 读 btmp、utmpdump 可解码原始记录
常用选项last -F 完整时间、-a 主机名放末列、-i 显示 IP、-x 含重启与运行级别、-n 限制条数
写入者systemd-update-utmp 或登录程序,仅负责追加
权限文件通常 664 root:utmp,普通用户可读 wtmp
保留期由 logrotate 决定,各发行版差异大,需单独评估历史深度

典型使用场景

  • 核对登录次数与时长:last 的起止两行即为一次会话
  • 判断是否存在非工作时段登录或来源 IP 异常
  • 确认重启时间,作为时间线的锚点事件
  • 与 auth.log 交叉验证:文本日志缺失时 wtmp 仍可能留存
  • 识别并发登录(同一账号多个 tty 同时在线)
  • 排查失败尝试:lastb 看来源与目标账号分布

常用命令

常用命令
# 完整时间戳与来源,按时间正序不易读,按用户查看更直观
last -Fai | head -30
# 只看指定用户,定位其全部会话
last -F -n 20 root
# 重启与关机记录,可用于时间线锚点
last -x reboot; last -x shutdown
# 读取轮转后的历史文件
last -f /var/log/wtmp.1 -F | tail -20
# 失败登录尝试
lastb -a | head -20
# 直接解码原始记录(保留写入顺序,便于核对条数)
utmpdump -r < /var/log/wtmp | tail -30

last 输出逐列读法

列含义判读要点
用户名登录账号reboot/shutdown 表示系统事件;空用户名多为登出记录
终端tty 或 pts 编号pts 为远程会话;同一 tty 反复出现说明复用
来源主机/IP登录来源写 IP 说明反向解析失败;域名可能与实际不符
起止时间登录与登出时刻still logged in 表示会话仍在;持续时间可看出停留长短
(时长)会话长度极短会话(几秒)常见于自动化脚本,也可能是探测
wtmp 被清空、时间出现倒退或大量条目消失,本身就是需要记录并解释的可疑现象。发现异常时立刻对该文件做只读副本并记录哈希,不要在原文件上继续操作。
部分较新发行版默认不维护 utmp,who 输出可能为空,但这不影响 wtmp 一般仍由 systemd-update-utmp 维护。判断前先确认发行版与 systemd 单元是否启用。

易错点

  • 把 last 的输出当成完整登录史:wtmp 会被轮转与清空,超出保留期的记录已不存在
  • 看到 still logged in 就认为会话还活着,崩溃或异常断开的会话也可能没有写入登出记录
  • 只依据来源主机名判断地理位置,未解析的主机名与伪造的反向记录都会误导方向
  • 忽略 lastb 对应的是 btmp,与 wtmp 是不同文件,失败尝试要看对文件
  • 在原始文件上反复读取或写入验证命令,扰动证据完整性

数据来源与参考

  • man 1 last(util-linux)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌