Linux查看过去登陆的用户信息(last和lastlog命令)

在Linux系统管理中,跟踪用户登录活动是维护系统安全、排查故障和审计用户行为的重要手段。无论是检测未授权访问、分析用户登录习惯,还是排查账号异常,都需要依赖系统记录的登录日志。Linux提供了两个核心命令——lastlastlog,用于查询用户的历史登录信息。本文将详细介绍这两个命令的原理、用法、常见场景及最佳实践,帮助系统管理员高效掌握用户登录审计技能。

目录#

  1. 引言
  2. last命令:查看历史登录会话
    • 2.1 命令原理与日志文件
    • 2.2 基本语法与常用选项
    • 2.3 实战示例与输出解析
  3. lastlog命令:查询用户最后一次登录信息
    • 3.1 命令原理与日志文件
    • 3.2 基本语法与常用选项
    • 3.3 实战示例与输出解析
  4. 常见使用场景
    • 4.1 安全审计:检测异常登录
    • 4.2 故障排查:定位登录问题
    • 4.3 用户行为分析:统计登录频率
  5. 最佳实践
    • 5.1 日志文件管理与权限
    • 5.2 结合其他工具增强分析能力
    • 5.3 隐私与合规注意事项
  6. 参考资料

last命令:查看历史登录会话#

2.1 命令原理与日志文件#

last命令用于查询系统的历史登录会话记录,其数据来源于**/var/log/wtmp**文件。这是一个二进制日志文件,记录了所有用户的登录、注销、系统启动和关机等事件。每次用户成功登录或注销,系统都会向wtmp追加一条记录。由于wtmp是二进制文件,无法直接用cat等文本工具查看,必须通过last命令解析。

注意wtmp文件会被系统日志轮转工具(如logrotate)定期归档(例如生成wtmp.1wtmp.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列:用户名(alicebob等,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 日志文件管理与权限#

  • 日志轮转wtmplastlog会随时间增长,需通过logrotate定期轮转(配置文件通常在/etc/logrotate.d/wtmp),避免磁盘空间耗尽。
  • 权限控制/var/log/wtmp/var/log/lastlog默认仅root可读取,普通用户无权限,需通过sudo执行lastlastlog

5.2 结合其他工具增强分析能力#

  • 过滤与统计:使用grepawksort等工具对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天,确保可追溯性。

参考资料#

  1. man last:Linux last命令手册。

  2. man lastlog:Linux lastlog命令手册。

  3. Linux Log Files and How to View Them(Linode文档)。

  4. Understanding /var/log/wtmp and /var/log/lastlog(Tecmint教程)。

通过本文,您已掌握lastlastlog命令的核心用法及实战技巧。合理利用这两个工具,可有效提升系统安全性和管理效率。