服务器挖矿定时任务彻底清除:从查看到根除完整教程
怎么确认服务器被植入了挖矿定时任务
服务器被植入挖矿程序后,最明显的特征是 CPU 或内存长时间占用过高,且网络连接异常增多。
你可以逐条检查以下位置来确认是否存在恶意定时任务:
- 运行
crontab -l查看当前用户的定时任务列表,注意里面是否包含不认识的下载、执行脚本命令,例如wget、curl到未知域名接着执行.sh文件。 - 检查系统级定时任务:
cat /etc/crontab、ls /etc/cron.d/、ls /var/spool/cron/。挖矿脚本常隐藏在这些目录中,文件名可能伪装成系统服务名称,比如sysupdate、ntpdate等。 - 查看启动脚本:
cat /etc/rc.local、ls /etc/init.d/,挖矿程序可能会通过@reboot或 init 脚本实现开机自启。
如果发现可疑命令,先不要删除,用笔记录下完整命令和路径,后续需要据此反向定位恶意文件。
第一步:紧急隔离与进程查杀
在清理定时任务之前,需要先让挖矿进程停止运行,避免一边清理一边又被重新拉起。
- 断开外网(可选但推荐):如果服务器能短暂断网,用
iptables -I INPUT 1 -j DROP和iptables -I OUTPUT 1 -j DROP暂时禁止所有网络通信,防止挖矿程序继续投毒或向外回传数据。 - 找到挖矿进程 PID:运行
top -c并按Shift+P按 CPU 排序,找到 CPU 使用率异常高的进程,记下 PID 和完整命令路径。也可以使用ps aux | grep -i miner、ps aux | grep -i xmrig等常见挖矿关键字过滤。 - 杀死进程并锁定文件:执行
kill -9 PID直接结束进程。注意:很多挖矿进程会监视自身,被杀死后立即重启,所以杀死进程只是临时手段,关键在于后面清理定时任务和脚本。
第二步:彻底清理定时任务与回弹脚本
确认进程被杀死后,迅速清理所有恶意定时任务,防止重启后再次被拉起。
- 清除当前用户定时任务:
crontab -r会清空所有定时任务;如果你只想删除特定行,可以用crontab -e手动编辑删除。 - 清除系统定时任务文件:删除
/etc/cron.d/下可疑文件(如rm -f /etc/cron.d/system_update),并编辑/etc/crontab删除恶意行。同时检查/var/spool/cron/下所有用户的定时任务文件。 - 清理启动脚本:编辑
/etc/rc.local去掉可疑启动条目;检查/etc/init.d/和/etc/systemd/system/下是否有恶意 service 文件,用systemctl disable 服务名停用并删除。
然后根据第一步记录的命令路径,使用 ls -la 找出这些恶意文件的创建时间、属主。
接着用 find / -name '可疑文件名' 2>/dev/null 查找是否有副本或备份,找到后全部删除。
第三步:清除回弹脚本与持久化文件
挖矿程序常通过隐藏目录(如 /tmp、/var/tmp、/dev/shm)存放回弹脚本。
这些脚本可能被命名为 .bashrc、a.sh、kworker(伪装成系统进程名)等。
- 切换到
/tmp和/var/tmp,执行ls -lt按时间排序,重点检查近期创建的可执行文件或.sh脚本。 - 检查
/dev/shm/(内存文件系统),挖矿程序经常利用它隐藏文件,因为重启后会自动消失,但运行期间仍会占用资源。用ls -la /dev/shm/查看,删除可疑文件。 - 检查用户目录下的隐藏文件:
ls -la ~/.*,尤其注意.bashrc、.profile、.ssh/authorized_keys是否被篡改添加了恶意命令。
删除所有可疑文件后,再到 /etc/ld.so.preload 检查是否被加载恶意库(通常为空,若不为空需谨慎处理)。
第四步:强化服务器基础防护
清理干净后,如果不做防护,服务器可能在几小时内再次被入侵。
建议执行以下操作:
- 修改所有用户密码(尤其 root 和常用管理用户),密码复杂度要包含大小写、数字和特殊字符。
- 检查 SSH 密钥:
cat ~/.ssh/authorized_keys确认只保留你本人的公钥。 - 更新系统补丁:
yum update或apt update && apt upgrade,修复已知漏洞。 - 配置防火墙:只开放必要端口(如 80、443、22 指定 IP),使用
ufw或iptables。例如ufw default deny incoming && ufw allow 22/tcp。 - 安装安全软件:考虑安装 ClamAV 或 LMD(Linux Malware Detect)进行全盘扫描查杀。
验证清理效果与常见问题
验证方法:
- 等待 10~15 分钟,再次运行
top -c,观察 CPU 是否回归正常。 - 执行
crontab -l确认定时任务已清零。 - 检查网络连接:
netstat -antp | grep ESTABLISHED,看是否还有连向陌生 IP 的持久连接。 - 重启服务器后再次检查,确认没有自动回弹。
常见问题:
- Q:清理后几小时又出现挖矿进程?
A:说明还有隐藏定时任务或守护脚本未被删除。
请重新检查 /etc/cron.d/、/var/spool/cron/ 以及 systemd 定时器(systemctl list-timers)。
- Q:误删了系统关键文件怎么办?
A:操作前最好先备份。
如果误删,尽快从备份恢复或重装对应软件包。
- Q:是否一定要重装系统?
A:如果清理后仍有残留,或关键文件已被篡改,建议备份数据后重装系统,这是最彻底的方式。
通过以上步骤,你可以彻底清除服务器挖矿定时任务,并大幅降低再次被植入的风险。
如果你在清理过程中遇到其他异常,也欢迎在评论区留言交流。