更正WordPress的文件权限

时间:2013-08-21 08:39:58

标签: php wordpress chmod

我查看了here,但没有找到有关最佳文件权限的任何详细信息。我还看了一些关于here too的WordPress表格的问题,但任何暗示777的人显然都需要一点安全教训。

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

  1. 存储所有WordPress内容的根文件夹
  2. 可湿性粉剂管理员
  3. 可湿性粉剂内容
  4. WP-包括
  5. 然后是每个文件夹中的所有文件?

15 个答案:

答案 0 :(得分:418)

设置WP时,您(网络服务器)可能需要对文件进行写访问。因此访问权限可能需要松散。

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

设置完成后应该收紧访问权限,根据Hardening 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
  • 使用ACLs为您的用户授予对该文件夹的访问权限。

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

答案 1 :(得分:52)

将所有wp文件的完全访问权限授予www-data用户(在本例中为Web服务器用户)可能很危险。 所以要做 NOT 这样做:

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/

     

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

     

/wp-content/plugins/

     

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

     

/wp-content/可能出现的其他目录应该是   由任何插件或主题记录都需要它们。权限可以   而变化。

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

答案 2 :(得分:25)

对于那些在其主文件夹下有wordpress根文件夹的人:

** Ubuntu / apache

  1. 将您的用户添加到www-data组:
  2. 信用Granting write permissions to www-data group

    您想要为您的用户拨打usermod。那就是:

    sudo usermod -aG www-data yourUserName
    

    **假设www-data组存在

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

      groups yourUserName

    2. 你应该得到类似的东西:

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

      4. `/ home / yourUserName / youWebSiteFolder / wp-content /'的模式从0755(rwxr-xr-x)变为0775(rwxrwxr-x)

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

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

        2. 结果应该类似于:

          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 foldername

          对于文件,权限将为664,对于目录,权限将为775。

          P.S。如果有人在更新插件时遇到错误'could not create directory',请执行:
          server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
          当你在你的域的根源时。
          假设: wp-config.php FTP credentials on LocalHost
          define('FS_METHOD','direct');

答案 3 :(得分:15)

我将权限设置为:

    # 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创建了一个特定用户,该用户与防止从Web访问该用户拥有的文件的apache默认用户不同。

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

<强> EDITED

如果您正在使用W3C Total Cache,您还应该执行下一步:

chmod 777 wp-content/w3tc-config
chmod 777 wp-content/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

然后它会工作!

<强> EDITED

经过一段时间开发WordPress网站后,我建议每个环境使用不同的文件权限:

在生产中,我不会授权用户修改文件系统,我只允许他们上传资源并访问一些插件特定的文件夹来进行备份等。但是在Git下管理项目并使用deploy在服务器上的密钥,它不是很好的升级插件,也不是生产。我在这里留下了生产文件设置:

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

答案 4 :(得分:15)

最好阅读关于此https://codex.wordpress.org/Changing_File_Permissions

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

答案 5 :(得分:9)

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

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

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

755用于文件夹,644用于文件。

答案 6 :(得分:7)

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

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

    chmod -R 0755插件

    chmod -R 0755上传

    chmod -R 0755升级

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

    chown apache uploads

    chown apache升级

    chown apache插件

答案 7 :(得分:7)

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

这将分配&#34; root&#34; (或者你正在使用的任何用户)作为每个文件/文件夹中的用户,R表示递归,因此它不会停留在&#34; html&#34;夹。如果你没有使用R,那么它只适用于&#34; html&#34;目录。

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

这将设置&#34; wp-content&#34;的所有者/组。到&#34; www-data&#34;从而允许Web服务器通过管理面板安装插件。

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

这将在&#34; html&#34;中设置每个文件的权限。文件夹(包括子目录中的文件)到644,所以外面的人不能执行任何文件,修改任何文件,组不能执行任何文件,修改任何文件,只允许用户修改/读取文件,但即使用户也无法执行任何文件。这很重要,因为它可以防止在&#34; html&#34;中执行任何类型的操作。文件夹,因为html文件夹的所有者和除wp-content文件夹之外的所有其他文件夹都是&#34; root&#34; (或您的用户),www-data无法修改wp-content文件夹之外的任何文件,因此即使Web服务器中存在任何漏洞,并且有人未经授权访问该网站,他们也可以&# 39;删除插件以外的主站点。

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

这将限制访问&#34; wp-config.php&#34;用户/组用rw -r -----这些权限。

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

如果插件或更新抱怨它无法更新,则访问SSH并使用此命令,并授予&#34; www-data&#34; (Web服务器)通过管理面板更新/安装,然后恢复到&#34; root&#34;或者您的用户一旦完成。

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/

使用此代码保护&#34; wp-admin&#34;带密码的文件夹,如果您尝试访问&#34; wp-admin&#34;现在会询问密码/用户名。注意,在这里你使用&#34; .htpasswd&#34;包含加密密码的文件。

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

答案 8 :(得分: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

答案 9 :(得分: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

答案 10 :(得分:1)

我无法告诉您这是否正确,但我使用的是Bitnami图片而不是Google Compute App Engine。我在插件和迁移方面遇到了问题,在通过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 {} \;

答案 11 :(得分:1)

对于OS X,请使用以下命令:

sudo chown -R www:www /www/folder_name

答案 12 :(得分:1)

要绝对确保您的网站安全并且您对文件夹使用了正确的权限,请使用以下安全插件:

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

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

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

答案 13 :(得分:1)

在wp_config文件中定义。

  

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

define( 'FS_METHOD', 'direct' );

chown - 更改文件/目录的所有权。 IE浏览器。文件/目录的所有者更改为指定的所有者,但它不会修改权限。

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

答案 14 :(得分: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可以访问其日志。 uploads目录也可以通过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-ssh2 bundeld与Ubuntu 16.04的问题而与PHP7.0打破,我无法找到如何安装正确的版本并使其成为现实工作。幸运的是,一个名为ssh-sftp-updater-support(免费)的非常可靠的插件可以使用SFTP进行自动更新,而无需libssh2。因此,除非在极少数情况下根据需要,否则不必放松上述权限。