Linux中的last命令主要用于查看用户最近登录系统的记录,它通过读取/var/log/wtmp文件来提供关于谁、何时、从何处登录过服务器的详细审计信息,是系统安全监控和故障排查的核心工具。
在Linux系统管理的日常工作中,我们常常需要回答这样一个问题:到底是谁在什么时间登录了我的服务器?或者更具体地说,最近有没有异常IP尝试访问?这时候,last命令就是最直接的“守门员”,它不仅仅是一个简单的日志查看器,更是系统管理员手中的放大镜,能够清晰地还原每一次登录行为的来龙去脉。
last命令的基本原理与数据源
要理解last命令的强大之处,首先得知道它背后的数据支撑,业内专家指出,last命令本身并不直接读取日志文件,而是读取二进制格式的/var/log/wtmp文件,这个文件记录了所有曾经登录过系统的用户信息,包括登录时间、持续时间、终端设备以及来源IP地址。
为什么选择wtmp文件?
与/var/log/secure或/var/log/auth.log不同,wtmp文件专门用于存储登录会话的历史记录,这意味着即使会话已经结束,记录依然保留,这种设计使得last命令能够提供一个长期的、历史性的视角,而不仅仅是当前的活跃会话。
数据读取的限制
需要注意的是,last命令读取的是二进制数据,因此它只能显示成功登录的记录,如果用户尝试登录但密码错误,这些失败尝试通常不会出现在wtmp文件中,而是记录在认证日志中,这一点对于区分正常登录和安全攻击至关重要。
last命令的常用参数与实战场景
掌握last命令的用法,关键在于灵活运用各种参数,下面我们将通过具体的场景,拆解几个最高频的使用技巧。
查看最近登录记录
默认情况下,直接运行

last命令会显示最近的登录记录,但在生产环境中,我们通常关注的是特定的用户或特定的时间段。
- 查看指定用户的登录历史:使用`last username`,`last admin`可以只显示admin用户的登录记录,这在排查特定账号的安全问题时非常有用。
- 限制显示行数:使用`-n`参数,`last -n 10`只显示最近的10条记录,当日志量巨大时,这能极大提高阅读效率。
- 显示完整的IP地址:使用`-i`参数,默认情况下,`last`可能会将IP地址解析为主机名,或者显示为`pts/0`,使用`-i`可以强制显示IP地址,便于识别来源。
分析登录持续时间
在排查资源占用或异常会话时,了解用户登录了多久至关重要。last命令输出的最后一列通常显示会话的持续时间。
- 识别长时间未退出的会话:如果看到某个会话持续时间长达数天甚至数月,这通常意味着用户忘记注销,或者存在僵尸进程,管理员应及时介入,强制断开这些会话。
- 识别异常短时会话:如果看到大量持续时间极短(如几秒)的登录记录,这可能意味着有人在尝试暴力破解密码,或者存在自动化的扫描脚本。
结合grep进行高级筛选
当last命令的输出过于庞大时,结合grep命令进行过滤是标准操作。
- 查找特定IP的登录记录:`last | grep 192.168.1.100`,这可以快速定位来自特定IP的所有登录尝试。
- 查找特定终端的登录记录:`last | grep pts/1`,这有助于分析特定SSH会话的历史。
- 查找失败后的成功登录:虽然`last`不显示失败记录,但可以通过对比`lastb`(读取`/var/log/btmp`)和`last`来推断攻击路径。
last与lastb的区别与应用对比
在Linux安全审计中,last和lastb经常成对出现,理解它们的区别,是构建完整安全视图的关键。

数据来源的不同
- last:读取`/var/log/wtmp`,记录成功登录的会话。
- lastb:读取`/var/log/btmp`,记录失败的登录尝试。
权限要求
由于btmp文件包含敏感的安全信息,普通用户通常没有权限读取,运行lastb命令通常需要root权限,相比之下,last命令对普通用户是开放的,允许他们查看自己的登录历史。
实战对比表
| 特性 | last | lastb |
|---|---|---|
| 数据源 | /var/log/wtmp | /var/log/btmp |
| 记录类型 | 成功登录 | 失败登录 |
| 权限要求 | 普通用户即可 | 通常需要root权限 |
| 主要用途 | 审计正常会话 | 检测暴力破解或扫描 |
| 用户、终端、IP、时间、持续时间 | 用户、终端、IP、时间、失败原因 |
据工信部相关安全指南建议,定期审查lastb输出是发现潜在攻击的重要手段,如果lastb中出现大量来自同一IP的失败记录,而last中几乎没有对应成功记录,这通常是一个强烈的入侵信号。
last命令的高级技巧与注意事项
除了基本用法,还有一些高级技巧可以帮助管理员更高效地使用last命令。

处理日志轮转
wtmp和btmp文件的大小是有限的,当文件达到一定大小时,系统会自动进行日志轮转,生成wtmp.1、wtmp.2等备份文件。last命令默认只读取当前的wtmp文件,如果需要查看历史归档数据,需要手动指定文件路径,例如last -f /var/log/wtmp.1。
解析主机名与IP
在某些网络配置下,last命令可能会花费大量时间解析IP地址为主机名,导致输出缓慢,使用-a参数可以禁用反向DNS查找,直接显示IP地址,从而显著提高命令执行速度,这在处理大规模日志时尤为实用。
统计登录次数
结合wc -l命令,可以快速统计特定用户的登录次数。last admin | wc -l可以显示admin用户的总登录次数,虽然这不是last的直接功能,但却是系统管理员常用的组合技。
Q&A:关于last命令的常见疑问
last命令能显示SSH密钥登录的记录吗?
能。last命令记录的是会话的建立,无论认证方式是密码还是SSH密钥,只要登录成功,就会在wtmp文件中生成一条记录,密钥登录也会在last输出中体现,显示为正常的登录会话。
如何清除last命令的历史记录?
可以通过清空/var/log/wtmp文件来清除记录,命令为sudo truncate -s 0 /var/log/wtmp,但请注意,这会永久删除所有登录历史,且无法恢复,在执行此操作前,务必确认是否真的需要删除,并考虑是否已备份重要审计数据。
last命令显示的时间是服务器时间还是用户本地时间?
last命令显示的时间是服务器的系统时间,如果服务器配置了时区,所有记录都基于该时区,在跨国团队协作中,确保服务器时区设置正确至关重要,否则可能导致时间记录混乱,增加审计难度。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/411414.html
