升级WordPress 4.0需要输入FTP密码

时间:2014-09-19 作者:Chloe

我能够在本地机器上升级Wordpress 4.0,并且我刚刚在生产机器上更新了一些插件,但是当我尝试在生产机器上更新Wordpress 4.0时,它要求我提供FTP凭据。为什么它以前从来都不需要这些呢?

CloudFlare与此有关吗?

我找到了这个http://codex.wordpress.org/Dashboard_Updates_Screen#Troubleshooting

我试着用chown -R apache:apache * 在Wordpress上安装,但仍要求提供FTP凭据。我不想设置FTP服务器。为什么在进行抓取时需要FTP服务器?

5 个回复
最合适的回答,由SO网友:Chloe 整理而成

我还必须更改根web目录的所有者。

chown apache:apache .   # or chown apache:apache /var/www/html
奥托编辑:克洛伊,由于你要求我提供的信息超出了我在评论中的合理范围,我将在你的回答中附上这一点。我希望没问题。如果没有,请随时回复,或者让我知道,我会这样做。

我之所以评论这是一个安全问题,与文件所有权、限制权限和访问有关。

类Unix系统包含“所有者”和“权限”的概念。文件由某些用户帐户拥有,并且具有控制这些文件是由其他帐户读取、写入还是可执行的权限。这本质上是一种安全特性,可以防止其他帐户写入您的文件,或者允许他们这样做。

运行程序也有“所有者”。这些程序继承其所有者的权限功能。如果您运行一个程序,它可以做任何您可以做的事情,但将被阻止做任何您不能做的事情,因为它是由您的用户帐户“拥有”的。

当涉及到web服务器时,您实际上是允许外部世界在您的计算机上运行程序。因此,所有权很重要,因此大多数web服务器以“www”用户的身份运行,或者在Apache web服务器的常见情况下,以“Apache”用户的身份运行。

如果有人能够通过你网站上运行的某个程序入侵,那么他们将获得对该程序的控制,但仍将受到该程序功能的限制。如果他们破解了“apache”运行的进程,那么他们的用户将是“apache”,并且他们只能以“apache”用户帐户的身份访问。

因此,将您的文件归“apache”所有是一个安全问题,因为您本质上是说世界上任何人都是这些文件的所有者。任何碰巧从那扇门进来的人都可以看到它们,编辑它们,修改它们。

另一方面,如果拥有文件的用户帐户是“user”,而“apache”恰好有权读取文件,但没有写入文件,那么web服务器仍然可以完成其工作。它可以读取文件,运行PHP脚本,做所有它应该做的事情。。。但不修改文件。

这就是WordPress要求FTP凭据的原因。当它进行自我更新时,会注意到WP文件归“用户”所有,但WordPress实际上是以“apache”的身份运行的。因此,如果不更改所有者,它就无法正确更新。“apache”用户无法写入“用户”拥有的文件。它没有此权限。更重要的是,WordPress需要创建新文件并删除旧文件。因此,如果它在作为“apache”运行时这样做,那么新文件将归“apache”所有,而它们应该归“user”所有。它故意在此时停止更新,因为它无法创建具有正确所有权的文件。

请求FTP提供了第二种方法。它可以通过FTP连接回自己的服务器,并使用这些凭据,它可以作为正确的用户写入文件。。。仅此一次。断开连接后,凭据将被忘记。四周都很安全。

换言之,当您输入FTP信息时,您正在向WordPress提供安全凭据,以便能够一次性更改文件。通过将文件归“apache”所有,WordPress可以随时更改文件,而无需任何其他凭据。您已经绕过了此处的安全功能,与以前一样,WordPress无法在没有您的登录信息的情况下更改文件,现在可以了。这是个问题。

现在,可能您没有正常运行FTP服务。也许您只使用SSH。那也没关系。在这种情况下,可以考虑将PHP SSH2扩展添加到服务器的PHP配置中。如果WordPress发现这一点,而不仅仅是FTP,您还可以选择SFTP,它使用SSH连接来验证和复制文件。同样的原则也适用,它试图为文件编写正确的所有权,以防止安全问题。

安全性不是二进制的,它有层次。如果有人获得未经授权的访问权限,正确配置可以帮助限制可能造成的损坏。文件和进程所有权在unix类型的系统中是一个相当低的安全级别,但它仍然是一个重要的安全级别。

SO网友:negletios

尝试以下步骤,它可能会允许您更新所有内容。

打开wp-config.php 并添加“

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

<最后一步是更改owner:group 您已执行的目录的。请注意,如果您使用的是apache2,那么组是www数据,而不是apache。所以会是这样的

sudo chown -R <user>:www-data <WordPress-directory>

希望它能起作用。

SO网友:David Schlesinger

有一种更安全的方法来设置Wordpress,它根本不涉及密码:使用SFTP。

基本上,您需要进行一些设置,并且需要以Wordpress ftp用户的身份登录到其主目录中。

首先创建PKI密钥对(keygen ssh会提示您完成此过程,本例假设您已使用所有默认值):

keygen-ssh
将新钥匙放在需要的地方:

cat ip_rsa.pub >> .ssh/authorized_keys
mv ip_rsa* .ssh/
更改保护措施(不清楚Wordpress为什么要求这样做,但确实如此):

chmod 700 .ssh/
chmod 600 .ssh/*
在wp配置中添加以下行。php:

define(\'FTP_HOST\', \'localhost\');
define(\'FTP_USER\', \'«your user name goes here»\');
define(\'FTP_PUBKEY\', \'«full path to user\'s home directory»/.ssh/wp_rsa.pub\');
define(\'FTP_PRIKEY\', \'«full path to user\'s home directory»/.ssh/wp_rsa\');
确保apache可以访问wp内容/目录:

chmod 775 «full path to WordPress directory»/wp-content
我已在中详细概述了整个过程a posting on my blog.

SO网友:damoncloudflare

“CloudFlare与此有关吗?”

CloudFlare不代理ftp流量;这通常是你的主机提供商要做的事情。

SO网友:Mladen Petrovic

问题是,您的服务器执行的PHP协议与WordPress使用的不同,我不知道这是如何发生的。您可以通过查看phpinfo()中的line SERVER API来检查正在运行的PHP协议。或者如果您的主机上有cPanel,您可以看到How to enable suPHP in cPanel.

您可以在wp config中使用FTP详细信息来解决问题。php类似:

define(\'FTP_USER\', \'username\');
define(\'FTP_PASS\', \'password\');
define(\'FTP_HOST\', \'ftp.example.org:21\');
如果需要,还可以定义FTP\\u SSL、FTP\\u BASE、FTP\\u CONTENT\\u DIR和FS\\u METHOD。

结束

相关推荐

MU-plugins插件是否仍通过wordpress.org/plugins部署?

我正准备发布我的第一个插件。我决定把它放在mu插件中,因为如果删除它,它会破坏依赖于它的其他代码。(这是一种开发工具,用于将变量记录到文本文件中。)那么,我可以将此提交给wp吗。o?或者他们只接受进入插件目录的插件?