正确的WordPress文件权限[关闭]


399

我在这里浏览了一下,但没有找到有关最佳文件权限的任何详细信息。我也看了看一些的WordPress的形式的问题,在这里也不过任何人说建议777显然需要在安全一点教训。

简而言之,我的问题是这个。我应该具有以下权限:

  1. 存放所有WordPress内容的根文件夹
  2. 管理员
  3. wp内容
  4. wp-includes

然后每个文件夹中的所有文件?


基本上,只有Wordpress上载文件夹应为777,但这将是严重的安全威胁。如果使用启用了Suphp的服务器,则无需手动修改权限。
阿里F

4
我投票的题外话,因为这是题外话每个标签维基摘录关闭这个问题:“题外话问题包括那些关于发展主题,WordPress管理,管理的最佳实践,服务器配置等”
阿德里安

Answers:


499

设置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--

设置完成后,您应该加强访问权限,根据Harding 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中的内容。在这种情况下,您可以

  • 暂时改变到用户WWW的数据su
  • 给wp-content组写访问权限775并加入组www-data
  • 使用ACL向您的用户授予对该文件夹的访问权限。

无论做什么,请确保文件具有www-data的 rw权限。


2
Kornel在下面提供了这样的权威链接。又见codex.wordpress.org/Changing_File_Permissions,Apache的文档httpd.apache.org/docs/2.2/misc/security_tips.html,并几乎对任何话题谷歌搜索。但是在一般情况下,如果有疑问,请不要授予写访问权限(当然也不要拥有所有权),并且要逐案放松,而不要相反(您在这里违反的最低特权原则)。
2014年

22
如果没有更改权限就无法使用,为什么会有自动更新功能?
malhal,2016年

6
@ ManuelSchneid3r,我在wp-content下看到了一些PHP文件,这些文件真的应该被www-data??? 写入吗?听起来确实根本不安全。
亚历克西斯·威尔克

12
此解决方案将防止wordpress安装“自动安全更新”。您需要为每个次要的wordpress更新手动运行上述步骤。
Jeroen

11
这不是安全的配置。当apache用户也拥有文件时,在这些文件上设置读取权限不会有任何影响!不使用。请参阅codex.wordpress.org/Changing_File_Permissions
PodTech.io

60

www-data用户(在这种情况下为Web服务器用户)授予所有wp文件的完全访问权限可能很危险。因此,要这样做:

chown www-data:www-data -R *

但是,在您安装或升级WordPress及其插件时,它可能会很有用。但是,当您完成操作后,保留Web服务器拥有的wp文件不再是一个好主意。

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

为了保护您的站点免受此类攻击,您应该注意以下几点:

所有文件应归您的用户帐户所有,并且应由您写。如果您的托管设置需要,则需要从WordPress进行写访问的任何文件都应该可由Web服务器写入,这可能意味着这些文件需要由Web服务器进程使用的用户帐户归群组所有。

/

WordPress根目录:如果您希望WordPress自动为您生成重写规则,则所有文件只能由您的用户帐户写入,.htaccess除外。

/wp-admin/

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

/wp-includes/

大量的WordPress应用程序逻辑:所有文件只能由您的用户帐户写入。

/wp-content/

用户提供的内容:可由用户帐户和Web服务器进程写入。

在其中/wp-content/您会发现:

/wp-content/themes/

主题文件。如果要使用内置主题编辑器,则所有文件都必须可由Web服务器进程写入。如果您不想使用内置主题编辑器,则所有文件只能由您的用户帐户写入。

/wp-content/plugins/

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

可能存在的其他目录/wp-content/应该由要求它们的插件或主题来记录。权限可能有所不同。

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


通过您的用户帐户。意味着用户在站点上执行php脚本(通常是apache用户)?
shasi kanth,2015年

4
@shasikanth不,apache用户是他所说的“ Web服务器进程”。用户帐户是您的Linux用户(ssh,ftp用户等)
Daniel Bang

在此答案和被接受的答案中,用户(不是www-data)是否应属于www-data组?
user658182

1
不,这就是重点。
Piotr Nawrot

1
我遇到的问题是,只要我将SSH“用户”设为/ wp-content / plugins /的所有者,Wordpress就会在管理员内部变得完全无法正常工作,并且会出现不断出现的FTP弹出例程或权限错误。无法添加或更新插件。只有当我使www-data成为wp-content的所有者时,Wordpress Admin插件功能才起作用。(示例:sudo chown www-data:www-data -R / var / www / html / wp-content /)
Heres2u

26

对于其主目录下有其wordpress根文件夹的用户:

** Ubuntu / Apache

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

信用授予写权限www数据组

您想呼叫usermod您的用户。因此将是:

sudo usermod -aG www-data yourUserName

**假设www-data组存在

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

    groups yourUserName

您应该得到类似以下内容:

youUserName : youUserGroupName www-data

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

  1. 递归更改wp-content文件夹的组所有权,保留您的用户所有权

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

  2. 将目录更改为youWebSiteFolder / wp-content /

    cd youWebSiteFolder/wp-content

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

    find . -type d -exec chmod -R 775 {} \;

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

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

    find . -type f -exec chmod -R 664 {} \;

