查linux异常登录需聚焦认证日志、登录历史和当前会话三类信息,结合用户、ip、时间、行为模式交叉比对;ubuntu/debian查/var/log/auth.log,centos/rhel查/var/log/secure,注意大小写、ipv6及密钥失败提示。

查 Linux 异常登录,核心是盯住认证日志、登录历史和当前会话三类信息,再结合用户、IP、时间、行为模式交叉比对。手动排查不难,但容易漏掉关键细节,比如大小写差异、IPv6格式、密钥失败提示等。
看认证日志(/var/log/auth.log 或 /var/log/secure)
这是最直接的入口,记录了所有 ssh 登录、密码验证、sudo 操作等事件。
- 先确认系统类型:Ubuntu/Debian 查 /var/log/auth.log;CentOS/RHEL 查 /var/log/secure
- 搜失败尝试:sudo grep -i “failed password|permission denied” /var/log/auth.log —— 注意加 -i 忽略大小写,别漏掉 Permission denied (publickey)
- 搜成功登录:sudo grep “Accepted password” /var/log/auth.log | awk ‘{print $1,$2,$3,$9,$11}’ —— 提取日期、时间、用户名、源 IP,方便人工筛查
- 筛非工作时间登录:sudo awk ‘$1 ~ /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/ && $3+0 >= 22 || $3+0
用 lastb 和 faillog 统计爆破来源
lastb 读取二进制的 /var/log/btmp,结构稳定、字段统一,比纯文本日志更准;faillog 则按用户维度统计失败次数。
- 查高频攻击 IP:sudo lastb | awk ‘{print $3}’ | sort | uniq -c | sort -nr | head -10
- 查所有用户失败记录:sudo faillog -a
- 查指定用户(如 admin)失败详情:sudo faillog -u admin
- 若 lastb 无输出,先检查 sudo ls -l /var/log/btmp 是否存在且非空
核对当前在线会话与登录历史
防止攻击者已登录并维持长连接,或通过伪装终端隐藏踪迹。
- 看当前谁在连:who 或 w(简洁);loginctl list-sessions –no-legend(带 IP 和状态)
- 查完整登录轨迹:last -n 30(成功记录),重点关注 pts/0 类远程终端和陌生 IP
- 终止可疑会话:sudo loginctl terminate-session c1(c1 是 session ID)
- 检查 root 直接登录:grep “root.*pts” /var/log/auth.log | tail -10
补查隐蔽风险点
日志只是表象,得同步确认系统是否被篡改、有无后门账户或异常启动项。
- 查 SSH 配置是否放开高危项:sudo grep -E “PermitRootLogin|PasswordAuthentication|AllowUsers” /etc/ssh/sshd_config
- 找 UID 0 的账户:awk -F: ‘$3 == 0 {print $1}’ /etc/passwd,再比对这些账户是否在 auth.log 中有异常登录
- 查空密码账户:sudo awk -F: ‘length($2)==0 {print $1}’ /etc/shadow
- 扫计划任务:sudo crontab -l; sudo cat /etc/crontab; systemctl list-timers –all | grep -v “^s*$”
- 注意 IP 真实性:若服务器前有 CDN 或 WAF,auth.log 中的 IP 可能是代理节点,需结合应用层日志交叉验证