首页/安全/取证与溯源速查/btmp 与 lastb 失败登录记录
Linux 取证135 条

btmp 与 lastb 失败登录记录

btmp 记录失败登录尝试,lastb 读取汇总;结合来源 IP 与账号可区分扫描爆破与针对性口令猜测。

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

btmp 记录失败尝试

btmp 是与 wtmp 成对的二进制记录文件,专门记录失败的登录尝试,用 lastb 读取。每条记录包含时间、账号名、来源地址与终端类型。它的作用是给出爆破的规模与来源分布:同一个 IP 对大量不同账号尝试,通常是字典爆破;同一账号被反复尝试,更像针对性猜测。判断攻击是否得手,需要把 btmp 与 wtmp、认证日志对照起来看。

基本信息

文件/var/log/btmp(读取用 lastb)
权限通常 600 且属主 root:utmp,普通用户读不到,需 root 或加入相应组
常用命令lastb、lastb -F、lastb -a、utmpdump -r < /var/log/btmp
记录字段账号名、终端、来源地址、时间
轮转管理由 logrotate 控制,长期保留需要单独配置,部分发行版默认不创建该文件
配套来源auth.log/secure 里的 Failed password 文本记录

典型使用场景

  • 统计某时间段内的失败登录总量,评估爆破强度
  • 按来源 IP 聚合,找出主要攻击来源用于阻断
  • 按被尝试的账号聚合,判断是扫全量常见账号还是盯着特定账号
  • 与成功登录记录对照,确认是否在大量失败之后出现成功(得手信号)
  • 核对封禁措施是否生效:封禁后同一来源的失败记录应停止
  • 为报告提供量化证据:尝试次数、时间跨度与来源数量

统计来源与账号

统计来源与账号
# 最近 20 条失败尝试,带完整时间
lastb -F | head -20
# 按来源地址聚合,找出主要来源
lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head -10
# 按被尝试账号聚合,看是广撒网还是定向
lastb | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
# 轮转后的历史文件也要统计
lastb -f /var/log/btmp.1 | wc -l
# 直接解码原始记录,核对条数与写入顺序
utmpdump -r < /var/log/btmp | tail -20
# 与成功登录对照:同一时段是否有 Accepted 记录
last -Fai | head -20

lastb 输出逐列读法

列含义判读要点
账号名被尝试的登录名出现大量不存在的账号名,说明是按字典列表批量尝试
终端通常显示 ssh:notty 或 pts 编号ssh:notty 说明是 SSH 协议尝试,未分配终端
来源地址连接的来源 IP 或主机名未解析时直接写 IP,解析结果可能与实际不符
时间尝试发生时刻配合 -F 取完整时间,用于时间线与封禁核对
(无时长列)失败尝试没有持续时长与 last 输出结构不同,不要套用同一套读法
btmp 权限通常为 600 且属主 root,普通用户读不到。做统计要用 root 权限,或者临时把账号加入相应组;采集时先复制文件再分析,避免在原文件上执行写入类操作。
部分发行版默认不创建 btmp,文件缺失并不等于没有失败登录,此时要看认证日志里的 Failed password 记录。反过来,有 btmp 但认证日志被清理,说明两个来源需要交叉核对后再下结论。

易错点

  • 只看最后一次或最近若干条,忽略历史轮转文件里的高峰期,爆破规模被大幅低估
  • 把失败尝试当作唯一指标,不检查是否已有成功登录,漏掉真正得手的信号
  • btmp 文件不存在就认定无失败登录,未回查认证日志文本记录
  • 用非 root 身份执行 lastb 得到空输出,误判为「没有失败记录」
  • 忽略来源为内网地址的失败记录,横向移动时的凭据试探常来自内网

数据来源与参考

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