Appearance
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)