Linux服务器被入侵排查:从异常进程到后门清理的完整实操
服务器突然变慢、CPU 跑满,或者收到云厂商的安全告警,多半说明机器已经被入侵。
此时不要急着重装,先按“保留现场→定位入口→清除后门→加固验证”的顺序处理,才能避免清了又被重新控制。
本文适用于常见的 Linux 发行版(CentOS、Ubuntu、Debian 等),操作需要 root 或 sudo 权限。
以下命令只做查看,不涉及删除,建议全程记录输出,方便对比确认。
第一步:先隔离,别再让攻击者进来
发现异常后第一件事不是杀进程,而是断开攻击者继续控制的通道。
- 如果机器在云上,先登录云控制台,把安全组入方向临时收紧,只放行你自己的管理 IP。
- 不要立刻关机或重启。内存里的进程、网络连接和登录会话一旦重启就没了,排查难度会变大。
- 如果必须保留业务,优先用
iptables或云防火墙限制来源 IP,而不是直接kill掉可疑进程。
备份关键日志,防止被攻击者清空:
mkdir -p /root/incident_$(date +%F)
cp -a /var/log /root/incident_$(date +%F)/
第二步:查进程和网络连接,找可疑外联
攻击者通常会运行挖矿程序或反弹 shell,特征是占用高、有异常外联。
先看 CPU 和内存占用靠前的进程:
top -c
ps aux --sort=-%cpu | head -20
重点关注:进程名是随机字符串、路径在 /tmp、/dev/shm、/var/tmp 下,或者启动用户是 www、nobody 这类低权限账号。
查看进程对应的可执行文件,确认它到底在哪:
ls -l /proc//exe
readlink -f /proc//exe
再查网络连接,找出谁在往外连:
ss -antp
netstat -antp
如果看到某个进程持续连接陌生境外 IP 的 3333、4444、5555 等端口,基本可以判定是挖矿或远控。
第三步:从登录记录和定时任务找入口
大部分入侵通过弱口令 SSH 爆破或应用漏洞进入,登录记录能给出线索。
last -a | head -30
lastb | head -30
grep 'Accepted' /var/log/secure
grep 'Failed password' /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
Ubuntu/Debian 对应文件是 /var/log/auth.log。
如果某个 IP 有大量失败记录后突然出现成功登录,说明密码已被猜中。
接着检查定时任务,这是最常见的持久化位置:
crontab -l
ls -la /etc/cron.*
cat /etc/crontab
还要看普通用户的任务,攻击者常把后门挂在 www 用户下:
for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u $u 2>/dev/null; done
第四步:查文件与账号后门
攻击者会留下隐藏文件、SUID 提权文件和新增账号。
查找近期被修改的文件:
find / -type f -mtime -7 -not -path '/proc/*' -not -path '/sys/*' 2>/dev/null | head -50
查找隐藏的可疑目录和文件:
find / -name '.*' -type f -not -path '/proc/*' -not -path '/sys/*' 2>/dev/null | head -50
检查 SUID 文件,正常系统里数量有限,多出来的要重点看:
find / -perm -4000 -type f 2>/dev/null
核对账号,确认有没有陌生用户或 UID 为 0 的账号:
awk -F: '$3==0 {print $1}' /etc/passwd
cat /etc/passwd | grep -v nologin | grep -v false
同时检查 SSH 公钥,攻击者常写入自己的 key 实现免密登录:
cat /root/.ssh/authorized_keys
find /home -name authorized_keys -exec cat {} \;
第五步:清理、加固与验证
确认后门位置后再动手清理,顺序是先断外联、再删文件、最后加固。
- 用
kill -9结束恶意进程,再删除对应的可执行文件。 - 清空或删除被篡改的
authorized_keys、定时任务条目。 - 删除陌生账号:
userdel -r <用户名>,并检查/etc/shadow是否还有残留。
加固 SSH 是最关键的一步:
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
改完执行 systemctl restart sshd,重启前确认自己的公钥已能登录,否则会把自己锁在外面。
如果漏洞来自 Web 应用(如上传、反序列化),只清服务器不修应用,很快会被再次利用。
排查完成后,建议检查 Web 目录中的可疑 PHP/JSP 文件,并升级对应组件。
验证是否清理干净:
ss -antp | grep ESTAB
crontab -l
find /tmp /dev/shm -type f
观察 24 小时,确认没有新的异常进程和外联。
常见疑问
很多新手会问:能不能直接重装系统一了百了?
如果数据可以重建、业务能停机,重装确实最省事。
但重装前一定要先定位入口,否则新系统沿用同样的弱密码或旧应用,还是会再次中招。
还有人问:last 里没有异常登录,是不是就安全了?
不一定。
攻击者可能清空或篡改了日志,这时要以进程、网络连接和文件修改时间为准,不要只信登录记录。
总结一下,Linux 服务器被入侵排查的核心顺序是隔离、取证、定位入口、清理后门、加固验证。
每一步都留下记录,清理后持续观察外联和定时任务,才能确认攻击者没有留下第二套后门。