我最近遇到一个问题,因为我没有可用的“手动安装”或“一键安装”选项,所以无法安装WP Smush Pro插件。

我碰到了这篇帖子,建议调整wp-config.php中的设置。我添加了建议的设置,但是似乎最重要的设置是:

define('FS_METHOD', 'direct');

我想知道的是关于设置我应该真正关心的问题FS_METHODdirect?还有其他替代方法来安装插件吗?

官方文档必须这样说:


FS_METHOD强制使用文件系统方法。它只能是“ direct”,
“ ssh2”,“ ftpext”或“ ftpsockets”。通常,只有在遇到更新问题时才应更改
。如果您更改它
无济于事,请将其更改回/删除。在大多数情况下,如果自动选择的
方法不起作用,
将其设置为'ftpsockets'即可。

(主要优先级)“直接”强制其使用直接文件I来自PHP内部的/ O请求,这充满了在配置不当的主机上打开安全性的问题,
在适当的时候会自动选择。


#1 楼

这就是我如何理解WordPress File API的想法。如果有误,请投票:)

好。如果您上传文件,则该文件具有所有者。如果使用FTP上传文件,则登录后,该文件将归FTP用户所有。由于您具有凭据,因此可以通过FTP更改这些文件。所有者通常可以执行,删除,更改等文件。当然,您可以通过更改文件权限来更改此设置。

如果使用PHP上传文件,则执行PHP的Linux用户将拥有该文件。现在,该用户可以编辑,删除,执行等文件。只要您是在系统上执行PHP的用户,就可以。

假设您在“配置不佳”的共享主机上。很多人在此系统上运行他们的PHP网站。可以说只有一个Linux用户正在为所有这些人执行PHP。此共享主机上的一位网站站长有恶意。他看到您的页面,并且找出了您的WordPress安装路径。例如,将WP_DEBUG设置为true,并且出现错误消息,例如

[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1


“哈!”这个坏男孩说。让我们看看,如果这个人已经将FS_METHOD设置为direct,并且他编写了类似

<?php
unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' );
?>


的脚本,因为只有一个用户正在运行PHP,并且该用户也被恶意用户使用。伙计,如果您已通过PHP上传文件,并以此所有者身份附加了PHP用户,则他可以更改/删除/执行系统上的文件。

您的网站被黑了。

或者,如法典中所述:


许多托管系统的网络服务器都以与WordPress文件所有者不同的用户身份运行。在这种情况下,从Web服务器用户写入文件的过程将使所得的
文件归Web服务器的用户帐户所有,而不是实际的
用户帐户。这可能导致共享托管中出现安全问题
多个用户共享同一个Web服务器用于不同站点的情况。


#2 楼

有什么风险?

在配置错误的共享主机上,每个客户的PHP将以相同的用户身份执行(例如,讨论apache)。此设置非常常见。

如果您在这样的主机上,并且使用WordPress通过直接文件访问来安装插件,则所有插件文件都属于apache。同一服务器上的合法用户可以通过编写将恶意代码注入到插件文件中的PHP脚本来攻击您。他们将脚本上传到自己的网站并请求其URL。您的代码已成功泄露,因为它们的脚本运行为apache,即拥有您的插件文件的脚本。
FS_METHOD 'direct'与它有什么关系?

当WordPress需要安装文件(例如插件),它使用get_filesystem_method()函数来确定如何访问文件系统。如果未定义FS_METHOD,它将为您选择一个默认值,否则将使用您的选择,只要有意义即可。

默认行为将尝试检测您是否处在-危险环境(如我上面所述),如果认为您是安全的,则将使用'direct'方法。在这种情况下,WordPress将直接通过PHP创建文件,从而使它们属于apache用户(在此示例中)。否则,它将退回到一种更安全的方法,例如提示您输入SFTP凭据并以您的身份创建文件。方法。

然后为什么要使用FS_METHOD = 'direct'

不幸的是,WordPress用于检测高风险环境的逻辑是有缺陷的,并且会产生假阳性和假阴性。哎呀该测试包括创建一个文件,并确保该文件与其所在目录属于同一所有者。假设是,如果用户相同,则PHP将作为您自己的帐户运行,并且可以安全地将插件安装为该帐户。如果它们不同,则WordPress会假定PHP以共享帐户运行,因此不安全地以该帐户安装插件。不幸的是,这两个假设都是有根据的猜测,通常是错误的。自己的账户。 PHP以其自己的独立用户身份运行。 WordPress将假定这是一个有风险的环境,并且不会默认为'direct'模式。实际上,它仅与您信任的用户共享,因此FS_METHOD = 'direct'模式是安全的。在这种情况下,您应该使用define('FS_METHOD', 'direct' );强制WordPress直接写入文件。

#3 楼

在“配置良好”的情况下,“直接”将导致问题。

还可以使用非共享的PHP执行用户来配置共享的WP托管,这与文件/目录所有权不同用户。
因此,您最终得到了user1拥有的文件,并且PHP代码以php-user1的身份执行。

在这种情况下,被黑的插件或核心代码(a)无法写入(甚至根据权限从中读取)其他用户的目录; (b)无法写入此用户的文件,因此也无法将木马代码添加到核心代码或插件代码中。

因此,如果这样设置托管,则必须使用FTP进行更新和'direct'不起作用。

如果您在wp-config.php中设置了'direct'并且PHP执行用户没有写许可权,则您将收到Update Failed消息并且没有弹出窗口-要求FTP凭据。