Linux查看过去登陆的用户信息(last和lastlog命令)
在Linux系统管理中,跟踪用户登录活动是维护系统安全、排查故障和审计用户行为的重要手段。无论是检测未授权访问、分析用户登录习惯,还是排查账号异常,都需要依赖系统记录的登录日志。Linux提供了两个核心命令——last和lastlog,用于查询用户的历史登录信息。本文将详细介绍这两个命令的原理、用法、常见场景及最佳实践,帮助系统管理员高效掌握用户登录审计技能。
目录#
- 引言
- last命令:查看历史登录会话
- 2.1 命令原理与日志文件
- 2.2 基本语法与常用选项
- 2.3 实战示例与输出解析
- lastlog命令:查询用户最后一次登录信息
- 3.1 命令原理与日志文件
- 3.2 基本语法与常用选项
- 3.3 实战示例与输出解析
- 常见使用场景
- 4.1 安全审计:检测异常登录
- 4.2 故障排查:定位登录问题
- 4.3 用户行为分析:统计登录频率
- 最佳实践
- 5.1 日志文件管理与权限
- 5.2 结合其他工具增强分析能力
- 5.3 隐私与合规注意事项
- 参考资料
last命令:查看历史登录会话#
2.1 命令原理与日志文件#
last命令用于查询系统的历史登录会话记录,其数据来源于**/var/log/wtmp**文件。这是一个二进制日志文件,记录了所有用户的登录、注销、系统启动和关机等事件。每次用户成功登录或注销,系统都会向wtmp追加一条记录。由于wtmp是二进制文件,无法直接用cat等文本工具查看,必须通过last命令解析。
注意:
wtmp文件会被系统日志轮转工具(如logrotate)定期归档(例如生成wtmp.1、wtmp.2.gz等),因此若需查询更早的记录,需指定归档文件。
2.2 基本语法与常用选项#
last命令的基本语法如下:
last [选项] [用户名] [终端]常用选项说明:
| 选项 | 功能描述 |
|---|---|
-n <数量> | 显示最近的<数量>条登录记录(默认显示所有记录)。 |
-u <用户> | 仅显示指定用户的登录记录。 |
-t <时间> | 显示指定时间之前的登录记录,时间格式为YYYYMMDDHHMMSS(如20240501083000)。 |
-i | 以IP地址代替主机名显示登录来源。 |
-F | 显示完整的日期和时间(精确到秒)。 |
-R | 不显示登录来源的主机名或IP。 |
-x | 显示系统关机、重启等系统事件(默认不显示)。 |
-f <文件> | 指定日志文件(默认/var/log/wtmp,可指定归档文件如/var/log/wtmp.1)。 |
2.3 实战示例与输出解析#
示例1:查看最近5条登录记录#
last -n 5输出示例:
alice pts/0 192.168.1.100 Wed May 1 09:30:15 2024 still logged in
bob pts/1 10.0.0.5 Tue Apr 30 18:45:22 2024 - Tue Apr 30 20:10:05 2024 (01:24:43)
root tty1 Mon Apr 29 08:00:00 2024 - Mon Apr 29 08:05:30 2024 (00:05:30)
reboot system boot 5.4.0-100-generic Mon Apr 29 07:59:45 2024 - Wed May 1 10:15:30 2024 (2+02:15:45)
alice pts/0 192.168.1.100 Sun Apr 28 14:20:10 2024 - Sun Apr 28 16:30:55 2024 (02:10:45)
输出字段解析:
- 第1列:用户名(
alice、bob等,reboot表示系统重启)。 - 第2列:登录终端(
pts/0表示伪终端,tty1表示本地终端)。 - 第3列:登录来源(IP地址或主机名,本地登录可能为空)。
- 第4-5列:登录时间和注销时间(
still logged in表示当前在线)。 - 最后一列:登录持续时长。
示例2:查看指定用户的登录记录(含IP)#
last -u alice -i -F输出示例:
alice pts/0 192.168.1.100 Wed May 1 09:30:15 2024 still logged in
alice pts/0 192.168.1.100 Sun Apr 28 14:20:10 2024 - Sun Apr 28 16:30:55 2024 (02:10:45)
-u alice:仅显示用户alice的记录。-i:显示IP地址(192.168.1.100)。-F:显示完整时间(精确到秒)。
示例3:查看指定时间前的登录记录#
last -t 20240430000000 # 2024年4月30日00:00:00之前的记录示例4:查看失败登录记录(/var/log/btmp)#
系统的失败登录记录保存在/var/log/btmp文件中,需通过-f选项指定:
last -f /var/log/btmp -n 3 # 最近3条失败登录记录输出示例:
root ssh:notty 203.0.113.123 Tue Apr 30 22:15:30 2024 - Tue Apr 30 22:15:30 2024 (00:00:00)
bob ssh:notty 198.51.100.45 Tue Apr 30 22:14:10 2024 - Tue Apr 30 22:14:10 2024 (00:00:00)
lastlog命令:查询用户最后一次登录信息#
3.1 命令原理与日志文件#
lastlog命令用于查询系统中每个用户的最后一次登录信息,其数据来源于**/var/log/lastlog**文件。这是一个二进制数据库文件,记录了每个用户(包括系统用户)的最后登录时间、登录终端和来源IP。与wtmp不同,lastlog不记录所有登录会话,仅保留每个用户的最新登录状态,因此查询效率极高。
3.2 基本语法与常用选项#
lastlog命令的基本语法如下:
lastlog [选项]常用选项说明:
| 选项 | 功能描述 |
|---|---|
-u <用户> | 仅显示指定用户的最后登录信息(用户名或UID)。 |
-t <天数> | 显示最近<天数>内有登录记录的用户(例如-t 30表示30天内)。 |
-b <天数> | 显示超过<天数>未登录的用户(例如-b 365表示1年未登录)。 |
-h | 显示帮助信息。 |
3.3 实战示例与输出解析#
示例1:查看所有用户的最后登录信息#
lastlog输出示例:
Username Port From Last login time
root pts/0 192.168.1.100 Wed May 1 09:30:15 +0800 2024
daemon **Never logged in**
bin **Never logged in**
sys **Never logged in**
sync **Never logged in**
games **Never logged in**
alice pts/0 192.168.1.100 Wed May 1 09:30:15 +0800 2024
bob pts/1 10.0.0.5 Tue Apr 30 18:45:22 +0800 2024
输出字段解析:
Username:用户名。Port:登录终端(如pts/0)。From:登录来源IP(本地登录可能为空)。Last login time:最后登录时间(**Never logged in**表示从未登录)。
示例2:查看指定用户的最后登录信息#
lastlog -u bob输出示例:
Username Port From Last login time
bob pts/1 10.0.0.5 Tue Apr 30 18:45:22 +0800 2024
示例3:查看30天内有登录记录的用户#
lastlog -t 30示例4:查看超过180天未登录的用户(僵尸账号清理)#
lastlog -b 180常见使用场景#
4.1 安全审计:检测异常登录#
- 场景:排查是否存在未授权用户登录或异地登录。
操作:last -i -n 20 # 查看最近20条登录记录的IP,检查是否有陌生IP last -f /var/log/btmp -n 10 # 查看最近10条失败登录,判断是否有暴力破解尝试
4.2 故障排查:定位登录问题#
- 场景:用户反馈无法登录,需确认其最近登录状态。
操作:lastlog -u username # 查看用户最后登录时间,判断是否账号被锁定或禁用 last -u username # 查看用户历史登录记录,确认是否有异常注销
4.3 用户行为分析:统计登录频率#
- 场景:统计用户
alice近一周的登录次数。
操作:last -u alice -t $(date -d "7 days ago" +%Y%m%d%H%M%S) | wc -l
最佳实践#
5.1 日志文件管理与权限#
- 日志轮转:
wtmp和lastlog会随时间增长,需通过logrotate定期轮转(配置文件通常在/etc/logrotate.d/wtmp),避免磁盘空间耗尽。 - 权限控制:
/var/log/wtmp和/var/log/lastlog默认仅root可读取,普通用户无权限,需通过sudo执行last或lastlog。
5.2 结合其他工具增强分析能力#
- 过滤与统计:使用
grep、awk、sort等工具对last输出进行二次处理,例如:last -i | grep "192.168.1." | awk '{print $1}' | sort | uniq -c # 统计192.168.1网段用户登录次数 - 归档日志查询:对于轮转后的日志(如
wtmp.1.gz),可通过zcat读取:zcat /var/log/wtmp.1.gz | last -f - # 查看压缩归档的登录记录
5.3 隐私与合规注意事项#
- 敏感信息保护:登录日志包含用户IP、登录时间等敏感信息,需限制访问权限,避免泄露。
- 合规审计:根据行业规范(如PCI-DSS),登录日志需至少保留90天,确保可追溯性。
参考资料#
-
man last:Linuxlast命令手册。 -
man lastlog:Linuxlastlog命令手册。 -
Linux Log Files and How to View Them(Linode文档)。
-
Understanding /var/log/wtmp and /var/log/lastlog(Tecmint教程)。
通过本文,您已掌握last和lastlog命令的核心用法及实战技巧。合理利用这两个工具,可有效提升系统安全性和管理效率。