宝塔面板被黑?别慌,按这个步骤找回数据
发现入侵第一步:断开网络并关闭面板
当发现宝塔面板后台异常,比如文件被删除、网站打不开或莫名多出文件,第一件事不是登录面板,而是立即断开服务器外网连接。
如果你在云服务商控制台,可以直接执行关机操作;
如果无法断电,通过SSH执行以下命令:
bt stop
这条命令会关闭宝塔面板所有服务,防止攻击者继续操作。
同时,用 systemctl stop nginx 停止Web服务,systemctl stop mysql 停止数据库,减少数据写入。
切记:在数据恢复完成前,不要重启服务器或重装系统。
检查现有备份与文件状态
通过SSH连接服务器,确认 /www 目录下网站文件和数据库备份是否还在。
执行:
ls -la /www/wwwroot/
ls -la /www/backup/site/
ls -la /www/backup/database/
如果网站文件还在但被篡改,可以只恢复特定文件。
更常见的情况是网站目录被清空,此时需要依赖备份。
宝塔面板默认开启自动备份,备份文件存放在 /www/backup/site/ 和 /www/backup/database/ 目录下,按日期命名。先把备份文件复制到安全位置,避免后续操作误删:
cp -r /www/backup /root/backup_backup
从备份恢复网站与数据库
如果备份文件完整,恢复就很简单。恢复网站文件:先停止Nginx,然后将备份解压到原目录:
unzip /www/backup/site/你的网站_日期.zip -d /www/wwwroot/你的网站/
恢复数据库:使用宝塔面板自带的命令行工具或手动导入。
推荐用命令行:
mysql -u root -p 数据库名 < /www/backup/database/你的数据库_日期.sql
输入数据库root密码即可。
如果备份是.sql.gz格式,先解压:gunzip 文件名.sql.gz。
恢复完成后,启动Nginx和MySQL验证:
systemctl start nginx
systemctl start mysql
没有备份怎么办?试试数据恢复工具
如果发现备份目录也被清空,不要写入任何新数据,立即使用数据恢复工具扫描。
推荐 extundelete(针对ext文件系统)或 testdisk。
以extundelete为例:
- 安装:
yum install extundelete -y(CentOS)或apt install extundelete -y(Ubuntu)。 - 找到被删除文件的分区(通常是
/dev/vda1),执行:
extundelete /dev/vda1 --restore-directory /www/backup/site
恢复的文件会放在当前目录下的 RECOVERED_FILES 文件夹中。速度较慢且不一定100%成功,所以平时最好开启异地备份或云备份。
验证恢复效果与高频问题解答
恢复后,访问网站检查页面是否正常,连接数据库查看数据列表。
常见问题:
- 数据库无法连接:检查用户名密码是否与备份前一致,必要时重置密码。
- 网站出现白屏:多数是文件权限问题,执行
chmod -R 755 /www/wwwroot/你的网站。 - 面板依然无法登录:通过SSH执行
bt default重置面板地址和账号。
最后,修改所有密码(SSH、宝塔面板、数据库),开启安全防护插件,并检查服务器是否有后门文件(使用 find /www -name '*.php' -newer /etc/passwd 查找近期新增文件)。
如果发现可疑文件,不要直接删除,先备份再分析。