正确的WordPress文件权限

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

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

  1. 存储所有WordPress内容的根文件夹
  2. wp-admin
  3. wp-content
  4. wp-includes

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

812526 次浏览

当你设置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权限。

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

chown www-data:www-data -R *

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

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

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

所有文件都应该由你的用户帐户拥有,并且应该是可写的 由你。任何需要从WordPress写访问的文件都应该是 可由web服务器写入,如果你的主机设置需要它,那 可能意味着这些文件需要由所使用的用户帐户组拥有

. web服务器进程

/

WordPress根目录:所有文件都应该只能由你的用户帐户写,除了。htaccess如果你想要WordPress写 自动为您生成重写规则

/wp-admin/

WordPress管理区域:所有文件只能由你的用户帐户写入。

/wp-includes/

WordPress应用程序逻辑的主体:所有文件都应该只能由你的用户帐户写。

/wp-content/

用户提供的内容:旨在由您的用户帐户和web服务器进程写入。

/wp-content/中,你会发现:

/wp-content/themes/

< p >主题的文件。如果你想使用内置的主题编辑器,所有的文件都需要由web服务器进程可写。如果你没有 要使用内置的主题编辑器,所有文件都只能写 由您的用户帐户。< / p >

/wp-content/plugins/

插件文件:所有的文件应该只能由您的用户帐户写入。

其他可能以/wp-content/出现的目录应该是 由任何需要它们的插件或主题记录。权限可能 不同。< / p >

来源和附加信息:http://codex.wordpress.org/Hardening_WordPress

对于那些在主文件夹下有wordpress根文件夹的用户:

* * Ubuntu / apache

  1. 将您的用户添加到www-data组:

信贷赋予www-data组写权限

你想在你的用户上调用usermod。那就是:

sudo usermod -aG www-data yourUserName

**假设www-data组存在

  1. 检查你的用户是否在www-data组:

    groups yourUserName < / p >

你应该得到这样的东西:

youUserName : youUserGroupName www-data

