服务器被植入挖矿进程,CPU 占用 100%
快速判断是不是挖矿进程
登录服务器后,先执行 top 或 htop 命令。如果看到一个或多个进程占用 CPU 接近 100%,且进程名类似 xmrig、minerd、sysupdate、kdevtmpfsi 等奇怪名称,基本就是中了挖矿病毒。
另一个信号是网络连接异常,用 ss -antp | grep ESTAB 或者 netstat -antp 查看,如果有大量发往陌生 IP(尤其是境外)的连接,且端口为 3333、4444、5555 等常见矿池端口,可以确定是挖矿进程。
第一步:停止进程并定位文件
先别急着 kill,因为挖矿进程通常有守护进程或者定时任务自动拉起来。
正确做法是:
- 用
top拿到挖矿进程的 PID(记下第一列的进程号)。 - 用
ls -l /proc/[PID]/exe找到可执行文件路径,比如/tmp/.X11-unix/xxx或/var/tmp/.systemd/xxxx。 - 用
cat /proc/[PID]/cmdline查看完整启动参数,方便后续清理。 - 不要直接在 top 里按 k 杀进程,先记录所有信息。
第二步:断开网络并手动清除
防止挖矿程序联网更新或传送数据,可以先临时断开外网(或关闭网卡 ifdown eth0)。
然后按顺序操作:
- 杀进程:
kill -9 [PID],如果杀不掉可能是被保护,尝试kill -9 -1批量杀,或者用pkill -9匹配进程名。 - 删除文件:根据第一步找到的路径,用
rm -rf删除整个目录。注意如果文件被占用,先重命名再重启系统(临时处理)。 - 清理计划任务:执行
crontab -l查看当前用户的定时任务,挖矿病毒常添加每分钟或每小时的任务。用crontab -e删除所有异常条目。同时检查/etc/crontab、/etc/cron.d/、/var/spool/cron/下有没有可疑文件,直接删除。 - 检查启动项:
systemctl list-unit-files | grep -E '挖矿相关服务名',如果有,先systemctl disable再systemctl stop,并删除对应的 service 文件(通常位于/etc/systemd/system/或/usr/lib/systemd/system/)。 - 如果是宝塔面板用户:在宝塔后台 -> 计划任务 -> 定时任务中检查是否有未知的 shell 脚本或执行命令,全部删除。同时到文件管理 -> 找到挖矿文件目录并删除。
第三步:排查入侵源并修复漏洞
清除完进程和文件后,一定要找到病毒是怎么进来的,否则还会被再次植入。
常见路径:
- Redis 未授权访问:检查 Redis 是否绑定在 0.0.0.0 且无密码,建议
requirepass设置强密码。 - SSH 弱口令爆破:查看
/var/log/auth.log或/var/log/secure是否有大量 failed password,更换复杂 SSH 密码或改用密钥登录。 - Webshell 上传:如果是跑网站,检查 web 目录下有无异常 .php、.jsp 文件,尤其结合近期上传记录。
- 系统组件漏洞:如 Hadoop、Elasticsearch 等未授权访问。建议更新所有软件包并关闭不必要的端口。
避坑指南与效果验证
常见陷阱:
- 挖矿进程可能有多个副本或隐藏文件,删除后依然有残余,可以用
find / -name '*.sh' -newer /etc/passwd -type f 2>/dev/null查找近期被修改的脚本文件。 - 部分病毒会修改
ld.so.preload或/etc/hosts来隐藏进程,检查/etc/hosts是否有异常条目(如把安全厂商域名指向 127.0.0.1)。 - 杀完进程后 CPU 可能短暂降低,但如果遗留了下载器或定时任务,很快又会复发。必须彻底清理计划任务和 systemd 服务。
效果验证:
- 执行
top -bn1 | grep -E '^[ ]*[0-9]+',CPU 空闲率恢复到正常(通常在 90% 以上)。 - 执行
ss -antp不再有大量陌生 IP 的 ESTAB 连接。 - 隔 5 分钟再观察一次,确认无新进程出现。
- 最后重启一次服务器,确保所有病毒相关进程无法自启动。
如果按照以上步骤操作后,CPU 依然占用 100%,说明可能还有未清理的副本或新的下载器正在运行。
这时建议使用杀毒脚本如 clamav 全盘扫描,或者直接备份重要数据后重装系统。
对于不熟悉命令行的零基础用户,推荐使用宝塔面板的“系统加固”功能或云厂商的“主机安全”服务来辅助查杀。