Linux lastb 命令

lastb 命令用于显示系统失败的登录尝试记录,是系统安全审计的重要工具
注意:lastb 命令通常需要 root 权限才能执行,因为它读取 /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

命令示例

示例1:查看最近的失败登录尝试

显示最近的失败登录记录:

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
示例2:限制显示行数

只显示最近20条失败登录记录:

sudo lastb -n 20

或者使用简写:

sudo lastb -20
示例3:显示IP地址而不是主机名

使用 -i 选项以数字形式显示IP地址:

sudo lastb -i

这对于安全分析特别有用,可以更容易地识别恶意IP地址。

示例4:查看特定用户的失败登录尝试

查看特定用户(如root)的失败登录尝试:

sudo lastb root

查看多个用户的失败登录:

sudo lastb root admin
示例5:查看指定时间范围内的失败登录

查看今天以来的失败登录尝试:

sudo lastb --since today

查看过去48小时内的失败登录:

sudo lastb --since "2 days ago"

查看指定日期范围内的记录:

sudo lastb --since "2024-03-01" --until "2024-03-10"
示例6:分析失败登录的统计信息

统计失败登录尝试最多的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

实际应用场景

场景1:入侵检测和安全审计

监控可疑的暴力破解攻击:

# 查看高频率的失败登录尝试
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
场景2:自动封禁恶意IP地址

结合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
场景3:生成安全报告

生成失败登录尝试的报告:

#!/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文件不存在
  2. btmp文件是空的
  3. 系统没有记录失败登录尝试

解决方法:

# 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

综合防护措施:

  1. 使用强密码策略
  2. 禁用root SSH登录:编辑/etc/ssh/sshd_config,设置PermitRootLogin no
  3. 使用SSH密钥认证:禁用密码认证
  4. 安装fail2ban:自动封禁恶意IP
  5. 更改SSH端口:减少自动化攻击
  6. 使用防火墙限制访问:只允许特定IP访问SSH
  7. 定期检查lastb日志:及时发现攻击
# 安装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]部分启用

安全建议和最佳实践

  1. 定期检查lastb日志:每天或每周审查失败登录尝试
  2. 设置日志轮转:确保btmp文件不会无限增长
  3. 监控异常模式:如大量来自同一IP的失败尝试
  4. 自动化告警:设置脚本在检测到异常时发送告警
  5. 保留日志:按照合规要求保留足够时长的安全日志
  6. 综合防御:lastb只是检测工具,应结合其他安全措施