Linux查看系统登录日志核心是三类文件与三个命令:/var/log/wtmp(last读取,查全部成功登录)、/var/log/lastlog(lastlog读取,查各用户最后一次登录)、/var/log/btmp(lastb读取,查失败登录),配合grep解析/var/log/secure可获更详细失败信息。
Linux 查看系统登录日志,核心就三类文件 + 三个命令,别被各种“指南”绕晕——/var/log/wtmp、/var/log/btmp、/var/log/secure 是真实记录源,last、lastlog、lastb 是对应读取工具,其他命令(如 grep 直接扫 /var/log/secure)只是辅助。
last 读 /var/log/wtmp
last 默认读取 /var/log/wtmp,这个二进制文件记录所有成功登录/登出、系统启动/关机事件。它不存明文密码或完整命令,但含用户名、终端(tty/pts)、IP(远程时)、时间、持续时长。
last -n 10
admin)的全部登录历史:last admin
192.168.1.100)的登录记录:last | grep '192.168.1.100'(注意 IP 可能被截断或显示为 hostname)wtmp 不自动轮转,但系统可能配置了 logrotate;如果文件被清空或损坏,last 就返回空——这时别硬刷,先确认 ls -l /var/log/wtmp* 是否有归档备份lastlog 读 /var/log/lastlog
lastlog 读的是 /var/log/lastlog,一个按 UID 索引的二进制文件,只存每个用户「最后一次」登录的时间、端口和来源 IP。它轻量、快速,适合批量检查账户活跃度。
lastlog(需 root 权限,否则普通用户只能看到自己)john):lastlog -u john
**Never logged in**,说明该用户从未成功登录过,但不代表账户不存在或没被爆破过-t 或 -b),所谓“lastlog -t 7”是常见误解——那是 last 的参数,lastlog 不支持lastb 读 /var/log/btmp 或直接扫 /var/log/secure
lastb 读 /var/log/btmp(也是二进制),专存失败登录事件,比如密码错、用户不存在、SSH 密钥拒绝。但它默认只保留最近若干次(受文件大小和系统配置限制),且重启后不会自动清空。
lastb -n 20(-n 有效,lastb 支持)lastb | grep 'invalid user' 或 lastb | grep 'root'
grep /var/log/secure:grep "Failed password" /var/log/secure | tail -20 ——因为 /var/log/secure 是文本格式,带完整时间戳、IP、服务名(sshd/pam)、甚至错误原因,且通常被 logrotate 轮转保留多天lastb 本身不能清,得清文件:sudo truncate -s 0 /var/log/btmp(慎用!清完就真没了)last 和 lastlog 有时查不到近期登录?不是命令坏了,大概率是底层文件没更新或权限不对:
/var/log/wtmp 和 /var/log/lastlog 需要 utmp 系统调用写入,而某些精简版容器或 systemd-only 系统(无传统 init)可能禁用或未启用 utmp 记录lastlog 会提示 Permission denied,因为它需要读 /var/log/lastlog,而该文件默认权限是 600 且属主为 rootlast 输出为空?先运行 ls -l /var/log/wtmp,如果大小为 0,说明记录根本没开启;再检查 systemctl status rsyslog 是否正常运行——rsyslogd 停了,wtmp 仍可写,但 /var/log/secure 就断了真正难的不是命令怎么敲,而是理解每个文件的生命周期:wtmp 永久累积但不轮转,btmp 极易被填满后丢旧记录,secure 文本全量但依赖 rsyslog 配置。查登录行为前,先确认你要的答案在哪一层——是「最后一次」,还是「全部历史」,还是「失败痕迹」,选错源头,命令再熟也没用。