服务器被入侵了怎么判断?Linux安全审计与入侵痕迹排查完整流程
服务器出现 CPU 异常飙高、流量异常增大、账号登录来自陌生 IP——这些信号可能意味着服务器已经被入侵。入侵检测的难点在于:攻击者通常会尽量隐藏自己的痕迹,普通的查看方式可能无法发现。本文提供一套系统的 Linux 服务器入侵排查流程,帮你在发现异常时快速判断是否被入侵,并找到入侵路径。
一、入侵的常见信号:这些情况需要警惕
- 🔴 CPU 或网络流量持续异常,但业务量没有增加
- 🔴 系统日志中出现来自陌生 IP 的登录记录
- 🔴 发现不认识的系统用户或 SSH 公钥
- 🔴 安全软件或防火墙规则被修改/删除
- 🔴 /tmp、/dev/shm 等临时目录下有可执行文件
- 🔴 收到 IDC 通知,服务器在对外发送大量流量(参与 DDoS 或发送垃圾邮件)
- 🔴 定时任务(crontab)中出现不认识的条目
二、第一步:排查异常登录记录
# 查看成功登录的历史记录
last | head -30
# 查看登录失败记录(暴力破解尝试)
sudo lastb | head -30
# 查看当前在线用户
who
w
# 查看 SSH 认证日志(关注 Accepted 表示登录成功)
sudo grep "Accepted\|Failed" /var/log/auth.log | tail -50重点关注:
- 登录时间是否在非工作时间(凌晨等)
- 登录来源 IP 是否是你熟悉的地址
- 是否有来自多个不同 IP 的短时间内大量失败尝试(暴力破解)
三、第二步:检查系统用户与 SSH 授权密钥
# 查看所有可登录的系统用户(UID 大于 1000 通常是普通用户)
awk -F: '$3 >= 1000 && $3 < 65534 {print $1, $3, $7}' /etc/passwd # 查看有 sudo 权限的用户 grep -v '^#' /etc/sudoers | grep -v '^$' sudo cat /etc/sudoers.d/* # 检查所有用户的 SSH 授权密钥(攻击者常在此添加后门公钥) for user in $(awk -F: '$3 >= 0 {print $1}' /etc/passwd); do
home=$(eval echo ~$user)
if [ -f "$home/.ssh/authorized_keys" ]; then
echo "=== $user ==="
cat "$home/.ssh/authorized_keys"
fi
done如果发现有不认识的 SSH 公钥,说明攻击者已经为自己添加了持久访问后门。
四、第三步:排查可疑进程
# 按 CPU 使用率排序,查看前15个进程
ps aux --sort=-%cpu | head -15
# 查看进程的完整可执行文件路径
ls -la /proc/$(pgrep suspicious_process)/exe 2>/dev/null
# 查找从临时目录运行的进程(高度可疑)
ps aux | awk '{print $11}' | grep -E "^/tmp|^/dev/shm|^/var/tmp"
# 列出所有进程及其可执行文件路径
for pid in /proc/[0-9]*; do
exe=$(readlink "$pid/exe" 2>/dev/null)
if [ -n "$exe" ]; then
echo "PID: ${pid##*/} → $exe"
fi
done | grep -E "/tmp|/dev/shm|/var/tmp|deleted"特别警惕进程名后显示 (deleted) 的情况——这意味着进程对应的可执行文件已被删除(攻击者常用的反取证手段)。
五、第四步:检查定时任务(持久化常用手段)
# 检查当前用户的 crontab
crontab -l
# 检查 root 的 crontab
sudo crontab -l
# 检查系统级定时任务
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
# 检查所有用户的 crontab 文件
sudo ls /var/spool/cron/crontabs/
sudo cat /var/spool/cron/crontabs/* 2>/dev/null攻击者通常通过 crontab 实现持久化——即使你杀掉了恶意进程,定时任务会定期重新启动它。
六、第五步:排查可疑文件
# 查找最近24小时内被修改的文件(排除系统正常变化目录)
sudo find / -mtime -1 -type f \
-not -path "/proc/*" \
-not -path "/sys/*" \
-not -path "/run/*" \
-not -path "/dev/*" \
2>/dev/null | head -50
# 在临时目录查找可执行文件(极度可疑)
sudo find /tmp /var/tmp /dev/shm -type f -executable 2>/dev/null
# 查找具有 SUID 权限的非系统文件(攻击者用于提权)
sudo find / -perm -4000 -type f 2>/dev/null | grep -v -E "^/(bin|sbin|usr/bin|usr/sbin|usr/lib)"
# 查找隐藏文件(以 . 开头)在不寻常位置
sudo find /tmp /var/tmp /dev/shm -name ".*" 2>/dev/null七、第六步:检查网络外联(是否在向外传输数据)
# 查看当前所有网络连接
ss -tnp
# 查找建立连接的外部 IP(过滤本地地址)
ss -tnp | grep ESTAB | grep -v "127.0.0.1\|::1"
# 使用 netstat 查看(效果类似)
netstat -tnp 2>/dev/null | grep ESTABLISHED
# 实时监控网络连接变化
watch -n 2 'ss -tnp | grep ESTAB'如果发现服务器与陌生 IP(特别是境外 IP)保持大量 ESTABLISHED 连接,需要重点调查。
# 追踪可疑 IP 的归属地
curl -s https://ipinfo.io/可疑IP/json八、第七步:检查系统关键文件是否被篡改
# 检查 /etc/passwd 和 /etc/shadow 的最后修改时间
ls -la /etc/passwd /etc/shadow /etc/sudoers
# 检查 SSH 配置是否被修改(重点看 PermitRootLogin 和 AuthorizedKeysFile)
cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"
# 使用 debsums 验证系统软件包文件完整性(Debian/Ubuntu)
sudo apt install debsums -y
sudo debsums -s 2>/dev/null | head -30
# 有输出说明对应文件被修改过九、使用 Rootkit 检测工具
chkrootkit
sudo apt install chkrootkit -y
sudo chkrootkit 2>/dev/null | grep -i "infected\|suspicious\|found"rkhunter
sudo apt install rkhunter -y
sudo rkhunter --update
sudo rkhunter --check --skip-keypress 2>/dev/null | grep -E "Warning|Found"这两个工具会检查常见的 Rootkit 特征、系统命令是否被替换、可疑的网络端口等。有告警信息需要人工判断是否为真正的威胁。
十、应急响应:确认入侵后的处置步骤
如果经过排查确认服务器已被入侵,建议按以下优先级处置:
- 隔离服务器:通过 IDC 控制台或防火墙切断服务器的入站网络连接(保留你自己的 SSH 访问),防止攻击者继续操作或数据继续外泄
- 完整取证快照:在处理之前,对服务器做一个完整快照(通过 IDC 控制台),保留证据,方便后续分析入侵路径
- 修改所有凭证:重置所有系统账号密码、SSH 密钥、数据库密码、应用 API 密钥等
- 清除后门:删除可疑文件、恶意 crontab、未授权 SSH 公钥、新增的系统用户
- 修复入侵路径:分析攻击者是如何进入的(弱密码、未打补丁的 Web 漏洞、Redis 未授权访问等),针对性修复
- 评估数据损失:检查数据库是否被拖库、重要文件是否被加密(勒索软件)
- 严重情况:重装系统:如果 Rootkit 已深度植入系统,无法确保彻底清除,最安全的做法是从干净的系统镜像重新部署,从备份恢复数据
十一、常见入侵路径与预防措施
| 入侵路径 | 预防措施 |
|---|---|
| SSH 弱密码暴力破解 | 禁用密码登录,改用 SSH 密钥认证(参考本系列第12篇) |
| Redis 未授权访问 | Redis 绑定 127.0.0.1,设置密码认证,不对公网暴露 |
| Web 应用漏洞(SQL注入/文件上传) | 及时更新 WordPress 插件、框架版本,配置 WAF |
| 过期软件包漏洞 | 定期执行 sudo apt update && sudo apt upgrade |
| 数据库弱密码 | MySQL/Redis 设置强密码,禁止远程 root 登录 |
| 供应链攻击(恶意 npm/pip 包) | 仔细审查依赖包来源,使用 lockfile 锁定版本 |
总结
Linux 服务器入侵排查遵循"由表及里"的原则:
- 🔍 异常登录 → 检查 auth.log、last 命令
- 👤 可疑用户/公钥 → 检查 /etc/passwd、authorized_keys
- ⚙️ 异常进程 → ps aux、/proc 目录分析
- ⏰ 持久化手段 → crontab、systemd service
- 📁 恶意文件 → find 命令、Rootkit 检测工具
- 🌐 网络外联 → ss -tnp 实时监控
最有效的安全策略永远是预防:购买后浪云香港云服务器后,建议立即完成 SSH 密钥配置、禁用密码登录、配置 UFW 防火墙等基础加固(参考本系列第12篇),将入侵风险降到最低。
版权声明:
作者:后浪云
链接:https://idc.net/help/442657/
文章版权归作者所有,未经允许请勿转载。
THE END
