了解Linux
系统中的登录历史对于每一位系统管理员来说都是非常重要的。这不仅帮助我们确认用户是否在预期的时间内成功登录,还能让我们注意到任何不寻常的行为,从而及时发现并解决可能存在的安全问题。在这篇文章里,我们将一起探索如何有效地检查和分析Linux
系统的登录历史,希望能为您的日常管理工作提供一些有用的技巧和支持。
查看系统登录历史的工具
Linux
系统提供了几种命令和工具来查看登录历史。这些工具的使用可以帮助管理员快速识别是否存在不正常的登录行为。
last
命令
last
命令用于显示系统上所有用户的登录历史,包括登录时间、持续时间、IP 地址等信息。它读取 /var/log/wtmp
文件,该文件存储了系统的所有登录和注销事件。
- 使用方法:
last
该命令将列出系统所有的登录记录,按时间倒序排列。你会看到类似如下的信息:
root pts/1 112.97.47.32 Mon Aug 19 17:14 - 17:38 (00:23)
root pts/0 112.97.47.32 Mon Aug 19 16:23 - 17:38 (01:15)
lastb
命令
lastb
命令用于查看系统上的登录失败记录。它读取 /var/log/btmp
文件,该文件记录了所有失败的登录尝试。
- 使用方法:
lastb
这会显示登录失败的尝试记录。通常,这些记录会包含用户名、IP
地址、时间以及失败的原因。如果有大量失败的登录尝试,可能需要进一步调查,确保系统的安全。
dbuser ssh:notty 174.138.12.250 Fri Mar 14 11:59 - 11:59 (00:00)
dbs ssh:notty 174.138.12.250 Fri Mar 14 11:59 - 11:59 (00:00)
dbn ssh:notty 174.138.12.250 Fri Mar 14 11:59 - 11:59 (00:00)
who
命令
who
命令可以显示当前系统登录的所有用户信息。它会列出每个用户的用户名、登录时间、终端等信息。
-
使用方法:
who
-
输出示例:
root pts/0 2025-03-24 09:57 (183.9.128.198)
root pts/1 2025-03-24 11:06 (183.9.128.198)
这显示了当前已登录的用户。虽然 who
命令不显示历史记录,但它非常适合实时监控登录的用户。
w
命令
w
命令提供有关当前登录用户的详细信息,包括他们当前正在做什么、登录时间、登录时长等。它比 who
提供了更多的实时信息。
-
使用方法:
w
-
输出示例:
11:28:23 up 102 days, 14:43, 2 users, load average: 0.21, 0.13, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 183.9.128.198 09:57 1:09m 0.02s 0.02s -bash
root pts/1 183.9.128.198 11:06 4.00s 0.02s 0.00s w
日志文件深度分析
核心日志文件定位
/var/log/auth.log (Debian/Ubuntu)
/var/log/secure(RHEL/CentOS)
/var/log/wtmp:成功登录二进制日志(由
last
解析)/var/log/btmp:失败登录二进制日志(由
lastb
解析)/var/run/utmp:当前登录记录(由
who
解析)
原始日志解析技巧
# 使用utmpdump解析二进制日志
utmpdump /var/log/wtmp | grep -v "LOGIN" # 排除系统启动记录
utmpdump /var/log/btmp | awk '/ssh/ {print $3}' | sort | uniq -c # 统计SSH暴力破解IP
# 文本日志过滤示例
grep "Failed password" /var/log/auth.log # SSH登录失败记录
grep "Accepted password" /var/log/auth.log | awk '{print $11}' | sort | uniq # 成功登录IP统计
高级检测与自动化
可疑登录特征识别
# 检测非常用IP登录
last | awk '{print $3}' | grep -E '[0-9]+.[0-9]+.[0-9]+.[0-9]+' | sort | uniq | diff - common_ips.txt
# 检测非工作时间登录(示例:22:00-06:00)
last | awk '$7 >= "22:00" || $7 < "06:00" {print}'
预存的合法IP文件
common_ips.txt
自动化监控脚本
#!/bin/bash
# 实时监控SSH登录(成功/失败)
tail -f /var/log/auth.log | awk '/sshd/{
if(/Accepted/){
print "�33[32m[SUCCESS] "$0"�33[0m"
} else if(/Failed/){
print "�33[31m[FAILURE] "$0"�33[0m"
}
}'
加强登录安全的措施
除了定期查看登录历史外,管理员还应采取一些措施来提高系统的登录安全性:
配置失败登录锁定
为了防止暴力破解攻击,可以配置系统在多次登录失败后暂时锁定账户。在 /etc/pam.d/common-auth
中,可以添加如下配置:
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600
这将使得在连续 5 次失败登录后,账户会被锁定 10 分钟。
使用SSH密钥认证
对于远程登录,使用 SSH 密钥认证比使用密码更加安全。管理员可以禁用密码登录,只允许使用 SSH 密钥来访问系统。
# 修改SSH默认端口
Port 2222
# 禁用root登录
PermitRootLogin no
# 强制密钥认证
PasswordAuthentication no
定期审计和更新密码策略
强密码和定期更新密码是保证系统安全的基本措施。管理员可以使用 chage
命令强制用户定期更改密码,并设置密码复杂度要求。
结语
检测和分析 Linux 系统的登录历史是确保系统安全的基本步骤之一。通过使用 last
、lastb
、who
和 w
等命令,管理员可以轻松查看用户的登录记录,并及时发现潜在的安全威胁。此外,结合一些安全措施,如多因素认证和 SSH 密钥认证,可以进一步提高系统的安全性,减少未经授权访问的风险。
原文始发于微信公众号(攻城狮成长日记):Linux服务器被入侵了怎么办?登录历史分析排查全攻略
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论