挖矿病毒定时任务彻底查杀清理教程:从检测到根除
挖矿病毒入侵服务器后,最头疼的现象是过一会儿进程又自动跑起来,这多是因为定时任务残留。
彻底查杀挖矿病毒定时任务的核心思路是:先停进程,再查所有定时任务触发器,最后清理关联文件和权限。
本文面向零基础用户,从 SSH 登录开始,完整演示如何定位并清除所有可疑定时任务,让病毒无法复活。
登录前准备与安全备份
操作前请先确认两点:
- 使用 root 账号或拥有 sudo 权限的用户通过 SSH 登录服务器。
- 备份重要数据(例如网站文件、数据库),避免误删。
建议先执行一个快速快照(云服务器控制台通常提供),万一操作失误可以回滚。
下面所有命令基于 CentOS 7/8、Ubuntu 20.04+ 或 Debian 系统,通用性较高。
第一步:停止当前挖矿进程并锁定文件
挖矿病毒常修改自己的进程名,但可以通过 CPU 异常占用找到它:
top -c # 查看 CPU 占用最高的进程,记下 PID
找到后先用 kill -9 PID 强制终止。
然后立即使用 lsof 或 ls -la /proc/PID/exe 定位病毒文件路径,并删除主文件。
注意:如果文件正在运行,先 kill 再立刻删除。
为了防止病毒脚本通过网络下载新版本,可以临时关闭恶意 IP 的访问(通过防火墙),或者直接断网操作,但断网后不能从源排查远程定时任务。
安全做法是:删除后立刻修改 root 密码和 SSH 端口,减少再次入侵风险。
第二步:彻底检查所有定时任务来源
Linux 定时任务主要有 4 种位置,都需要逐一排查:
1. 当前用户 crontab
crontab -l # 查看当前用户的计划任务
# 如果有可疑行,用 crontab -e 编辑并删除整行,或直接执行:
crontab -r # 删除当前用户所有定时任务(谨慎,会清空)
如果系统有多个用户,用 for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null; done 批量查看所有用户的任务。
2. 系统 crontab 目录
ls -la /var/spool/cron/ # 存放各用户 crontab 文件
ls -la /etc/cron.d/ # 系统级计划任务
cat /etc/crontab # 主配置文件
cat /etc/anacrontab # anacron 定时任务
检查这些文件是否包含乱码、base64 编码或明显恶意域名(如随机字母 + .top/.xyz 等),确认后删除整行或整个文件。
3. systemd 定时器
挖矿病毒也可能注册为 systemd timer:
systemctl list-timers --all # 列出所有定时器
# 重点关注有可疑服务名的 timer,例如:
systemctl disable --now 可疑定时器名称
rm -f /etc/systemd/system/可疑定时器名称 /etc/systemd/system/可疑服务名称
systemctl daemon-reload
4. 其他隐藏位置
~/.bashrc、~/.profile、~/.bash_logout中可能嵌入反弹定时任务(如通过 at 命令)。- at 任务:
atq查看,atrm 编号删除。 - 临时目录脚本:检查
/tmp/、/var/tmp/、/dev/shm/下是否有近期修改的可执行文件或 shell 脚本。
第三步:清除关联脚本与启动项
删除定时任务后,病毒脚本还可能藏在这些位置:
/etc/init.d/、/etc/rc.d/rc.local中的启动命令。- 利用 SSH 密钥文件(
~/.ssh/authorized_keys)添加后门,检查是否有未知公钥。 /etc/ld.so.preload和动态库劫持(使用strace排查)。
建议全部完成后重启服务器一次,确认病毒不再复活。
第四步:避坑指南与效果验证
常见踩坑点
- 误删系统任务:删除
/etc/cron.d/中的sysstat、logrotate等系统自带任务,会导致日志不轮转、性能监控失效。建议确认任务所属包后再决定。简单方法:查看文件注释或执行rpm -qf /etc/cron.d/xxx(CentOS)或dpkg -S /etc/cron.d/xxx(Ubuntu)判断是否属于系统包。 - 只清理定时任务不清理脚本:病毒脚本本体仍在磁盘,下次 cron 触发时又从备份中复活。一定要找到原始脚本文件删除。
- 忘记检查其他用户:挖矿病毒可能创建新用户并将定时任务藏在
/var/spool/cron/用户名下。用awk -F: '$3>=1000{print $1}' /etc/passwd查看普通用户,逐一检查。
效果验证
# 30分钟后再次检查
crontab -l
systemctl list-timers --all
ps aux | grep -E '(minerd|xmrig|kworker|kdevtmp|sysupdate)' # 常见挖矿进程名
如果都没有,可以运行一段时间观察 CPU 占用是否正常。
常见问题解答
问:我删除 crontab 后,病毒又自动恢复了,为什么?
答:可能还有另外的定时任务(如 systemd timer)或持久化脚本在每几分钟自动写入 crontab。请按本文第二步检查所有位置。
问:执行 crontab -r 会删除所有普通计划任务吗?
答:是的,它会清空当前用户的所有 crontab。如果该用户系统有正常任务(如备份脚本),请先备份。
正确做法:手动编辑 crontab -e 删除可疑行。
问:怎么确认一个定时任务是不是挖矿病毒?
答:看任务执行的命令是否包含下载远程脚本、执行 base64 解码、运行不知名二进制文件,或访问可疑域名(如 xmr.xxx)。另外,名字可能是正常系统命令(如 systemd-boot)但内容异常。
问:杀完病毒后需要重装系统吗?
答:如果病毒篡改了内核模块、SSH 后门或 rootkit,最好重装系统。仅定时任务级别感染,按本教程清理后一般可恢复,但建议改密、更新补丁、关闭不必要的端口。
如果你在操作中遇到特殊变量或进程名难以清除,可以在安全环境下使用 chkrootkit 或 rkhunter 辅助检测,但最终清除仍以手动排查为准。