** youUserGroupName通常与您的用户名类似

  1. 递归地改变wp-content文件夹的组所有权,保持用户所有权

    chown yourUserName:www-data -R youWebSiteFolder/wp-content/* < / p >

  2. 修改目录为youWebSiteFolder/wp-content/

    cd youWebSiteFolder/wp-content < / p >

  3. 递归更改文件夹和子文件夹的组权限以启用写权限:

    find . -type d -exec chmod -R 775 {} \; < / p >

/home/yourUserName/youWebSiteFolder/wp-content/的模式从0755 (rwxr-xr-x)更改为0775 (rwxrwxr-x)

  1. 递归更改文件和子文件的组权限以启用写权限:

    find . -type f -exec chmod -R 664 {} \; < / p >

结果应该如下所示:

WAS:
-rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
CHANGED TO:
-rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html

等价于:

chmod -R ug+rw文件夹名

文件的权限是664,目录的权限是775。

< p >注。如果任何人在更新插件时遇到'could not create directory'错误,执行:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
当你在你的域的根。
假设:wp-config.php
LocalHost上的FTP凭据
define('FS_METHOD','direct');
< / p >

命令:

chown www-data:www-data -R *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

ftp-user是用来上传文件的用户

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content

我认为下面的规则是推荐的默认wordpress网站:

  • 对于wp-content中的文件夹,设置0755权限:

    chmod -R 0755插件

    chmod -R 0755上传

    chmod -R 0755 upgrade < / p >

  • 让apache用户成为wp-content目录的所有者:

    Chown apache上传

    Chown apache升级

    Chown apache插件 < / p >

我设置权限为:

    # 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用户和组 your-user:root-group =当前用户和根组

这些权限将允许您访问themesyour-plugin文件夹下的开发,而无需询问许可。其余的内容将由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 {} \;

文件的正确权限是644 正确的文件夹权限是755

要更改权限,请使用terminal和以下命令。

find foldername -type d -exec chmod 755 {} \;
find foldername -type f -exec chmod 644 {} \;

文件夹是755,文件是644。

对于OS X使用以下命令:

sudo chown -R www:www /www/folder_name

为了确保您的网站是安全的,并且您为文件夹使用了正确的权限,请使用如下安全插件:

https://en-ca.wordpress.org/plugins/all-in-one-wp-security-and-firewall/

https://en-ca.wordpress.org/plugins/wordfence/

这些插件会扫描你的Wordpress安装,并通知你任何潜在的问题。这些还将警告您任何不安全的文件夹权限。除此之外,这些插件会建议你应该给文件夹分配什么权限。

这实际上取决于你打算使用的插件,因为有些插件会改变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

这将设置“html”文件夹中的每个文件(包括子目录中的文件)的权限为644,因此外部人员不能执行任何文件,修改任何文件,组不能执行任何文件,修改任何文件,只允许用户修改/读取文件,但仍然不能执行任何文件。这很重要,因为它可以防止在“html”文件夹中执行任何形式的文件,也因为html文件夹和所有其他文件夹的所有者除了wp-content文件夹是“root”(或你的用户),www-data不能修改wp-content文件夹之外的任何文件,所以即使web服务器中有任何漏洞,如果有人未经授权访问网站,他们也不能删除除了插件之外的主站点。

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
chown -Rv www-data:www-data
chmod -Rv 0755 wp-includes
chmod -Rv 0755 wp-admin/js
chmod -Rv 0755 wp-content/themes
chmod -Rv 0755 wp-content/plugins
chmod -Rv 0755 wp-admin
chmod -Rv 0755 wp-content
chmod -v 0644 wp-config.php
chmod -v 0644 wp-admin/index.php
chmod -v 0644 .htaccess

最好阅读关于这个https://wordpress.org/support/article/changing-file-permissions/的wordpress文档

  • 所有文件都应该由实际用户的帐户拥有,而不是httpd进程使用的用户帐户
  • 组所有权无关紧要,除非对web服务器进程权限检查有特定的组要求。通常情况并非如此。
  • 所有的目录都应该是755或750。
  • 所有文件都应该是644或640。例外:wp-config.php应该是440或400,以防止服务器上的其他用户读取它。
  • 任何目录都不应该被赋予777,即使是上传目录。由于php进程以文件所有者的身份运行,因此它获得了所有者权限,甚至可以写入755目录。

根据我在自己网站上的阅读和痛苦,在被黑客入侵后,我想出了上面的列表,其中包括一个名为Wordfence的Wordpress安全插件的权限。(非附属机构)

在我们的例子中,wordpress文档根为 /var/www/html/example.com/public_html < / p >

打开权限,以便www-data可以像下面这样写入文档根目录:

cd /var/www/html/example.com
sudo chown -R www-data:www-data public_html/

现在,作为管理员,您可以在站点的仪表板上执行更新。

按照以下步骤完成更新后的安全站点:

sudo chown -R wp-user:wp-user public_html/

上面的命令将wordpress安装中的所有内容的权限更改为wordpress FTP用户。

cd public_html/wp-content
sudo chown -R www-data:wp-user wflogs
sudo chown -R www-data:wp-user uploads

上面的命令确保安全插件Wordfence可以访问它的日志。上传目录也可以通过www-data写入。

cd plugins
sudo chown -R www-data:wp-user wordfence/

上面的命令还确保安全插件为其正确的功能需要读写访问。

目录和文件权限

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


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

将wp-config.php的权限设置为640,这样只有wp-user可以读取该文件,其他用户不能读取。440的权限不适合我以上的文件所有权。

sudo chmod 640 wp-config.php

使用SSH的Wordpress自动更新在PHP5上运行正常,但在PHP7.0上就不行了,因为PHP7.0 -ssh2与Ubuntu 16.04绑定的问题,我不知道如何安装正确的版本并使其工作。幸运的是,一个非常可靠的名为ssh-sftp-updater-support的插件(免费)使使用SFTP的自动更新成为可能,而不需要libssh2。因此,除非在极少数需要的情况下,上述权限永远不必放松。

在wp_config文件中定义。

/var/www/html/Your-Project-File / wp-config.php

define( 'FS_METHOD', 'direct' );

Chown -更改文件/dirs的所有权。Ie。文件/dir的所有者更改为指定的所有者,但不会修改权限。

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