话题
在计算机文件系统上,不同的文件和目录具有权限这说明了谁以及什么可以读,编写,修改和访问它们。这很重要,因为WordPress可能需要访问写入文件中的文件wp-content
目录启用某些功能。
权限模式
7 5 5用户组世界r+w+x r+x r+x 4+2+2+1 4+0+1 4+0+1 = 755
通过为用户,文件组和其他所有人添加以下值来计算权限模式。该图显示了如何。
- rEAD 4 - 允许阅读文件
- wRite 2 - 允许写入/修改文件
- eXECUTE1 - 读/写入/删除/修改/目录
7 4 4用户组世界r+w+x r r 4+2+1 4+0+0 4+0+0 = 744
示例权限模式
模式 | Str Perms | 解释 |
---|---|---|
0477 | -r – rwxrwx | 所有者只读过(4),其他和组具有RWX(7) |
0677 | -RW-RWXRWX | 所有者只有RW(6),其他和Group具有RWX(7) |
0444 | -r – r – r – | 所有人都只读(4) |
0666 | -RW-RW-RW- | 所有人只有RW(6) |
0400 | -r ————— | 所有者仅阅读(4),集团和其他人没有许可(0) |
0600 | -rw —---- | 所有者只有RW,集团和其他人没有许可 |
0470 | -r – rwx- | 所有者只阅读,小组有RWX,其他人没有许可 |
0407 | -r – rwx | 所有者只读过,其他有RWX,小组没有许可 |
0670 | -RW-RWX- | 所有者只有RW,组有RWX,其他人没有许可 |
0607 | -rw- rwx | 所有者只有RW,小组没有许可,而其他人则有RWX |
WordPress的许可计划
从主机到主机的权限将有所不同,因此本指南仅详细介绍一般原则。它不能涵盖所有案件。本指南适用于运行标准设置的服务器(注意,用于使用“ SUEXEC”方法共享托管的服务器,请参见下文)。
通常,所有文件均应由您的用户(FTP)帐户在您的Web服务器上所有,并且该帐户应以该帐户为单位。在共享主机上,网络服务器进程本身绝不应拥有文件(有时这是万维网, 或者apache, 或者没有人用户)。
任何需要从WordPress写入访问权限的文件都应由WordPress使用的用户帐户拥有或组拥有(这可能与服务器帐户不同)。例如,您可能有一个用户帐户,可以使您来回到服务器,但是您的服务器本身可以使用单独的用户(例如dhapache或者没有人。如果WordPress作为FTP帐户运行,则该帐户需要具有写入访问权限,即是文件的所有者,或属于具有写入访问的组。在后一种情况下,这意味着比默认设置更允许地设置权限(例如,文件夹中的775而不是755,而不是664,而不是644)。
对于大多数用户,WordPress的文件和文件夹权限应相同,具体取决于您执行的安装类型以及安装时系统环境的UMASK设置。
笔记:如果经验丰富的用户为您安装了WordPress,则可能不需要修改文件权限。除非您遇到许可错误的问题,否则想要,您可能不应该对此感到烦恼。
笔记:如果您自己安装了WordPress,则可能需要修改文件权限。某些文件和目录应使用更严格的权限“硬化”,特别是WP-config.php文件。该文件最初是由644个权限创建的,这样就可以这样。请参阅安全性和硬化。
通常,所有核心WordPress文件应仅由您的用户帐户(或httpd帐户(如果不同))进行写作。(有时,多个FTP帐户用于管理安装,如果所有FTP用户都是已知和信任的,即不是共享的主机,则分配组可写入可能是合适的。请向您的服务器管理员提供更多信息。如果您使用mod_rewrite永久链接或其他.htaccess功能,则应确保WordPress也可以写入您的/.htaccess
文件。
如果您想使用内置主题编辑器,则所有文件都需要组成可写的。在修改文件权限之前,请尝试使用它。(This may be true if different users uploaded the WordPress package and the Plugin or Theme. This wouldn’t be a problem for Plugin and Themes installed via the admin. When uploading files with different ftp users group writable is needed. On shared hosting, make sure the group is exclusive to users you trust… the apache user shouldn’t be in the group and shouldn’t own files.)
某些插件需雷竞技要 / wp-content /文件夹可以编写,但是在这种情况下,它们会在安装过程中通知您。在某些情况下,这可能需要分配755个权限。也是如此/wp-content/cache/
有可能/wp-content/uploads/
(如果您正在使用多站点您可能还需要这样做/wp-content/blogs.dir/
)
/ wp-content / wp-content下的其他目录应由插件 /主题所需的任何内容记录。许可将有所不同。
/ | - index.php | -wp-admin |`-wp-admin.css | -wp-blog-header.php | -wp-comments-post.php | -wp-commentsrsrsrssrssrssrssrssrssrss.php | -wp-config.php.php | - wp-content || - 缓存|| 雷竞技- 插件|| - 主题|` - 上传| -wp-cron.php | -wp-includes`-xmlrpc.php
与Suexec共享托管
以上可能不适用于使用“ SUEXEC”方法运行PHP二进制文件的共享托管系统。这是许多Web主机使用的一种流行方法。对于这些系统,PHP进程作为PHP文件本身的所有者运行,可为共享托管的特定情况提供更简单的配置和更安全的环境。
注意:SUEXEC方法绝不应在单站点服务器配置上使用,它们更安全只要对于共享托管的具体情况。
在这种SUEXEC配置中,正确理解正确的权限方案。
- 所有文件均应由实际用户的帐户拥有,而不是用于HTTPD流程的用户帐户。
- 除非有特定的小组要求对网络服务器流程权限检查,否则团体所有权是无关紧要的。通常情况并非如此。
- 所有目录应为755或750。
- 所有文件均应为644或640。例外:WP-Config.php应为440或400,以防止服务器上的其他用户阅读它。
- 任何目录都不应给予777,甚至上传目录。由于PHP进程是作为文件的所有者运行的,因此它获得了所有者的权限,甚至可以写入755目录。
在此特定类型的设置中,WordPress将检测到它可以直接使用适当的所有权创建文件,因此在升级或安装插件时不会要求FTP凭据。雷竞技
Sysadmins用于此设置的流行方法是:
- suphp,贯穿PHP-CGI,自2013年以来目前不受欢迎。
- mod_ruid2,Apache模块,自2013年以来目前不受欢迎。
- mpm-itk,Apache模块。
- mod_fcgid,具有更广泛配置的Apache模块和FastCGI服务器。
- php-fpm,带有共享OPODE的替代FastCGI服务器,可与Apache和Nginx一起使用。
使用FTP客户端
FTP程序(“客户端”)允许您在远程主机上设置文件和目录的权限。此功能通常称为chmod
或者设置权限
在程序菜单中。
在WordPress安装,您可能想更改的两个文件是索引页面,以及控制布局的CSS。这是您更改index.php的方式 -任何文件都相同。
在下面的屏幕截图中,查看最后一列 - 显示权限。它看起来有些混乱,但现在只需注意字母的顺序即可。

右键单击“ index.php”,然后选择“文件权限”
将出现一个弹出屏幕。

不用担心复选框。只需删除“数字值:”并输入所需的数字 - 在这种情况下为666。然后单击“确定”。

现在,您可以看到文件权限已更改。
解答隐藏的文件
默认情况下,大多数FTP客户, 包含filezilla,保留隐藏的文件,这些文件以(。)开头的那些文件显示。但是,在某个时候,您可能需要查看隐藏的文件,以便可以更改该文件上的权限。例如,您可能需要使您的.htaccess文件,控制的文件永久链接,可写。
要在Filezilla中显示隐藏的文件,必须从顶部菜单中选择“视图”,然后选择“显示隐藏的文件”。文件的屏幕显示将刷新,并且任何先前隐藏的文件都应看到。
要获取Filezilla始终显示隐藏的文件 - 在编辑,设置,远程文件列表下,请选中“始终显示隐藏的文件”框。
在最新版本的Filezilla中,“显示隐藏文件”选项已移至“服务器”选项卡。选择“强制显示隐藏的文件。”
使用命令行
如果您对托管帐户有外壳/SSH访问权限,则可以使用chmod
要更改文件权限,这是对经验丰富的用户的首选方法。在开始使用之前chmod
建议阅读一些教程,以确保您了解它可以实现的目标。设置不正确的权限可能会使您的网站离线,因此请花点时间。
你(们)能做到全部您的文件wp-content
目录写入两个步骤,但是在制作每个文件和文件夹写入之前,您应该首先尝试更安全的替代方案,例如仅修改目录。首先尝试这些命令中的每个命令,如果它们不起作用,请进行递归,这将使您的主题映像文件可写。代替dir使用您要写入的文件夹
CHMOD -V 746 DIR CHMOD -V 747 DIR CHMOD -V 756 DIR CHMOD -V 757 DIR CHMOD -V 764 DIR CHMOD -V 765 DIR CHMOD -V 766 DIR CHMOD -V 767 dir dir dir dir dir dir
如果这些内容不允许您写入,请再次按顺序尝试所有这些,除非此时间替换为-r,否则将递归更改位于文件夹中的每个文件。如果您仍然无法写作,现在可以尝试777。
关于chmod
chmod
是一个unix命令,意为“ch安格mode”文件。这-r
标志意味着将更改应用于内部的每个文件和目录wp-content
。766是我们将目录更改为目录的模式,这意味着该目录是WordPress以及系统上所有其他用户的可读和写作。最后,我们有要修改目录的名称,wp-content
。如果766不起作用,则可以尝试777,这使所有用户,组和进程都可以使所有文件和文件夹可读取,可写和可执行。
如果您使用永久链接您还应该更改.htaccess的权限,以确保WordPress在更改设置时可以更新它,例如添加新页面,重定向,类别等。在使用MOD_REWRITE PERMER链接时,它需要更新.HTACCESS文件。
- 转到WordPress的主要目录
- 进入
chmod -v 666 .htaccess
笔记:从安全的角度来看,即使是少量保护也比世界撰写的目录更可取。从诸如744之类的低允许设置开始,直到它起作用为止。仅在必要时才使用777,希望仅在临时时间内使用。
777的危险
此权限问题的关键是如何配置服务器。您用于FTP或SSH进入服务器的用户名很可能不是服务器应用程序本身用于服务页面的用户名。
7 7 7用户组世界r+w+x r+w+x r+w+x 4+2+2+1 4+2+2+1 4+2+1 = 777
通常,Apache服务器是由www-data,,,,dhapache或者没有人用户帐户。这些帐户出于一个充分的理由,对服务器上文件的访问量有限。通过将您的用户帐户拥有的个人文件和文件夹设置为全世界效力,您实际上是在使它们成为世界上的可写。现在,www-data,dhapache和任何运行您的服务器,服务页面,执行PHP口译员等的用户将完全访问您的用户帐户文件。
这为某人提供了一种途径,可以通过劫持服务器上的任何流程来访问您的文件,这还包括计算机上的任何其他用户。因此,您应该仔细考虑修改机器上的权限。我从来没有遇到过超过767的任何东西,所以当您看到777问为什么需要时。
最糟糕的结果
由于在文件夹甚至文件上使用777权限而可能发生的最糟糕的情况是,如果恶意饼干或实体能够上传曲折的文件或修改当前文件以执行代码,他们将对您的博客,包括拥有数据库信息和密码。
找到解决方法
通常,拥有令人印象深刻的WordPress插件提供的增强功能,而无需使自己处于危险之中。雷竞技联系插件作者或您的服务器支持,并请求解决方法。
查找安全文件权限
.htaccess文件是运行服务器的流程所有者访问的文件之一。因此,如果将权限设置得太低,则您的服务器将无法访问该文件并会导致错误。其中是找到最安全的设置的方法。开始过于限制,并提高权限,直到其运行为止。
示例权限设置
以下示例具有定制编译PHP-CGI二进制和自定义php.ini文件位于CGI-BIN目录中,用于执行PHP脚本。为了防止解释器和php.ini文件直接在Web浏览器中访问,它们会受到.htaccess文件的保护。
默认权限(UMASK 022)
644 -rw-r--r-- /home/user/wp-config.php 644 -rw-r--r-- /home/user/cgi-bin/.htaccess 644 -rw-r--r-- /home/user/cgi-bin/php.ini 755 -rwxr-xr-x/home/user/cgi-bin/php.cgi 755 -rwxr-xr-xr-x/home/home/user/user/cgi-bin/php5。CGI
获得许可
600 -RW -------/home/user/wp-config.php 604 -RW ------- r-/home/user/cgi-bin/.htaccess 600-rw --------------------------------------------------------------------------------------11-rwx - x - x - x/home/user/cgi-bin/php.cgi100--- x -------/home/user/cgi-bin/php5.cgi
.htaccess许可
644> 604- 允许.htaccess文件读取权限的允许组所有者的位被删除。通常需要644,并建议用于.htaccess文件。
PHP.INI许可
644> 600- 以前,即使仅通过从网站请求它,所有组和所有具有访问服务器的用户也可以访问php.ini。棘手的事情是,由于php.ini文件仅由php.cgi使用,因此我们只需要确保php.cgi进程可以访问。php.cgi作为拥有两个文件的用户运行,因此单个用户现在是唯一能够访问此文件的用户。
PHP.CGI许可
755> 711该文件是使用的PHP-CGI二进制文件,而不是MOD_PHP或托管公司提供的默认香草PHP。该文件的默认权限为755。
php5.cgi许可
755> 100- 由于用户帐户是运行PHP CGI的进程的所有者的设置,因此没有其他用户或组需要访问权限,因此我们禁用除执行访问以外的所有访问。这很有趣,因为它确实有效。您可以尝试读取文件,写入文件等。但是,您对此文件的唯一访问是运行PHP脚本。作为文件的所有者,您始终可以再次更改权限模式。
$ cat:php5.cgi:允许拒绝./php5.cgi:欢迎
Selinux
安全增强Linux是一个内核安全模块,可提供可以将过程打磨到特定上下文中的机制。这特别是用来限制网页可以在操作系统其他部分执行的操作。安全策略拒绝的操作通常很难与常规文件权限错误区分开。
Selinux通常安装在Redhat家庭分布上(例如Centos,Fedora,Scientific,Amazon等)。
如何确定SELINUX是否问题?
如果您是基于Debian的发行版,那么您可能很好。
运行以下命令(在基于RPM的系统上);
#rpm -qa |Grep Selinux Selinux-Policy-targeted-3.13.13.13.1-166.el7_4.7.noarch selinux-policy-3.13.13.13.13.13.13.13.13.13.1.el7_4.7.noarch libselinux-libselinux-2.5-11.el7.x86_64 libselinux-python-2.5-1111.EL7.x86_64 libselinux-utils-2.5-11.el7.x86_64
并检查是否是拒绝许可的原因:
#getenforce执行
SELINUX原因的一个问题是阻止WP-Admin工具写出RERL重写所需的“ .htaccess”文件。有几个检查此行为的命令
#audit2allow -w -a type = avc msg = audit(1517275570.388:55362):avc:avc:for pid = 11831 comm = 11831 comm =“ httpd” path =“ path =”/var/var/var/www/supplay.org/expass..htaccess“ dev = dev = dev = dev = dev =“ VDA1” INO = 67137959 scontext = System_u:System_R:httpd_t:s0 tcontext = Sytem_u:object_r:object_r:httpd_sys_content_t:s0 tclass = file file是由:boolean httpd_unified引起的。描述:允许HTTPD统一允许通过执行:#setSebool -p httpd_unified 1
和
# ausearch -m avc -c httpd ---- time->Tue Jan 30 01:30:31 2018 type=PROCTITLE msg=audit(1517275831.762:55364): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44 type=SYSCALL msg=audit(1517275831.762:55364):ARCH = C000003E SYSCALL = 21成功= NO EXIT = -13 A0 = 55B9C795D268 A1 = 2 A2 = 0 A2 = 0 A2 = 0 A3 = 1项目= 0 PPID = 0 PPID = 11826 PID = 11829 AUID = 4294967295 UID = 48 GID = 48 GID = 48 EUID = 48 EUID = 48 EUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48 SUID = 48fsuid = 48 egid = 48 sgid = 48 fsgid = 48 tty =(none)ses = 4294967295 comm =“ httpd” exe =“/usr/usr/sbin/sbin/httpd” subj = system_u:system_r:system_r:system_r:httpd_t:httpd_t:s0 key =(null)类型= avc msg = audit(1517275831.762:55364):avc:pid = 11829 comm =“ httpd” name =“ biioactivator.org” dev =“ vda1”tcontext = unconfined_u:object_r:httpd_sys_content_t:s0 tclass = dir -------
您可以暂时禁用Selinux,以确定它是否是问题的原因;
#setEnforce用法:setEnforce [执行|允许|1 |0]
本文是否有帮助?如何改进?
你一定是登录提交反馈。