WordPress文件权限为什么重要?
Linux/Unix文件权限系统决定了谁可以读取、写入和执行文件。WordPress网站权限配置错误会导致两类问题:
权限过于宽松(如777)的风险:
– 任何在服务器上运行的进程都可以写入你的文件
– 黑客通过任何一个上传漏洞就可以写入后门PHP文件
– 大多数主机会自动扫描并暂停权限为777的网站
权限过于严格的问题:
– WordPress无法写入媒体上传目录,上传图片报错
– 插件和主题无法更新
– 缓存插件无法写入缓存文件
正确的权限配置是两者的平衡点。
标准WordPress权限值
权限数字说明
Linux权限由3组3位数字表示:
– 第一组:所有者(Owner)的权限
– 第二组:所属组(Group)的权限
– 第三组:其他用户(Others)的权限
每组权限:
– 4 = 读取(Read)
– 2 = 写入(Write)
– 1 = 执行(Execute)
所以:
– 7 = 4+2+1 = 读+写+执行
– 5 = 4+0+1 = 读+执行(不可写)
– 4 = 4+0+0 = 只读
推荐权限值
| 类型 | 推荐权限 | 说明 |
|---|---|---|
| 目录 | 755 | 所有者可读写执行,组和其他人只读执行 |
| PHP文件 | 644 | 所有者可读写,组和其他人只读 |
| wp-config.php | 600 或 640 | 更严格,只有所有者可读 |
| .htaccess | 644 | 标准文件权限 |
| wp-content/uploads/ | 755 | WordPress需要写入权限以上传文件 |
永远不要使用777权限(所有人可读写执行)。
用命令行批量修复权限
如果你的WordPress权限被攻击者或错误操作弄乱了,以下命令可以批量重置:
通过SSH修复
# 进入WordPress根目录
cd /path/to/your/wordpress
# 将所有目录权限设为755
find . -type d -exec chmod 755 {} \;
# 将所有文件权限设为644
find . -type f -exec chmod 644 {} \;
# 单独设置wp-config.php为更严格的600
chmod 600 wp-config.php
# 确保uploads目录可写(755已包含,但确认一下)
chmod 755 wp-content/uploads
# 如果uploads目录下有子目录
find wp-content/uploads -type d -exec chmod 755 {} \;
find wp-content/uploads -type f -exec chmod 644 {} \;
通过cPanel文件管理器修复
- 登录cPanel → 文件管理器
- 导航到WordPress根目录
- 选择所有文件和文件夹
- 右键 → 修改权限
- 对目录设置755,文件设置644(需要分两次操作:先选目录,再选文件)
各目录权限详细说明
WordPress根目录(/)
/index.php 644
/wp-config.php 600 (建议,也可644)
/.htaccess 644
/wp-cron.php 644
/xmlrpc.php 644 (或直接设600让它不可执行)
/wp-admin/ 目录
/wp-admin/ 755
/wp-admin/*.php 644
/wp-admin/css/ 755
/wp-admin/js/ 755
/wp-includes/ 目录
/wp-includes/ 755
/wp-includes/*.php 644
所有子目录和文件同理:目录755,文件644。
/wp-content/ 目录
/wp-content/ 755
/wp-content/themes/ 755
/wp-content/plugins/ 755
/wp-content/uploads/ 755 ← WordPress必须能写入此目录
/wp-content/cache/ 755 ← 缓存插件需要写入权限
注意: /wp-content/uploads/ 权限必须为755(所有者可写),否则图片上传会报错。一些主机要求此目录设为775或777,但这取决于服务器用户配置,应尽量避免777。
wp-config.php的特殊处理
wp-config.php 包含数据库用户名、密码等极度敏感信息,应该得到额外保护:
文件权限:
chmod 600 wp-config.php # 只有所有者可读写,其他人无法访问
通过.htaccess保护(Apache服务器):
在 .htaccess 中添加:
<Files wp-config.php>
order allow,deny
deny from all
</Files>
将wp-config.php移到网站根目录上层(高级):
WordPress支持将 wp-config.php 移到网站根目录的父目录,攻击者通过Web无法访问该目录:
/home/user/
├── wp-config.php ← 移到这里(网站根目录的上级)
└── public_html/ ← 网站根目录
└── wordpress/ ← WordPress安装目录
.htaccess的权限与保护
.htaccess 是Apache服务器的配置文件,WordPress用它实现固定链接等功能。建议:
权限:644(标准文件权限)
通过.htaccess保护.htaccess本身:
<Files .htaccess>
order allow,deny
deny from all
</Files>
检查.htaccess是否被篡改:
黑客经常在 .htaccess 中添加恶意重定向规则,被黑后务必检查内容:
# 正常的WordPress .htaccess应该只包含类似这样的内容:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
如果看到 RewriteRule .* http://other-domain.com 这类重定向,说明已被篡改。
检查当前权限是否正确
# 查看当前目录和文件权限(包含权限数字)
ls -la /path/to/wordpress/
# 查找权限为777的危险目录
find /path/to/wordpress -type d -perm 777
# 查找权限为777的危险文件
find /path/to/wordpress -type f -perm 777
# 查找权限为666的文件(所有人可写)
find /path/to/wordpress -type f -perm -o+w
不同主机环境的注意事项
共享主机:
– 通常所有用户使用相同的Web服务器用户(如 nobody 或 www-data)
– 755/644是标准配置,部分操作可能需要755(目录)或644(文件)
– 如果插件更新出错,尝试临时提升权限,更新后立即恢复
VPS/独立服务器(自建LNMP/LAMP):
– 确认PHP-FPM运行用户(通常是 www-data 或 nginx)
– WordPress文件所有者应与PHP运行用户匹配,或正确设置组权限
– 典型配置:所有者为你的FTP/SSH用户,组为web服务器组(如 www-data),使用755/644
cPanel/Plesk主机:
– 通常每个账户有独立用户,PHP以该用户身份运行
– 755/644配置直接适用,无特殊考虑
正确的文件权限是WordPress安全的基础,结合安全插件和WAF防火墙可以构建多层防护。如果权限被攻击者篡改,及时进行专业安全修复是关键。