/var/log/btmp 文件
lastb [选项] [用户名] [终端设备]
| 选项 | 说明 |
|---|---|
-n 数字 或 --limit 数字 |
限制显示的行数 |
-R |
不显示主机名字段 |
-a |
在最后一列显示主机名 |
-d |
显示登录IP对应的主机名 |
-i 或 --ip |
以数字形式显示IP地址 |
-f 文件 |
指定替代的日志文件 |
-t YYYYMMDDHHMMSS |
显示指定时间之前的记录 |
--since 时间 |
显示指定时间之后的记录 |
--until 时间 |
显示指定时间之前的记录 |
-w |
显示完整的用户名和主机名 |
-F |
显示完整的登录时间 |
-x |
显示系统关机、重启和运行等级变更记录 |
lastb 命令读取以下文件:
/var/log/btmp - 主要数据源,记录所有失败的登录尝试/var/log/wtmp - 成功的登录记录(last命令使用)/var/run/utmp - 当前登录用户信息重要:btmp文件默认可能不存在,需要启用失败登录记录功能
在某些系统上,需要手动启用失败登录记录功能:
# 检查btmp文件是否存在
ls -la /var/log/btmp
# 如果不存在,创建btmp文件并设置权限
sudo touch /var/log/btmp
sudo chmod 600 /var/log/btmp
sudo chown root:root /var/log/btmp
# 确保登录服务记录失败尝试
# 对于SSH,编辑/etc/ssh/sshd_config
# 确保以下设置:
# LogLevel VERBOSE
# 或
# LogLevel INFO
显示最近的失败登录记录:
sudo lastb
输出格式:
用户名 终端设备 登录IP/主机名 登录时间
root ssh:notty 203.0.113.45 Mon Mar 11 03:14:16 2024
admin ssh:notty 192.168.1.200 Mon Mar 11 02:45:22 2024
user123 ssh:notty 198.51.100.10 Sun Mar 10 23:12:35 2024
只显示最近20条失败登录记录:
sudo lastb -n 20
或者使用简写:
sudo lastb -20
使用 -i 选项以数字形式显示IP地址:
sudo lastb -i
这对于安全分析特别有用,可以更容易地识别恶意IP地址。
查看特定用户(如root)的失败登录尝试:
sudo lastb root
查看多个用户的失败登录:
sudo lastb root admin
查看今天以来的失败登录尝试:
sudo lastb --since today
查看过去48小时内的失败登录:
sudo lastb --since "2 days ago"
查看指定日期范围内的记录:
sudo lastb --since "2024-03-01" --until "2024-03-10"
统计失败登录尝试最多的IP地址:
sudo lastb -i | awk '{print $3}' | sort | uniq -c | sort -nr | head -20
统计失败登录尝试最多的用户名:
sudo lastb | awk '{print $1}' | sort | uniq -c | sort -nr | head -10
监控可疑的暴力破解攻击:
# 查看高频率的失败登录尝试
sudo lastb | head -50
# 检测针对特定账户的攻击
sudo lastb root | wc -l
sudo lastb admin | wc -l
# 监控来自特定IP的攻击
sudo lastb -i | grep "203.0.113.45" | wc -l
结合fail2ban自动封禁恶意IP:
# 检查fail2ban状态
sudo fail2ban-client status sshd
# 查看被封禁的IP
sudo fail2ban-client status sshd | grep "Banned"
# 手动封禁频繁尝试的IP
sudo fail2ban-client set sshd banip 203.0.113.45
# 查看最近被ban的IP
sudo grep "Ban" /var/log/fail2ban.log | tail -20
生成失败登录尝试的报告:
#!/bin/bash
# 生成失败登录尝试报告
REPORT_DATE=$(date +%Y-%m-%d)
REPORT_FILE="/tmp/failed_login_report_$REPORT_DATE.txt"
echo "=== 失败登录尝试报告 ($REPORT_DATE) ===" > $REPORT_FILE
echo "" >> $REPORT_FILE
echo "1. 总失败登录尝试次数:" >> $REPORT_FILE
sudo lastb | grep -v "btmp begins" | wc -l >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "2. 攻击最频繁的IP地址:" >> $REPORT_FILE
sudo lastb -i | awk '{print $3}' | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "3. 最常被攻击的用户名:" >> $REPORT_FILE
sudo lastb | awk '{print $1}' | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "报告已生成: $REPORT_FILE"
cat $REPORT_FILE
| 命令 | 功能 | 数据源 | 需要root权限 |
|---|---|---|---|
lastb |
显示失败登录尝试 | /var/log/btmp | 通常需要 |
last |
显示成功登录记录 | /var/log/wtmp | 不需要 |
lastlog |
显示每个用户最近一次登录 | /var/log/lastlog | 通常需要 |
faillog |
显示失败登录账户统计 | /var/log/faillog | 通常需要 |
journalctl _COMM=sshd |
查看SSH登录日志 | systemd日志 | 需要 |
这可能是因为:
解决方法:
# 1. 创建btmp文件
sudo touch /var/log/btmp
sudo chmod 600 /var/log/btmp
# 2. 确保SSH记录失败尝试
# 编辑/etc/ssh/sshd_config,确保:
# LogLevel VERBOSE
# 3. 重启SSH服务
sudo systemctl restart sshd
# 4. 尝试失败登录后,检查btmp文件
sudo lastb
清空失败登录记录:
# 方法1:使用truncate命令
sudo truncate -s 0 /var/log/btmp
# 方法2:删除并重新创建
sudo rm /var/log/btmp
sudo touch /var/log/btmp
sudo chmod 600 /var/log/btmp
sudo chown root:root /var/log/btmp
注意:在生产环境中,清空安全日志前应考虑法律和合规要求。
lastb:显示详细的失败登录记录,包括时间、IP地址、用户名等。
faillog:显示失败登录的统计信息,基于PAM(Pluggable Authentication Modules)系统。
示例对比:
# lastb - 显示详细的失败登录记录
sudo lastb -n 10
# faillog - 显示失败登录统计
sudo faillog -a
# 解锁被锁定的账户
sudo faillog -r -u username
综合防护措施:
/etc/ssh/sshd_config,设置PermitRootLogin no# 安装fail2ban
sudo apt-get install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # RHEL/CentOS
# 配置fail2ban监控SSH
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑jail.local,确保[sshd]部分启用