Skip to content

last 命令:显示用户最近登录信息

1. 命令简介

last 命令是一个用于显示系统用户最近登录信息的工具。它读取 /var/log/wtmp 文件(或指定的其他文件),并显示自该文件创建以来所有用户的登录和注销记录。这个命令对于系统管理员监控系统访问、排查问题和进行安全审计非常有用。

2. 基本语法

bash
last [选项] [用户名...] [tty...]

3. 常用选项详解

  • -f file: 使用指定的文件而不是默认的 /var/log/wtmp
  • -n num, -num: 仅显示最后 num 行
  • -R: 不显示主机名字段
  • -a: 显示主机名字段在最后一列
  • -d: 对于非本地登录,显示远程主机的 IP 地址
  • -F: 显示完整的登录和注销时间戳
  • -w: 显示完整的用户名和域名
  • -x: 显示系统关机和运行级别改变

4. 基础用法示例

显示所有最近的登录信息

bash
last

显示特定用户的登录信息

bash
last username

显示最近 10 条登录记录

bash
last -n 10

5. 高级用法和技巧

显示系统重启记录

bash
last reboot

显示特定时间段的登录信息

bash
last -s "2023-01-01 00:00" -t "2023-12-31 23:59"

显示特定 Tty 的登录信息

bash
last pts/0

6. 实际应用场景

生成每日登录报告

bash
#!/bin/bash

REPORT_FILE="/var/log/daily_login_report.txt"
DATE=$(date +"%Y-%m-%d")

echo "Daily Login Report for $DATE" > $REPORT_FILE
echo "================================" >> $REPORT_FILE

# 获取今天的登录信息
last -s "00:00" -t "23:59" >> $REPORT_FILE

# 统计登录次数最多的用户
echo "" >> $REPORT_FILE
echo "Top 5 Users by Login Count:" >> $REPORT_FILE
last -s "00:00" -t "23:59" | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 5 >> $REPORT_FILE

# 发送报告邮件
mail -s "Daily Login Report $DATE" admin@example.com < $REPORT_FILE

检测可疑的登录活动

bash
#!/bin/bash

SUSPICIOUS_HOURS="22 23 00 01 02 03 04 05"
ALERT_EMAIL="admin@example.com"

suspicious_logins=$(last -s "yesterday" | while read user tty from rest; do
    login_hour=$(echo $rest | awk '{print $3}' | cut -d: -f1)
    if [[ $SUSPICIOUS_HOURS =~ $login_hour ]]; then
        echo "Suspicious login: $user on $tty from $from at $rest"
    fi
done)

if [ ! -z "$suspicious_logins" ]; then
    echo "Suspicious login activities detected:" | mail -s "Security Alert: Unusual Login Times" $ALERT_EMAIL
    echo "$suspicious_logins" | mail -s "Security Alert: Unusual Login Times" $ALERT_EMAIL
fi

7. 性能考虑

  • last 命令读取系统日志文件,对系统性能影响通常较小。
  • 在大型系统或长期运行的系统上,wtmp 文件可能会变得很大,处理可能需要一些时间。
  • 对于频繁的检查,考虑使用 -n 选项限制输出行数以提高效率。
  • 在脚本中频繁使用 last 时,可以考虑将结果缓存,以减少对日志文件的重复读取。

8. 安全注意事项

  • last 命令显示的信息包含敏感数据,如用户登录模式和时间。
  • 限制对 wtmp 文件的访问,只允许授权用户运行 last 命令。
  • 定期审查 last 命令的输出,以检测异常的登录活动。
  • 考虑使用日志轮转来管理 wtmp 文件的大小,并保留历史记录。
  • 在共享环境中使用时,注意不要泄露敏感的用户活动信息。

9. 与其他工具的集成

结合 Grep 过滤特定信息

bash
last | grep "root"

使用 Awk 进行自定义输出格式

bash
last | awk '{print $1, $3, $4, $5, $6}'

10. 故障排除

  • 如果 last 命令没有显示预期的信息,检查 /var/log/wtmp 文件的存在和权限。
  • 在某些系统中,可能需要使用 sudo 来运行 last 命令以访问 wtmp 文件。
  • 如果时间戳看起来不正确,检查系统时间和时区设置。
  • 对于远程登录信息不完整的情况,可能需要检查 sshd 配置和日志设置。

11. 相关命令

  • lastb 命令:显示失败的登录尝试
  • lastlog 命令:显示所有用户的最近登录信息
  • who 命令:显示当前登录的用户
  • w 命令:显示当前登录用户及其活动
  • aureport 命令:生成审计系统报告(如果安装了 auditd)