last查看/var/log/wtmp中的完整登录会话历史,含时间线、重启等事件;lastlog读取/var/log/lastlog,仅显示各用户最后一次登录的快照信息,二者互补用于安全审计。

Linux 运维中审计用户登录行为,last 和 lastlog 是两个互补的核心命令:前者看“会话历史”,后者看“最后登录快照”。用对了能快速定位异常账号、排查越权访问、验证安全策略是否生效。
用 last 查看完整登录会话轨迹
last 读取 /var/log/wtmp,记录所有成功登录、注销、重启和关机事件,按时间倒序排列,适合还原操作时间线。
- 运行 last 不带参数,查看全部近期登录记录;注意识别
reboot、shutdown行,它们反映系统生命周期变化 - 加 -a 选项让 IP 地址显示在最后一列,避免被主机名解析干扰,远程审计更可靠
- 用 last -x 同时拉出关机、重启、运行级别变更,可判断是否有人刻意重启绕过监控
- 查特定用户如 root:last root;限制条数如最近 15 条:last -n 15
- 查归档日志(比如轮转后的旧记录):last -f /var/log/wtmp.1,需确认文件存在且有读权限
用 lastlog 定位账户活跃状态与沉睡风险
lastlog 读取 /var/log/lastlog,为每个 UID 记录最后一次成功登录的时间、终端和来源 IP,轻量但覆盖全用户,适合批量筛查。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 必须用 sudo lastlog 才能看到所有用户;普通用户只能看到自己那行
- 加 -t 7 只显示过去 7 天内登录过的用户,快速发现活跃账户
- 加 -b 30 筛出 30 天前最后登录的用户,便于清理长期未用的高权限账号
- 查单个用户如 www:sudo lastlog -u www,输出中
Never logged in表示该账号从未成功登录过
组合使用提升审计效率
单独看一个命令容易遗漏上下文。把两者结合,才能既见森林也见树木。
- 发现某用户 lastlog 显示“Last login: 2026-08-01”,但 last 中查不到对应记录?可能 wtmp 被清空或该登录未写入(如某些容器环境)
- last 显示大量来自陌生 IP 的 root 登录,而 lastlog 中 root 的“Latest”时间却很旧?说明 recent 登录未成功落库,或存在伪造行为
- 定期执行 sudo lastlog -t 1 | grep -v 'Never\|Port',可一键列出昨日所有真实登录用户,适合作为巡检脚本片段
注意事项与常见陷阱
这些命令依赖底层日志文件,权限、轮转、完整性都会影响结果可信度。
- wtmp 和 lastlog 文件默认仅 root 可读,普通运维账号需加 sudo;误配权限会导致信息泄露
- logrotate 默认会压缩并轮转 wtmp,但不自动清理 btmp 或 lastlog —— lastlog 文件不会自动轮转,长期运行后可能变大,但内容不会丢失
- 攻击者清除日志的第一目标就是 /var/log/wtmp 和 /var/log/btmp;建议配置 rsyslog 或 journal-remote 将关键登录事件同步到远程服务器
- last -F 显示精确到秒的时间,比默认格式更利于关联其他日志(如 /var/log/auth.log 中的 sshd 日志)










