关于php:更正WordPress的文件权限

Correct file permissions for WordPress

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

简而言之,我的问题是。我应该拥有以下哪些权限:

  • 存储所有WordPress内容的根文件夹
  • WP管理
  • 可湿性粉剂含量
  • WP包括
  • 然后每个文件夹中的所有文件?


    当设置wp时,您(webserver)可能需要对文件进行写访问。因此,访问权可能需要放松。

    1
    2
    3
    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内容以外的所有文件应该只能由你的用户帐户写入。wp内容也必须可由www数据写入。

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

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

    • 使用su暂时改为www数据,
    • 授予wp content group write access 775并加入group www data或
    • 使用acls授予用户对文件夹的访问权限。

    无论您做什么,请确保这些文件对www数据具有rw权限。


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

    1
    chown www-data:www-data -R *

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

    它基本上允许Web服务器在您的网站中放置或覆盖任何文件。这意味着,如果有人设法使用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/rendering-wordpress


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

    **Ubuntu/Apache

  • 将用户添加到WWW数据组:
  • 向WWW数据组授予写权限的信用证

    你想用你的用户给usermod打电话。那就是:

    1
    sudo usermod -aG www-data yourUserName

    **假设存在www-data

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

    groups yourUserName

  • 你应该得到如下信息:

    1
    youUserName : youUserGroupName www-data

    **您的用户名通常与您的用户名相似。

  • 递归地更改wp content文件夹的组所有权,保留用户所有权

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

  • 将目录更改为websitefolder/wp内容/

    cd youWebSiteFolder/wp-content

  • 以递归方式更改文件夹和子文件夹的组权限以启用写入权限:

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

  • **`/home/yourusername/youwebsitefolder/wp content/'的模式从0755(rwxr-xr-x)更改为0775(rwxrwxr-x)

  • 以递归方式更改文件和子文件的组权限以启用写入权限:

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

  • 结果应该是:

    1
    2
    3
    4
    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。

    另外,如果在更新插件时遇到错误'could not create directory',请执行:
    server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
    当您处于域的根目录时。
    假设:wp-config.php
    本地主机上的FTP凭据
    define('FS_METHOD','direct');


    最好阅读https://codex.wordpress.org/changing_file_permissions上的wordpress文档

    • All files should be owned by the actual user's account, not the user account used for the httpd process
    • Group ownership is irrelevant, unless there's specific group requirements for the web-server process permissions checking. This is not usually the case.
    • All directories should be 755 or 750.
    • All files should be 644 or 640. Exception: wp-config.php should be 440 or 400 to prevent other users on the server from reading it.
    • No directories should ever be given 777, even upload directories. Since the php process is running as the owner of the files, it gets the owners permissions and can write to even a 755 directory.


    我将权限设置为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        # 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默认用户阻止从Web访问该用户拥有的那些文件。

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

    编辑

    如果您使用的是W3C总缓存,那么还应该执行以下操作:

    1
    2
    3
    4
    5
    6
    7
    8
    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

    那就行了!

    编辑

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

    在生产环境中,我不会给用户修改文件系统的权限,我只允许他们上传资源和访问某些插件特定的文件夹来进行备份等。但是在Git下管理项目并在服务器上使用Deploy密钥,这在过渡或生产环境中都不是很好的更新插件。我将生产文件设置留在这里:

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

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

    分段将共享与它应该是其克隆一样的生产权限。

    最后,开发环境将可以访问更新插件、翻译和所有内容…

    1
    2
    3
    4
    5
    6
    7
    8
    # 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之前,首先运行以下命令:

    1
    2
    3
    4
    5
    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} \;

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


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

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

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

    文件夹为755,文件为644。


    它实际上取决于你计划使用的插件,因为有些插件会改变WordPress的根文档。但一般来说,我会为wordpress目录推荐类似的东西。

    这会将"根"(或您正在使用的任何用户)分配为每个文件/文件夹中的用户,r表示递归,因此它不会停在"html"文件夹中。如果您没有使用r,那么它只适用于"html"目录。

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

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

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

    这会将"html"文件夹中每个文件(包括子目录中的文件)的权限设置为644,这样外界就不能执行任何文件、修改任何文件、组不能执行任何文件、修改任何文件,并且只允许用户修改/读取文件,但即使用户也不能执行任何文件。这一点很重要,因为它可以防止在"html"文件夹中执行任何类型的操作,而且由于html文件夹和wp内容文件夹以外的所有其他文件夹的所有者都是"root"(或您的用户),所以www数据不能修改wp内容文件夹之外的任何文件,因此即使Web服务器中存在任何漏洞,并且如果有人访问站点未经授权,除了插件外,不能删除主站点。

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

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

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

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

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

    在nginx中(与apache相同的过程),保护wp admin文件夹不受未经授权的访问和探测。即使安装了nginx,加密密码也需要apache2实用程序,如果计划向同一文件添加更多用户,则省略c。

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

    现在访问这个位置

    1
    /etc/nginx/sites-available/

    使用此代码以密码保护"wp admin"文件夹,现在,如果您试图访问"wp admin",它将询问密码/用户名。注意,这里使用的是包含加密密码的".htpasswd"文件。

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

    现在重新启动nginx。

    1
    sudo /etc/init.d/nginx restart


    我认为对于默认的WordPress站点,建议使用以下规则:

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

      chmod-r 0755插件

      chmod-r 0755上传

      chmod-r 0755升级

    • 让Apache用户成为上述wp内容目录的所有者:

      Chown Apache上传

      Chown Apache升级

      Chown Apache插件


    命令:

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

    其中ftp用户是用于上载文件的用户

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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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

    在wp配置文件中定义。

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

    1
    define( 'FS_METHOD', 'direct' );

    chown-更改文件/目录的所有权。即,文件/dir的所有者更改为指定的文件/dir,但它不修改权限。

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


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

    All In One WP Security & Firewall

    https://en-ca.wordpress.org/plugins/wordfience/网页/

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


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

    1
    sudo chown -R www:www /www/folder_name

    我不能告诉你这是不是正确,但我在谷歌计算应用引擎上使用的是位纳米图像。我在插件和迁移方面遇到了问题,在chmod'ing权限的进一步混乱之后,我发现这三行解决了我所有的问题。不知道这是不是正确的方法,但对我有用。

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

    基于我自己网站上所有的阅读和苦恼,在被黑客攻击之后,我想出了上面的列表,其中包括一个名为WordFence的WordPress安全插件的权限。(与之无关)

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

    打开权限,以便WWW数据可以按如下方式写入文档根目录:

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

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

    通过以下步骤完成更新后保护站点:

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

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

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

    上面的命令确保安全插件WordFence可以访问其日志。上传目录也可以通过WWW数据写入。

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

    上面的命令还可以确保安全插件具有正确功能所需的读写访问权限。

    目录和文件权限

    1
    2
    3
    4
    5
    # 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用户可以读取此文件,而其他任何用户都不能读取。440的权限不适用于具有上述文件所有权的我。

    1
    sudo chmod 640 wp-config.php

    使用ssh的wordpress自动更新与php5一起工作正常,但由于php7.0-ssh2 bundeld与Ubuntu 16.04的问题与php7.0中断,我找不到如何安装正确的版本并使其工作。幸运的是,一个非常可靠的插件ssh sftp updater support(free)使使用sftp的自动更新成为可能,而不需要libssh2。因此,除非在极少数情况下需要,否则不必松开上述权限。