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