2026年11月12日
2026年11月12日
WordPress 文件权限推荐值|目录 755、文件 644、wp-config.php 的设置与所有者确认
本文是日语原文的本地化版本。 阅读日语原文
WordPress 的文件权限,基本做法是目录设为 755、文件设为 644。包含数据库连接信息的 wp-config.php,则要进一步缩小可读取的人员范围。不要只看数字,还要一并确认文件的所有者是谁、PHP 以哪个用户运行,这样既能防止信息泄露,也能避免“无法更新”。本文的推荐值,是 2026 年 11 月对照 WordPress 官方的“加固 WordPress”(Hardening WordPress)确认过的内容。
权限数字的读法
权限由“所有者、用户组、其他人”三组构成,用读取(4)、写入(2)、执行(1)的总和表示。
| 数值 | 表示 | 含义 |
|---|---|---|
| 755 | rwxr-xr-x | 所有者可以读写和进入目录,其他人只能读取和进入目录(适用于目录) |
| 644 | rw-r--r-- | 所有者可以读写,其他人只能读取(适用于文件) |
| 640 | rw-r----- | 所有者可以读写,用户组可以读取,其他人什么都做不了 |
| 600 | rw------- | 只有所有者可以读写 |
| 440 / 400 | r--r----- / r-------- | 任何人都不能写入,只有所有者(和用户组)可以读取 |
目录的“执行(x)”是进入该目录的权限。如果去掉目录的 x,目录里的文件就无法读取。
WordPress 的推荐值
| 对象 | 推荐值 | 补充 |
|---|---|---|
| 目录 | 755(在共享环境中不想让别人看到时用 750) | 即使是官方的自动更新,目录也会统一为 755 |
| 文件 | 644(同上情况下用 640) | 即使是官方的自动更新,文件也会统一为 644 |
| wp-config.php | 缩小范围,只让自己和 Web 服务器能读取 | 官方的说明是“一般为 400 或 440”。如果 PHP 以与文件所有者相同的用户运行,600 或 400 也能正常工作 |
| .htaccess | 644 | 如果要在保存固定链接设置时让 WordPress 改写它,PHP 的运行用户必须有写入权限 |
| wp-content/uploads | 目录 755、文件 644 | 所有者要设置为 PHP 运行用户可以写入的用户 |
没有必要设为 777(任何人都可以写入)。在共享服务器上,同一台服务器的其他用户可能会改写你的文件。
有些租用的虚拟主机会自行规定推荐值(因为每家服务器运行 PHP 的方式不同)。如果你所用服务器的手册中写有数值,请优先采用。
关于所有者的思路
按官方的说明,文件由你自己的用户账号所有,并让自己可以写入。只有 WordPress 需要写入的文件(uploads,以及使用主题文件编辑器时的主题等),才需要调整所有者或用户组,使 Web 服务器(PHP)的运行用户可以写入。
如果像 chown -R www-data:www-data 那样,把整体都变成 Web 服务器用户的所有物,PHP 就能改写所有文件。一旦插件的漏洞被利用,损害容易扩大,所以请先确认现状再决定。
在更新插件或核心时被要求输入“连接信息(FTP 的主机名、用户名、密码)”,多数情况下就是因为这种所有者不一致。只有当 PHP 创建的文件的所有者与 WordPress 文件的所有者相同时,WordPress 才会选择直接改写文件的方式;不同时,就会要求通过 FTP 更新。不要把权限放宽到 777,而是把所有者调整一致来解决。
确认当前的设置
通过 SSH 进入 WordPress 的目录,用下面的命令确认权限值和所有者。路径请按自己的环境调整。
cd /var/www/html
# wp-config.php 的权限值、所有者、用户组
stat -c '%a %U:%G %n' wp-config.php
# 查找其他用户可以写入的文件和目录
find . -perm -o=w ! -type l
# 查找 uploads 中的 PHP 文件(通常不应存在)
find wp-content/uploads -type f -name '*.php'
通过 Web 访问时 PHP 的运行用户,请在服务器的设置(PHP-FPM 池的 user 等)或虚拟主机的手册中确认。它不一定与 SSH 登录的用户相同。
如果 uploads 中有不认识的 PHP 文件,就要怀疑被篡改,在删除之前先记录下文件的时间和内容。
批量修正权限
在 WordPress 的目录中执行。执行前请先备份。
cd /var/www/html
# 将目录统一为 755,文件统一为 644
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
# 收紧 wp-config.php(PHP 以文件所有者身份运行的环境示例)
chmod 600 wp-config.php
wp-config.php 的值,请按环境选择如下。
- PHP 以与文件所有者相同的用户运行(许多共享虚拟主机、按用户划分的 PHP-FPM):600 或 400
- 所有者是自己的账号,Web 服务器以用户组的身份读取:设为 640 或 440,并把用户组设为 Web 服务器的用户组
# 示例:所有者为自己,用户组设为 Web 服务器(www-data),权限 640
sudo chgrp www-data wp-config.php
chmod 640 wp-config.php
设置之后,请打开站点和后台,确认能够正常显示并登录。如果出现空白页面或错误,说明 PHP 读不到 wp-config.php。请先把值改回 644,再重新检查所有者和用户组。
设为 400 或 440 后,会向 wp-config.php 写入内容的插件(例如写入缓存设置的插件)会失败。只有在设置这类插件时,才临时允许写入。
防止 wp-config.php 被通过 Web 读取
PHP 正常运行时,即使在浏览器中访问 wp-config.php,也不会显示其内容。为了防止 PHP 停止运行等情况下显示源代码,也要在 Web 服务器一侧拒绝访问。在 Apache 2.4 中,把下面的内容写入放置 WordPress 的目录中的 .htaccess(旧的 Order Deny,Allow / Deny from all 是 Apache 2.2 的写法)。
<Files "wp-config.php">
Require all denied
</Files>
详细步骤在“拒绝访问 wp-config.php 的设置”中有说明。
.htaccess 本身,Apache 的标准配置(httpd.conf 中的 <Files ".ht*">)已经拒绝了访问。
按官方的说明,也可以把 wp-config.php 移到放置 WordPress 的目录的上一级。如果同一目录下没有 wp-config.php,WordPress 会去找上一级目录。不过官方也提到,有人认为效果不大,而且做法不当反而会有危险。要移动的话,请确认上一级目录不是公开目录。
不让 uploads 执行 PHP
uploads 是 WordPress 会写入的目录,因此是攻击时容易被放置文件的地方。如果让这里不能执行 PHP,即使被放进了文件也无法运行。
在 Apache 2.4 中,创建 wp-content/uploads/.htaccess 并写入下面的内容。
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
要在 .htaccess 中使用 Require,服务器端的 AllowOverride 必须允许。如果不允许,会出现 500 错误,或者设置被忽略。写好之后,打开像 https://example.com/wp-content/uploads/test.php 这样不存在的 PHP 的 URL,确认返回 403(如果仍是 404,说明设置没有生效)。
在 Nginx 中,在 server 块内,把下面的内容放在处理 PHP 的 location ~ \.php$ 之前。因为正则表达式的 location 会从上到下依次匹配,使用最先匹配到的那个。
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
}
修改设置之后,先用 nginx -t 检查语法,再重新加载。
另外,WordPress 的媒体上传,默认不接受允许的类型(图片、PDF 等)以外的文件。通常无法在后台把 PHP 文件当作媒体上传。
注意事项
- 更改权限之前,先备份文件和数据库。
- 用 FTP 软件更改权限时,有些服务器不支持批量更改。数量多的时候,用 SSH 的
find更快,也能防止遗漏。 - 更新时被要求输入 FTP 连接信息时,不要放宽权限,而是确认所有者。也请参考“WordPress 权限错误的修复方法”。
- 定期执行上面的确认命令(其他用户可写入的文件、uploads 中的 PHP),可以更早发现设置的偏差和篡改。
关于 WordPress 有疑问?本站运营方位于日本,仅以日语回复。 联系我们(日语)