网站目录权限问题需分步解决:先用chown -R www:www修正/www/wwwroot/下站点目录属主,再用find设目录755、文件644,上传和缓存目录单独chmod 755,符号链接须手动处理真实路径。

宝塔面板安装后网站目录所有者变成 www:www,但 PHP 进程实际以 www 用户运行,导致写入失败
宝塔默认将网站根目录(如 /www/wwwroot/example.com)所有者设为 www:www,这本身没问题;但若你手动上传文件、用 FTP 传入、或通过 Git 拉取代码,新文件往往继承当前操作用户(比如 root 或你的 SSH 登录用户)的属主,结果就是目录里混着 root:root、www:www、甚至 nginx:nginx 的文件。PHP 脚本运行在 www 用户下,没权限修改 root 所有者的文件,典型表现是:WordPress 无法自动更新插件、Typecho 上传附件报错、Laravel storage 目录日志写不进。
用 chown -R 一次性修正所有者,但必须避开系统关键路径
别直接对整个 /www 执行 chown -R www:www /www——宝塔自身配置文件(如 /www/server/panel)、数据库数据目录(/www/server/data)都不该属于 www,否则面板可能崩溃或 MySQL 启动失败。只重置明确属于网站业务的路径:
chown -R www:www /www/wwwroot/example.com- 多个站点?用通配:
chown -R www:www /www/wwwroot/*(确保*不匹配到default或测试目录) - 如果用了宝塔的“PHP 管理”中开启的“禁用函数”,还要确认
open_basedir没把/www/wwwroot外的路径加进来,否则即使权限对了也读不到
chmod 755 和 644 要分清目录和文件,别全用 777
所有者改完还不够。目录必须有执行位(x)才能被 PHP 进入,文件则不需要。常见错误是统一 chmod -R 777 /www/wwwroot/example.com,这等于放弃安全防护,且部分 PHP 函数(如 file_put_contents)在 777 下反而因 SELinux 或某些内核策略拒绝写入。
- 设目录为
755:find /www/wwwroot/example.com -type d -exec chmod 755 {} \; - 设文件为
644:find /www/wwwroot/example.com -type f -exec chmod 644 {} \; - 特别注意:上传目录(如
wp-content/uploads)、缓存目录(runtime、storage)需额外开放写权限:chmod 755 wp-content/uploads(不是 777)
宝塔后台“文件管理”里点“权限”按钮,本质就是调用 chown + chmod,但会忽略符号链接和隐藏文件
面板界面点右键 → “权限” → 勾选“同时修改子目录和文件”,看起来省事,但它底层调用的是宝塔封装的命令,不会处理 .env、.git 这类隐藏文件,也不会递归进符号链接指向的真实路径。如果你的项目用了 ln -s /data/storage /www/wwwroot/app/storage,面板操作只会改 /www/wwwroot/app/storage 这个软链文件本身的权限,真实数据目录 /data/storage 仍保持原样,PHP 还是写不进去。
这种场景必须 ssh 登录后手动处理真实路径,且要先用 ls -la 确认符号链接指向哪——漏掉这一层,修半天权限还是报错。


















