WordPress 文件权限设置指南

2.22k 字  |  8 分钟
# WordPress 文件权限设置指南与操作技巧(实用改进版)

作者:WenM(原文审阅与改进)
更新:2025-03-21

本指南基于通行安全实践审阅与改进原文内容,修正批量命令格式、细化 `wp-config.php` 权限策略,并补充上传目录与所有权设置的实操建议。

---

## 总体原则

- **最小权限原则**:仅给予运行所需的最低权限,拒绝 777。
- **文件与目录分治**:文件与目录使用不同权限(文件 644、目录 755)。
- **敏感文件更严格**:如 `wp-config.php`、`.env`、密钥文件尽量限制访问。
- **必要写入目录例外**:仅对必须写入目录(如 `wp-content/uploads/`)开放写权限。

---

## 常规权限建议

- **文件(PHP、CSS、JS、媒体)**:`644`
  - 含义:所有者可读写;组与其他用户只读。
- **目录(含 WordPress 核心与主题插件目录)**:`755`
  - 含义:所有者可读写执行;组与其他用户读与执行(执行表示可进入目录)。
- **wp-config.php**:
  - 推荐在单机常规环境(Web 与 owner 同用户):
    - `chmod 400 wp-config.php` 或 `chmod 440 wp-config.php`
  - 若 Web 进程与所有者不同用户,但同组:
    - `chown root:www-data wp-config.php && chmod 640 wp-config.php`
  - 若需更宽松(部分共享主机/特定 PHP 处理):
    - `chmod 600 wp-config.php`
  - 核心原则:确保 PHP 进程能读;其他用户不应可写或可读。

---

## 分步批量设置(安全版本)

在网站根目录(例如 `/var/www/html`)执行:

1. **设置所有权为 Web 用户**(以 Debian/Ubuntu 的 `www-data` 为例)
   ```bash
   sudo chown -R www-data:www-data /var/www/html
  • 如果希望代码所有者与 Web 用户分离,可设置为 root:www-data 或你的开发用户与 www-data 组组合。
  • 仅当你明确需要由 PHP 写入某些目录时,才将这些目录的所有者设为 www-data
  1. 目录设为 755bashfind /var/www/html -type d -exec chmod 755 {} +
    • 修正了原文将所有对象设为 755 的问题。
  2. 文件设为 644(排除 .user.ini 示例)bashfind /var/www/html -type f -not -name '.user.ini' -exec chmod 644 {} +
    • 注意 -type f.user.ini 的准确写法。
    • 如需排除更多敏感文件(例如 .env、私钥文件),可继续追加 -not -name 条件或单独处理为 600
  3. wp-config.php 更严格bashsudo chown root:www-data /var/www/html/wp-config.php sudo chmod 640 /var/www/html/wp-config.php
    • 若 Web 与 owner 同用户,可用 400/440
    • 若使用 CLI 更新需要读写(不推荐),临时提升后再恢复。
  4. 仅必要写入目录设置写权限
    • 上传目录:bashsudo chown -R www-data:www-data /var/www/html/wp-content/uploads sudo chmod -R 755 /var/www/html/wp-content/uploads
      • 如果站点有插件需要创建/写入子目录或缓存文件,确保这些目录的所有权/权限允许写入。
      • 在某些环境,可用 775 并保证 Web 用户与维护用户在同组,从而便于协作。
  5. 可选:主题/插件缓存目录(按需)
    • 例如某些缓存插件目录:bashsudo chown -R www-data:www-data /var/www/html/wp-content/cache sudo chmod -R 755 /var/www/html/wp-content/cache
    • 不要对全站启用写权限,严格限定范围。

特殊环境注意事项

  • 共享主机:用户组可能共享,需更严格(避免组可写)。尽量使用 640600 给敏感文件。
  • SELinux/AppArmor:权限正确但仍无法读写时,检查安全上下文策略。
  • 版本控制目录:将 .git/ 等目录禁止 Web 访问(通过 Web 服务器规则),并限制权限为仅所有者可读写。
  • 执行位的误用:不要让普通文件变为可执行(避免把文件统一设 755)。
  • 定期审计:使用安全插件或脚本定期扫描异常权限;升级/部署后重新审计。

常见误区与修正示例

  • 误区:chmod -R 755 *(把所有对象设为可执行)
    • 修正:分别对目录与文件处理(find -type d 755 / find -type f 644)。
  • 误区:find . - type f ...(命令有空格错误)
    • 修正:find . -type f ...
  • 误区:只改权限不改所有权
    • 修正:确保 chown 正确指向 Web 用户/组,避免实际写入失败或权限过宽。

最后核查清单

  • 所有目录为 755,所有文件为 644(除敏感文件)。
  • wp-config.php400/440/640/600(根据 Web 用户与组关系选择)。
  • wp-content/uploads/ 等必须写入目录可写(755/775 + 合理所有权)。
  • 777;无普通文件的执行(x)位。
  • Web 用户/组设置正确(chown 已按需完成)。
  • 敏感文件(如 .env、密钥)额外加固(建议 600)。

评论(没有评论)

谢谢你请我喝咖啡~

扫码打赏,支持一下