我在这里看了一下,但没有找到关于最佳文件权限的任何细节。我也在这里看了一些WordPress表单的问题,但任何建议777的人显然需要上一节安全课。

总之,我的问题是这样的。我应该拥有以下权限:

存储所有WordPress内容的根文件夹 wp-admin wp-content wp-includes

那每个文件夹里的所有文件呢?


当前回答

我设置权限为:

    # Set all files and directories user and group to wp-user
    chown wp-user:wp-user -R *

    # Set uploads folder user and group to www-data
    chown www-data:www-data -R wp-content/uploads/

    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} \;

    # Set all files permissions to 644
    find . -type f -exec chmod 644 {} \;

在我的例子中,我为WordPress创建了一个特定的用户,这与apache的默认用户不同,后者阻止从web访问该用户拥有的那些文件。

然后授予apache用户处理上传文件夹的权限,最后设置足够安全的文件和文件夹权限。

编辑

如果你正在使用W3C的全缓存,你应该做下面的事情:

rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced

那么它就会起作用!

编辑

在开发WordPress网站一段时间后,我建议不同的环境文件权限:

在生产中,我不会允许用户修改文件系统,我只允许他们上传资源,并允许他们访问一些插件特定的文件夹来进行备份等。但是在Git下管理项目和在服务器上使用部署键,在登台和生产中都不能很好地更新插件。我把生产文件设置留在这里:

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/

Www-data: Www-data = apache或nginx用户和组

登台应该是它的克隆,因此它将共享相同的生产权限。

最后,开发环境将有权更新插件,翻译,一切…

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin

Www-data: Www-data = apache或nginx用户和组 你的用户:root-group =当前用户和根组

这些权限将允许您在主题和您的插件文件夹下进行开发,而无需询问许可。其余的内容将由Apache或Nginx用户拥有,以允许WP管理文件系统。

在创建git repo之前,首先运行以下命令:

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

其他回答

我不能告诉你这是否正确,但我在谷歌计算应用程序引擎上使用Bitnami图像。我有插件和迁移的问题,并进一步搞砸了chmod'ing权限后,我发现这三行解决了我所有的问题。不确定这是否是正确的方法,但对我来说很有效。

sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs/
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type f -exec chmod 664 {} \;
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type d -exec chmod 775 {} \;

这实际上取决于你打算使用的插件,因为有些插件会改变wordpress的根文档。但一般来说,我推荐这样的wordpress目录。

这将分配“根”(或任何你正在使用的用户)作为每个文件/文件夹的用户,R意味着递归,所以它不会停止在“html”文件夹。如果你没有使用R,那么它只适用于“html”目录。

sudo chown -R root:www-data /var/www/html  

这将设置“wp-content”的所有者/组为“www-data”,从而允许web服务器通过管理面板安装插件。

chown -R www-data:www-data /var/www/html/wp-content

This will set the permission of every single file in "html" folder (Including files in subdirectories) to 644, so outside people can't execute any file, modify any file, group can't execute any file, modify any file and only the user is allowed to modify/read files, but still even the user can't execute any file. This is important because it prevents any kind of execution in "html" folder, also since the owner of the html folder and all other folders except the wp-content folder are "root" (or your user), the www-data can't modify any file outside of the wp-content folder, so even if there is any vulnerability in the web server, and if someone accessed to the site unauthorizedly, they can't delete the main site except the plugins.

sudo find /var/www/html -type f -exec chmod 644 {} +

这将限制具有rw-r-----这些权限的用户/组访问“wp-config.php”的权限。

chmod 640 /var/www/html/wp-config.php

如果一个插件或更新抱怨它不能更新,然后访问SSH并使用这个命令,并通过管理面板授予“www-data”(web服务器)更新/安装的临时权限,然后在完成后恢复到“根”或您的用户。

chown -R www-data /var/www/html

在Nginx中(apache的过程相同)保护wp-admin文件夹免受未经授权的访问和探测。即使你安装了nginx,也需要Apache2-utils来加密密码,如果你计划在同一个文件中添加更多用户,请省略c。

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName

现在参观这个地方

/etc/nginx/sites-available/

使用此代码保护带有密码的“wp-admin”文件夹,现在如果您试图访问“wp-admin”,它将询问密码/用户名。注意,这里你用了"。“Htpasswd”文件,包含加密后的密码。

location ^~ /wp-admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    index  index.php index.html index.htm;
}

现在重新启动nginx。

sudo /etc/init.d/nginx restart

当你设置WP时,你(web服务器)可能需要对文件进行写访问。因此,访问权限可能需要放宽。

chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--

安装完成后,您应该加强访问权限,根据加固WordPress,除了wp-content之外的所有文件都应该只能由您的用户帐户写入。Wp-content也必须可以被www-data写入。

chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content

也许稍后您想更改wp-content中的内容。在这种情况下你可以

使用su临时更改用户为www-data, 给予wp-content组写权限775,并加入www-data组或 给您的用户使用acl访问文件夹的权限。

无论你做什么,确保文件对www-data有rw权限。

对于OS X使用以下命令:

sudo chown -R www:www /www/folder_name

将所有wp文件的完全访问权限授予www-data用户(在这种情况下是web服务器用户)可能是危险的。 所以最好不要这样做:

chown www-data:www-data -R *

然而,当你安装或升级WordPress及其插件时,它会很有用。但是当你完成后,让web服务器拥有wp文件就不再是一个好主意了。

它基本上允许网络服务器在你的网站上放置或覆盖任何文件。 这意味着如果有人设法使用web服务器(或一些.php脚本中的安全漏洞)在您的网站中放置一些文件,就有可能接管您的网站。

为了保护您的网站免受此类攻击,您应该采取以下措施:

All files should be owned by your user account, and should be writable by you. Any file that needs write access from WordPress should be writable by the web server, if your hosting set up requires it, that may mean those files need to be group-owned by the user account used by the web server process. / The root WordPress directory: all files should be writable only by your user account, except .htaccess if you want WordPress to automatically generate rewrite rules for you. /wp-admin/ The WordPress administration area: all files should be writable only by your user account. /wp-includes/ The bulk of WordPress application logic: all files should be writable only by your user account. /wp-content/ User-supplied content: intended to be writable by your user account and the web server process. Within /wp-content/ you will find: /wp-content/themes/ Theme files. If you want to use the built-in theme editor, all files need to be writable by the web server process. If you do not want to use the built-in theme editor, all files can be writable only by your user account. /wp-content/plugins/ Plugin files: all files should be writable only by your user account. Other directories that may be present with /wp-content/ should be documented by whichever plugin or theme requires them. Permissions may vary.

来源及其他信息:http://codex.wordpress.org/Hardening_WordPress