结果应类似于:

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。

ps如果有人'could not create directory'在更新插件时遇到错误,请执行以下操作:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
当您位于域的根目录时。
假设:在LocalHost上wp-config.php具有
FTP凭据
define('FS_METHOD','direct');


10
-1。您希望www-data对wordpress文件具有写访问权,但wp-content中除外。
Calimo

wp-content中的775确实有帮助。对于文件644,对文件夹755和chown用户:www-data,我有时仍然在媒体上载,插件更新等方面遇到问题。775也允许通过wp-data:www-data更改wp-content ,即可解决问题。
guylabbe.ca

从find / chmod命令中删除-R,因为它很慢且不必要。
亚当·希门尼斯

20

最好阅读https://wordpress.org/support/article/changing-file-permissions/上的wordpress文档

  • 所有文件应归实际用户帐户所有,而不是用于httpd进程的用户帐户所有
  • 除非对Web服务器进程权限检查有特定的组要求,否则组所有权无关紧要。通常不是这种情况。
  • 所有目录应为755或750。
  • 所有文件应为644或640。例外:wp-config.php应为440或400,以防止服务器上的其他用户读取它。
  • 永远不要给目录777,甚至不要上传目录。由于php进程以文件所有者的身份运行,因此它获得了所有者权限,甚至可以写入755目录。

4
不知道您为什么不赞成投票:这几乎就像人们希望最重要的答案是如何使安装不安全
BCran

链接已过时。这里是一个新的:wordpress.org/support/article/changing-file-permissions感谢您是唯一引用实际文档的人!
大家

如果wp-config.php是400,那么在页面加载时apache应该如何包含它(因此可以读取它)?
马丁·布劳恩

14

我将权限设置为:

    # 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默认用户,后者阻止了从网络访问该用户拥有的那些文件。

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

已编辑

如果您使用的是W3C Total Cache,则还应该执行以下操作:

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 =您的当前用户和根组

这些权限将使您可以直接在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 {} \;

11
不!永远不要做777。请不要向(新)读此书的人建议。
卡洛

http进程不应拥有任何文件或文件夹-这是一个重大的安全漏洞。如果恶意用户在插件,主题或wordpress本身中发现了漏洞,他们可以上传可以由apache运行的代码并获得访问权限-我亲眼目睹了:(
DropHit

10

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

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

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

文件夹为755,文件为644。


1
wp-config.php则为640,不幸的是,您必须将uploads&plugins&themes文件夹的权限更改为775,如果要升级wordpress,则必须将所有文件夹的权限更改为775。在此部分,您的权限会在升级时弹出错误/更改插件,主题和上传媒体。
erginduran'5

8

我认为以下规则建议用于默认的wordpress网站:

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

    chmod -R 0755插件

    chmod -R 0755上传

    chmod -R 0755升级

  • 让apache user成为上述wp-content目录的所有者:

    chown apache上传

    chown apache升级

    chown apache插件


1
您还可以递归设置目录的权限,例如:chown -R apache uploads。并且,如果需要,您还可以将群组所有权授予apache:chgrp apache上传
shasi kanth 2015年

8

实际上,这取决于您计划使用的插件,因为某些插件会更改wordpress的根文档。但通常我会为wordpress目录推荐类似的内容。

这将为每个文件/文件夹中的用户分配“ root”(或您正在使用的任何用户),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可以t修改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”(网络服务器)授予临时权限以进行更新/安装,然后还原完成后,返回到“ root”或您的用户。

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

不建议使用root用户。这样做可能更危险。只需将一个新用户n添加到sudo组即可
erginduran

在这里我不主张使用根。我以根为例。您可以使用任何名称,而不必使用根。
唐·迪兰加

2

命令:

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

1
应该是chown用户名:www-data,否则您将无法编辑文件
malhal 2016年

您可以使用$(whoami)代替ftp-user。默认情况下,如果您使用自己的服务器(本地,vps等),则当前用户(不是root)是FTP用户
Juanjo Salvador 2016年


2
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

1

我无法告诉您这是否正确,但是我正在通过Google Compute App Engine使用Bitnami图像。我在插件和迁移方面遇到问题,并且在通过chmod的权限进一步搞乱之后,我发现了这三行内容可以解决我的所有问题。不知道这是否正确,但对我有用。

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 {} \;


1

在wp_config文件中定义。

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

define( 'FS_METHOD', 'direct' );

chown-更改文件/目录的所有权。就是 文件/目录的所有者更改为指定的目录,但不会修改权限。

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

0

基于我自己网站上的所有阅读和苦恼,以及被黑客入侵之后,我得出了以上列表,其中包括对Wordpress安全插件Wordfence的许可。(不附属)

在我们的示例中,wordpress文档的根目录为/var/www/html/example.com/public_html

打开权限,以便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上正常工作,但是由于与Ubuntu 16.04捆绑在一起的php7.0-ssh2问题而无法在PHP7.0上使用,我找不到如何安装正确的版本并使之正常工作。幸运的是,一个非常可靠的名为ssh-sftp-updater-support的插件(免费)使使用SFTP的自动更新成为可能,而无需libssh2。因此,除非在极少数情况下需要,否则不必放宽上述权限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.