VPS网站被挂马怎么清理?一个老运维的血泪实操教程
上个月帮朋友处理了一个被挂马的WordPress站,后台文件被篡改,首页跳转到菠菜网站,Google Search Console里全是垃圾页面。这种经历相信很多站长都遇到过——VPS被挂马,轻则排名下降,重则服务器被拉黑。今天我就把自己踩过的坑、用过的工具和方法,整理成一篇接地气的实操教程,希望能帮你少走弯路。
一、挂马后的第一件事:别慌,先断网
当发现网站异常(比如首页跳转、后台无法登录、服务器CPU飙高),第一步不是去删除文件,而是立即停止Nginx/Apache和PHP服务。切断网络访问可以防止黑客继续写入恶意代码,也能避免搜索引擎继续收录垃圾页面。
命令示例(Debian/Ubuntu):
sudo systemctl stop nginx
sudo systemctl stop php8.1-fpm
# 如果数据库也被感染,可以先停止MySQL
sudo systemctl stop mysql
避坑提醒:千万别直接rm -rf重装系统!先备份关键数据(数据库、配置文件、主题/插件源码)。黑客可能植入了后门,重装后如果恢复老备份等于白干。
二、清理挂马:从根上挖出恶意文件
1. 用find命令快速定位近期修改文件
挂马文件通常修改时间比较新,或者拥有奇怪的名字。推荐用下面命令扫描最近72小时内修改的PHP文件:
find /var/www/html -name "*.php" -newer /var/log/syslog -type f | xargs ls -la
# 或者指定最近3天
find /var/www/html -name "*.php" -mtime -3 -type f -exec ls -la {} \;
2. 检查可疑目录和隐藏文件
黑客最爱藏文件的地方:
/var/tmp/或/tmp/(通常用来放后门脚本)wp-content/uploads/(上传目录,会被塞入base64编码的恶意文件)wp-admin/includes/或wp-includes/(核心目录)~/.ssh/authorized_keys(如果被添加了公钥,黑客能直接SSH登录)
实操命令:
# 查找所有包含base64_decode、eval、system等危险函数的php文件(排除正常主题)
grep -r --include="*.php" -l "base64_decode\|eval\|system\|exec\|popen\|passthru" /var/www/html
坑点:有些正常主题也会用到base64(比如某些缓存插件),需要结合文件路径和修改时间判断。建议先用grep扫出来,然后逐个ls -la看权限和修改时间,比正常文件早的、权限为777的通常有问题。
3. 检查计划任务(cron)
黑客经常通过crontab持久化后门,定期执行恶意脚本。
# 查看当前用户的计划任务
crontab -l
# 查看系统级别的cron
ls -la /etc/cron.d/ /etc/cron.daily/ /var/spool/cron/
常见手法:每分钟执行一次wget某个恶意域名下载脚本,或者执行一个隐藏目录下的PHP文件。记得删除所有不认识的定时任务。
4. 检查数据库是否被注入了恶意内容
如果网站是WordPress或Typecho,黑客可能通过SQL注入往文章表、选项表里塞恶意JS。登录phpMyAdmin或命令行:
-- 查找包含恶意域名的文章
SELECT * FROM wp_posts WHERE post_content LIKE '%http://恶意域名%';
-- 查看wp_options表是否有异常
SELECT * FROM wp_options WHERE option_name LIKE '%evil%' OR option_value LIKE '%http://%';
避坑:有些恶意代码藏在wp_options的active_plugins字段里,对应的插件文件已经被删除,但数据库中仍记录了路径,会导致后台异常。可以手动清理不存在的插件记录。
三、清理后的防御加固(避免二次被挂马)
1. 修改所有密码
包括SSH密码、数据库密码、FTP密码、后台管理员密码。建议用pwgen 16 1生成随机密码。
# 修改SSH密码
passwd
# 修改MySQL密码
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
2. 收紧文件权限
网站根目录建议设置成755,所有PHP文件644。上传目录可以设置成755但禁止执行PHP:
# 禁止uploads目录执行PHP(Nginx配置里加)
location /uploads {
location ~ \.php$ {deny all;}
}
关键:检查是否有意外放开写入权限的目录。比如/var/www/html本身如果权限是777,任何人都能写文件,必须改成755。
3. 启用Fail2ban和Webshell查杀
安装Fail2ban防止暴力破解SSH,同时可以用find配合自定义黑名单定期扫描。另外推荐一个开源工具:Linux Malware Detect(LMD),能扫描常见后门。
# 安装LMD
wget http://www.rfxn.com/downloads/maldet-current.tar.gz
tar -xzf maldet-current.tar.gz
cd maldet-*
sudo ./install.sh
# 扫描网站目录
sudo maldet -a /var/www/html
四、为什么我推荐换用沐雨云服务器?——来自真实对比的体验
在被挂马这件事上,我踩过最深的坑是:廉价的VPS提供商根本不给你做基础安全防护。以前我用某云99元一年的机器,连系统内核都不更新,防火墙默认全开,还被旁边邻居VPS的攻击波及。后来换了沐雨云服务器,最大的感受就是:省心。
沐雨云服务器默认开启安全组策略,只开放必要端口(22、80、443),并且提供免费的基础DDoS防护。另外,他们的控制台自带一键修改SELinux和文件权限的功能,对于不懂安全的小白站长来说,相当于多了一道保险。最让我安心的是他们的快照备份——哪怕真的再次被挂马,也能15分钟内回滚到干净状态,不需要手动找后门。
当然,沐雨云不是万能的。再好的服务器,如果用户自己用弱密码、装来路不明的插件,一样会翻车。但至少他们的基础防火墙、系统镜像更新、以及对WebShell的监测能力,能让你的网站安全等级提升一个台阶。我现在三个客户网站都迁到了沐雨云,再也没有半夜爬起来删挂马的经历了。
五、最后总结:防大于治
清理挂马只是亡羊补牢,真正重要的是日常防护:
- 定期更新系统、Web服务、CMS和插件
- 关闭不必要的端口和服务
- 用云服务器自带的安全组或者iptables限制IP访问
- 每天异地备份数据库和网站文件(推荐用rsync到另一台VPS或对象存储)
如果你现在还在用没有快照、没有防火墙的廉价VPS,强烈建议考虑更换。沐雨云服务器在同等价位下提供了更完善的安全能力,至少让你睡个安稳觉。
沐雨云服务器官网:https://www.muyuyun.cn




这一切,似未曾拥有