Linux用户登录日志审计异常账号
登录日志在哪里存放?
Linux 系统会把每次用户登录、登出、失败尝试都记录下来。
绝大部分发行版(CentOS、Ubuntu、Debian)的登录日志存放在以下位置:
/var/log/wtmp:记录所有用户的登录、登出信息,可用last命令读取。/var/log/btmp:记录失败的登录尝试,需要用lastb命令查看。/var/log/auth.log(Ubuntu/Debian)或/var/log/secure(CentOS/RHEL):记录详细的认证过程,包括 ssh、su、sudo 等。
重要:这些日志文件为二进制或明文格式,普通查看可能需要 root 权限。
动手查看:哪些账号在登录系统?
查看所有成功登录记录
运行 last 命令,会显示最近登录用户、登录时间、来源 IP 以及持续时长:
last
输出示例:
admin pts/0 192.168.1.100 Mon Jan 15 10:20 - 12:30 (02:10)
root pts/1 10.0.0.5 Mon Jan 15 09:00 - 09:30 (00:30)
btmp begins Mon Jan 15 08:00
如果看到陌生用户(比如 test、mysql 等非正常运维账号)频繁登录,或系统用户(如 daemon、bin)突然登录,就值得怀疑。
查看登录失败记录
失败记录往往意味着有人在暴力破解或尝试未授权账号:
lastb
常见异常特征:
- 同一 IP 大量尝试不同用户名
- 尝试不存在的用户(如
admin123、user) - 失败次数远超正常阈值
检查当前系统上的所有用户
将日志中出现的用户名与系统实际存在的用户对比:
cat /etc/passwd | grep -v /sbin/nologin | grep -v /bin/false
这条命令列出所有可以登录系统的用户。
如果日志里有但系统里没有,说明该用户已被删除;
如果日志里有且系统里有但你不认识,可能就是异常账号。
揪出异常账号的检查清单
- 列出所有 UID 为 0 的用户(普通用户不应有 root 权限)
awk -F: '$3==0{print $1}' /etc/passwd
- 检查最近一周的新增用户(可通过
last的-t参数或查看/etc/passwd的修改时间) - 对比登录来源 IP 是否在可信白名单内,可用
last -i显示 IP。 - 查看 sudo 日志:
journalctl -u sudo或grep sudo /var/log/auth.log,看是否有非授权用户执行了特权命令。 - 扫描异常定时任务:
crontab -l和/etc/crontab,看是否有恶意脚本通过异常账号执行。
容易踩的坑与避坑建议
- 日志被轮转覆盖:如果发现日志不完整,先检查
logrotate配置。审计时尽量搭配last -f /var/log/wtmp-20250101读取历史轮转文件。 - 时间不准确:异常 IP 有可能伪造系统时间,先确认服务器 NTP 同步正常:
timedatectl status。 - 权限不足:普通用户无法查看所有日志,审计时尽量用 root 或 sudo 执行命令。
- 不要只看成功登录:大量失败尝试也说明系统正被扫描,即使最终没成功也不代表安全。
如何验证审计结果?
检查完日志和用户后,建议执行一次模拟验证:
- 用异常账号尝试 ssh 登录(不真的登入,看到 failed 就行)。
- 确认
lastb能正确记录这次失败尝试。 - 对比你刚刚模拟的 IP 和用户名是否出现在日志里。
如果日志记录正常,说明审计环境有效;
如果没记录,可能日志功能被关闭或被篡改——这本身就是严重安全事件。
常见疑问解答
Q:日志里出现很多 unknown 用户怎么办?
A:这通常表示对方尝试了系统中不存在的用户名,属于正常扫描现象。但若持续出现高频率尝试,建议配置 fail2ban 或修改 ssh 端口。
Q:lastb 提示 /var/log/btmp does not exist?
A:说明没有失败记录,可以手动创建:touch /var/log/btmp(或重启一次 ssh 服务让它自动生成)。
Q:如何定期自动审计登录日志?
A:可以用 cron 每天执行一次脚本,将异常登录的 IP 和用户写入邮件或日志文件。例如:
#!/bin/bash
lastb | awk '{print $1,$3}' | sort | uniq -c | sort -rn | head -20 > /var/log/audit_today.txt
如果你正在处理 Linux 用户登录日志审计异常账号,建议先按本文步骤完整执行,再根据自己的环境做微调;遇到异常时优先回看避坑和高频问题部分。