lastb 命令 #
lastb
命令用于显示系统中失败的登录尝试记录。它读取/var/log/btmp
文件(如果存在),该文件记录了所有失败的登录尝试。这个命令对于系统安全监控和检测潜在的暴力破解攻击非常有用。
语法 #
lastb [选项] [用户名...] [tty...]
常用选项 #
选项 | 描述 |
---|---|
-a, --hostlast |
在最后一列显示主机名 |
-d, --dns |
将 IP 地址转换为主机名 |
-f, --file 文件 |
使用指定文件而不是默认的/var/log/btmp |
-F, --fulltimes |
显示完整的登录和注销时间和日期 |
-i, --ip |
显示 IP 地址而不是主机名 |
-n, --limit N |
限制显示的行数 |
-R, --nohostname |
不显示主机名字段 |
-s, --since 时间 |
显示从指定时间开始的记录 |
-t, --until 时间 |
显示到指定时间为止的记录 |
-p, --present 时间 |
显示当时在线的用户 |
-w, --fullnames |
显示完整的用户和域名 |
-x, --system |
显示系统关机和运行级别变更 |
--time-format 格式 |
显示指定格式的时间戳 |
-h, --help |
显示帮助信息 |
-V, --version |
显示版本信息 |
常见用法 #
1. 显示所有失败的登录尝试 #
lastb
输出示例:
username ssh:notty 192.168.1.100 Mon Aug 1 14:23:17 2023 - Mon Aug 1 14:23:17 2023 (00:00)
root ssh:notty 192.168.1.101 Mon Aug 1 14:20:45 2023 - Mon Aug 1 14:20:45 2023 (00:00)
admin ssh:notty 192.168.1.102 Mon Aug 1 14:15:32 2023 - Mon Aug 1 14:15:32 2023 (00:00)
2. 显示特定用户的失败登录尝试 #
lastb username
3. 限制显示的记录数 #
lastb -n 10
这将只显示最近 10 条失败的登录尝试。
4. 显示完整的时间戳 #
lastb -F
输出示例:
username ssh:notty 192.168.1.100 Mon Aug 1 14:23:17 2023 - Mon Aug 1 14:23:17 2023 (00:00)
5. 显示 IP 地址而不是主机名 #
lastb -i
6. 显示特定时间段内的记录 #
lastb -s "2023-08-01 00:00" -t "2023-08-02 00:00"
这将显示 2023 年 8 月 1 日的所有失败登录尝试。
7. 使用自定义日志文件 #
lastb -f /path/to/custom/btmp
8. 不显示主机名 #
lastb -R
9. 显示完整的用户和域名 #
lastb -w
高级用法 #
1. 结合 grep 过滤特定信息 #
# 查找特定IP地址的失败尝试
lastb | grep "192.168.1.100"
# 查找特定服务的失败尝试
lastb | grep "ssh"
2. 统计失败登录尝试次数 #
# 按用户名统计
lastb | awk '{print $1}' | sort | uniq -c | sort -nr
# 按IP地址统计
lastb | awk '{print $3}' | sort | uniq -c | sort -nr
3. 监控特定时间段内的失败尝试 #
创建一个脚本monitor_failed_logins.sh
:
#!/bin/bash
# 获取过去一小时的失败登录尝试
HOUR_AGO=$(date -d "1 hour ago" "+%Y-%m-%d %H:%M")
NOW=$(date "+%Y-%m-%d %H:%M")
echo "Failed login attempts between $HOUR_AGO and $NOW:"
lastb -s "$HOUR_AGO" -t "$NOW"
# 统计按IP地址的失败尝试
echo -e "\nFailed attempts by IP:"
lastb -s "$HOUR_AGO" -t "$NOW" | awk '{print $3}' | sort | uniq -c | sort -nr
# 统计按用户名的失败尝试
echo -e "\nFailed attempts by username:"
lastb -s "$HOUR_AGO" -t "$NOW" | awk '{print $1}' | sort | uniq -c | sort -nr
4. 与其他命令结合使用 #
# 查看失败登录尝试后的成功登录
FAILED_IP=$(lastb | grep "root" | awk '{print $3}' | head -1)
last | grep "$FAILED_IP"
5. 导出到 CSV 格式 #
lastb | awk '{print $1","$2","$3","$4" "$5" "$6" "$7" "$8}' > failed_logins.csv
安全最佳实践 #
1. 定期检查失败的登录尝试 #
创建一个 cron 作业来定期检查失败的登录尝试:
# 编辑crontab
crontab -e
# 添加以下行,每天凌晨运行
0 0 * * * lastb -s "$(date -d 'yesterday' '+\%Y-\%m-\%d 00:00')" -t "$(date '+\%Y-\%m-\%d 00:00')" | mail -s "Failed login attempts" [email protected]
2. 与入侵检测系统集成 #
lastb
命令可以与入侵检测系统(如 Fail2ban)结合使用,自动封禁多次失败登录尝试的 IP 地址。
3. 日志轮转 #
确保/var/log/btmp
文件定期轮转,以防止文件过大:
# 检查logrotate配置
cat /etc/logrotate.d/btmp
# 典型配置
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
4. 保护 btmp 文件 #
确保/var/log/btmp
文件具有适当的权限:
sudo chmod 600 /var/log/btmp
sudo chown root:utmp /var/log/btmp
相关文件 #
/var/log/btmp
:记录失败登录尝试的文件/var/log/wtmp
:记录登录和注销信息的文件(由last
命令使用)/var/log/utmp
:记录当前登录用户的文件(由who
命令使用)
与其他命令的关系 #
命令 | 描述 | 相关文件 |
---|---|---|
lastb |
显示失败的登录尝试 | /var/log/btmp |
last |
显示成功的登录记录 | /var/log/wtmp |
who |
显示当前登录的用户 | /var/run/utmp |
w |
显示当前登录的用户及其活动 | /var/run/utmp |
finger |
显示用户信息 | /var/run/utmp |
faillog |
显示失败登录的统计信息 | /var/log/faillog |
常见问题排查 #
1. 命令返回"No such file or directory" #
lastb: /var/log/btmp: No such file or directory
可能的原因:
- btmp 文件不存在
- 权限问题
解决方法:
sudo touch /var/log/btmp
sudo chmod 600 /var/log/btmp
sudo chown root:utmp /var/log/btmp
2. 命令返回"Permission denied" #
lastb: /var/log/btmp: Permission denied
解决方法:
# 使用sudo运行命令
sudo lastb
# 或修复权限
sudo chmod 600 /var/log/btmp
sudo chown root:utmp /var/log/btmp
3. 没有显示预期的记录 #
可能的原因:
- 日志已轮转
- 系统配置不记录失败的登录尝试
解决方法:
# 检查旧的日志文件
sudo lastb -f /var/log/btmp.1
# 确保PAM配置正确记录失败尝试
grep "pam_tally2" /etc/pam.d/common-auth
提示 #
- 定期检查失败的登录尝试,特别是针对特权账户(如 root)
- 将
lastb
命令与其他安全工具(如 Fail2ban)结合使用,自动响应可疑活动 - 考虑将失败登录尝试的日志发送到集中式日志服务器
- 使用
-s
和-t
选项可以更精确地分析特定时间段内的活动 - 结合
awk
、sort
和uniq
命令可以快速识别最活跃的攻击源 - 如果系统有多个用户,定期向他们提供关于账户安全的培训
- 考虑实施更强的身份验证机制,如双因素认证
- 对于关键系统,考虑禁用密码认证,仅使用密钥认证
- 使用
lastb
的输出来调整防火墙规则,阻止持续尝试的 IP 地址 - 将
lastb
命令纳入定期安全审计流程