网站被篡改后修复必须同步处理权限与目录结构,首要排查i属性锁定,再校准php-fpm运行用户、分类型设置目录755/文件644、单独放开上传目录,最后验证并修复面板权限。

网站被篡改后,直接删文件或重装站点大概率失败——因为攻击者往往已通过权限漏洞植入持久化后门,比如把 uploads 目录设为 777、把 index.php 所有者改成 root、甚至给整个根目录加了 i 属性锁死变更。修复必须从权限和目录结构两个维度同步切入,否则修完半小时又变。
确认目录是否被 i 属性锁定
这是最常被忽略的“静默失效”原因:你执行了 chown 和 chmod,ls -l 看起来全对,但 PHP 仍报 Permission denied,Nginx 返回 403。根本不是权限数字错,是系统根本不让你改。
- 先查锁定状态:
lsattr /www/wwwroot/your-site.com,如果输出含i(如----i--------e---),就坐实了 - 必须先解锁再操作:
chattr -R -i /www/wwwroot/your-site.com - 别漏隐藏文件:
chattr -R -i /www/wwwroot/your-site.com/.user.ini /www/wwwroot/your-site.com/.htaccess - 如果还报
Operation not permitted,说明你没用 root 权限执行,或者当前用户被降权了
重置所有权时必须匹配 PHP-FPM 实际运行用户
宝塔默认用 www 用户跑 PHP-FPM,但升级或手动改过配置后,可能变成 apache、nginx 甚至 root。所有权设错,等于白修。
- 查真实运行用户:
ps aux | grep php-fpm | grep master,看 USER 列输出是什么 - 常见错误:PHP 8.4+ 默认启用更严的
open_basedir校验,即使所有者对了,若open_basedir没包含网站根目录,照样fopen(): failed to open stream - 修复命令要带
-R且指定组:chown -R www:www /www/wwwroot/your-site.com(别只写www,漏掉组会导致 session 写入失败) - 验证是否生效:
ls -ld /www/wwwroot/your-site.com+ls -l /www/wwwroot/your-site.com/index.php | head -1
权限数字不能一刀切,得按类型分治
用 chmod -R 755 /www/wwwroot/your-site.com 是高危操作:它会把所有 .php 文件也设成可执行,Nginx 可能直接下载源码而非解析;而 chmod -R 644 又会让上传目录无法写入。
- 目录统一 755:
find /www/wwwroot/your-site.com -type d -exec chmod 755 {} \; - 文件统一 644:
find /www/wwwroot/your-site.com -type f -exec chmod 644 {} \; - 但必须单独放开写入目录:
chmod -R 755 /www/wwwroot/your-site.com/uploads /www/wwwroot/your-site.com/runtime /www/wwwroot/your-site.com/cache - 特别注意:
.user.ini和.htaccess必须是 644,设成 600 会导致宝塔防跨站失效
面板自身 404 或白屏?别修网站,先救 /www/server/panel
很多用户以为网站出问题就猛修 /www/wwwroot,结果发现面板登录页空白、点设置就 404——这说明篡改已深入面板核心目录,/www/server/panel 的权限或所有权早被破坏。
- 立刻检查:
ls -ld /www/server/panel,正常应为drwxr-xr-x 1 root root - 重置所有权:
chown -R root:root /www/server/panel - 重置权限:
chmod -R 755 /www/server/panel - 关键子目录要单独放行写入:
chmod 755 /www/server/panel/data /www/server/panel/logs - 最后重启面板:
bt 1(不是重启 Nginx/Apache)
权限修复不是一次性动作,而是校准链:先解 i 锁 → 再对齐运行用户 → 然后分类型设权限 → 最后验证面板自身是否健康。任意一环断开,修复就只是表面糊一层灰。










