Skip to content
VDS · 安全

谁登录了机器:登录日志

在哪里查看成功和失败的登录、如何阅读 last、lastb 和 journalctl、如何通过 sudo 追踪操作,以及如何配置日志保留。

更新于 2026年8月23日

每次登录机器都会留下痕迹。能在五分钟内读懂这些痕迹,正是从容的事件复盘与凭空猜测之间的区别。

快速概览

last -a -n 20
lastb -a -n 20
lastlog
who
w

last 显示成功登录及其地址,lastb 显示失败尝试,lastlog 显示每个用户上次登录的时间。who 和 w 显示当前谁在机器上。

如果 lastlog 显示某个系统用户(如 www-data)有登录日期,那就是需要认真调查的重要理由。

systemd 日志

journalctl -u ssh -n 100
journalctl -u ssh --since "2026-08-20" --until "2026-08-21"
journalctl _COMM=sshd | grep "Accepted"
journalctl _COMM=sshd | grep "Failed password" | tail -50

关键行:

行含义
Accepted publickey for artem使用密钥成功登录
Accepted password for root使用密码成功登录——值得警惕
Failed password for invalid user admin暴力破解不存在的用户名,背景噪音
Disconnected from authenticating user尝试被中止

在 Debian 和 Ubuntu 上,相同事件会重复记录在 /var/log/auth.log 中;在 AlmaLinux 上则记录在 /var/log/secure 中。

grep "Accepted" /var/log/auth.log
grep -c "Failed password" /var/log/auth.log

公网地址每天出现数百次失败尝试是正常的。异常的是另一回事:来自您不认识的地址的成功登录。fail2ban 有助于应对这些噪音。

登录后做了什么

journalctl -t sudo -n 100
grep sudo /var/log/auth.log
cat /home/artem/.bash_history

命令历史并不可靠:它很容易被清除,而且在非交互式会话中不会被记录。sudo 日志要诚实得多——它由系统维护,而不是由 shell 维护。这也是文章用户与 sudo 中所述的“普通用户加 sudo”方案的另一个理由。

完整的内核级审计:

apt install -y auditd
auditctl -w /etc/passwd -p wa -k passwd_changes
ausearch -k passwd_changes

存储

默认情况下,systemd 日志可能只存在于内存中,重启后就会丢失。这对事件复盘很不利。文件 /etc/systemd/journald.conf:

[Journal]
Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=1month
systemctl restart systemd-journald
journalctl --disk-usage

大小限制是必须的:日志一旦吃满磁盘,服务就会停止。

常见错误

错误后果解决方案
日志在重启之间未保存痕迹丢失Storage=persistent
只依赖 .bash_history数据容易被伪造检查 sudo 和 auditd 日志
未限制日志大小磁盘被占满SystemMaxUse
把暴力破解噪音当成入侵误报关注 Accepted,而不是 Failed

如果您发现来自他人地址的成功登录,那么机器本身的日志就不能再被视为可靠:登录者可能已经修改过它们。请按照文章被入侵的迹象操作,并做好机器需要重装的准备。