lastb读/var/log/btmp最准,因其专为失败登录设计,不依赖日志服务、不受轮转压缩影响,且覆盖所有认证失败类型;而grep“Failed password”仅限auth.log中sshd明确记录,易漏PAM拒绝等场景。

直接看 /var/log/btmp,用 lastb 读最准——它专为失败登录设计,不依赖日志服务配置,也不受轮转或压缩影响。
为什么不能只靠 grep "Failed password" /var/log/auth.log
因为 /var/log/auth.log(或 /var/log/secure)是文本日志,容易被 logrotate 清空、压缩,甚至因 rsyslog 配置漏记某些失败类型。比如 PAM 拒绝但未触发 sshd 日志的场景,grep 就抓不到;而 lastb 能覆盖无效用户、密码错、密钥拒绝、TTY 登录失败等全部认证失败路径。
-
lastb读的是二进制/var/log/btmp,结构紧凑、字段固定,无冗余 - 它不解析主机名,避免 DNS 反查失败导致字段错位
- 输出自带时间戳、用户名、终端、IP(若可用),无需额外
awk提取
lastb 常用实操命令与参数差异
执行前必须加 sudo,因为 /var/log/btmp 默认仅 root 可读。
- 看最近 15 条:
sudo lastb -n 15 - 把 IP 显示在最后一列(防 hostname 截断):
sudo lastb -a -n 20 - 强制以数字 IP 形式显示(跳过反向 DNS):
sudo lastb -i -n 10 - 筛某 IP 的失败记录:
sudo lastb | grep '203.0.113.50'(注意 IP 可能被截断,优先用-a) - 查某用户(如
root)是否被爆破:sudo lastb | grep '^root '(开头匹配,防用户名含在其他字段里)
lastb 报 “No such file or directory” 怎么办
这不是配置错误,而是 /var/log/btmp 文件缺失或损坏。别用 touch 创建空文件——lastb 会拒绝非标准格式的二进制内容。
- 先确认是否存在:
ls -l /var/log/btmp - 若不存在,运行:
sudo truncate -s 0 /var/log/btmp && sudo chmod 600 /var/log/btmp,然后等下次失败登录自然写入 - 若存在但报错,检查 SELinux:
sestatus,若为enforcing,运行sudo restorecon -v /var/log/btmp - 别用
last -f /var/log/btmp替代——last不支持 btmp 格式,结果不可靠
识别暴力破解的关键信号
单看条目数量没意义,重点看时间密度和用户名分布。
- 1 分钟内同一 IP 出现 ≥10 条不同用户名的失败记录,基本可判定为暴力破解
- 大量
invalid user+ 少量Failed password组合,说明攻击者先试探用户名再爆破密码 - 用
sudo lastb -i -n 1000 | awk '{print $3}' | sort | uniq -c | sort -nr | head -5快速提取高频攻击 IP - 注意:hostname 不可信,IP 才是唯一稳定标识;
lastb -i是刚需
真正难的不是查到记录,而是区分“误操作”和“扫描行为”——得结合时间窗口、用户名规律、IP 地理位置(需额外查)来交叉判断,lastb 只提供原始事实层数据。


















