WordPress 要求我提供 FTP 凭据以安装插件

Posted

技术标签:

【中文标题】WordPress 要求我提供 FTP 凭据以安装插件【英文标题】:WordPress asking for my FTP credentials to install plugins 【发布时间】:2013-07-29 03:51:32 【问题描述】:

我在本地系统中安装了一个 WordPress 博客。但是当我尝试从管理员添加插件时,它会要求 FTP 访问。我需要为 WordPress 配置什么才能在没有 FTP 的情况下上传?

【问题讨论】:

【参考方案1】:

尝试在wp-config.php中添加代码:

define('FS_METHOD', 'direct');

【讨论】:

我在谷歌搜索时总是偶然发现这个答案,所以我在这里为自己和其他人发布了一条注释:代码在 wp-admin/includes/file.php:get_filesystem_method 中。 Wordpress 尝试创建一个文件 'wp-content/temp-write-test-'.time()。如果失败,则假定您只能使用 FTP。但这可能不是真的,如果 wp-content 本身不可写,但例如 wp-content/plugins 是。然后,强制 FS_METHOD 起作用。 它可以工作,但现在的问题是解压包后,错误提示:“无法创建目录。” 这对我有帮助,但只是因为它暴露了有关失败的更多信息。核心问题是对进行更新的用户帐户具有写入权限。对于每种类型的系统,这可能是不同的。 (请注意,下面的一些答案告诉您为守护进程、httpd 或 apache 设置写权限......)它帮助我从下面的评论中看到了 PHP sn-p () 这样我就可以知道哪个用户正在运行更新。进行此处建议的更改似乎只是抑制了 FTP 凭据质询,因此我可以看到错误消息。 我使用的是 nginx,而不是 Apache。很明显,PHP-FPM 确实 使用了正确的用户/组组合(使用@Aboozar Rajabi 描述的技巧);但是,由于某种原因,WP 检查失败(但日志上没有错误)。使用此设置可以让我完美升级到 4.7! 在 WordPress 之前,我一直在其他领域进行 devops,我最好的猜测是 FS_METHODFILESYSTEM_METHOD 的缩写。当您定义direct-ly 修改文件时 - 也就是不使用 FTP,那么您就是在强制 WordPress 尝试直接更改站点上的文件。【参考方案2】:

如果您使用的是 Ubuntu。

sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER

【讨论】:

-1 这样做是个坏主意,只有 wp-content 应归 www-data 所有,请参见此处:codex.wordpress.org/Hardening_WordPress 或此处:***.com/questions/18352682/… 此答案还修复了错误“安装失败:无法找到 WordPress 内容目录 (wp-content)。”尝试从仪表板安装插件时。 这非常有效。而且我很确定在这种情况下出于安全目的这不是一个坏主意,因为 OP 询问的是 local 安装对吗?【参考方案3】:

“当您使用 WordPress 控制面板自动安装、升级或删除插件时,WordPress 必须对文件系统上的文件进行更改。

在进行任何更改之前,WordPress 首先检查它是否有权直接操作文件系统。

如果 WordPress 没有直接修改文件系统的必要权限,系统会要求您提供 FTP 凭据,以便 WordPress 可以尝试通过 FTP 执行所需的操作。"

解决方案: 为了找出您的 apache 实例以哪个用户身份运行,请创建一个包含以下内容的测试脚本:

<?php echo(exec("whoami")); ?>

对我来说,它是守护进程而不是 www-data。然后,通过以下方式修复权限:

sudo chown -R daemon /path/to/your/local/www/folder

【讨论】:

别忘了禁用 exec() 或类似的敏感函数。正在生产中。 最好还是使用&lt;?php echo(exec("id")); ?&gt;,它甚至可以为您提供超出用户ID 的组数据:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers) 如果你可以 sudo 和 chown 你可以输入whoami 所以看到同样的信息:sudo chown -R `whoami` /path/to/your/local/www/folder【参考方案4】:

我递归地将wordpress文件夹的所有权更改为www-data并重新启动了apache。

sudo chown -R www-data:www-data <folderpath>

它就像一个魅力!

【讨论】:

这可能是大多数人的正确答案。我想这是我第三次创建文件夹却忘记了 chown。【参考方案5】:

在 OSX 上,我使用了以下内容,并且效果很好:

sudo chown -R _www:_www path to wordpress folder

_www 是在 Mac 上运行 PHP 的用户。

(您可能还需要 chmod 一些文件夹。我已经先完成了它,但它没有修复它。直到我执行 chown 命令才有效,所以我不确定它是否有效单独的 chown 命令,或 chmod 和 chown 的组合。)

【讨论】:

【参考方案6】:

如果在安装插件期间,Wordpress 会询问您的主机名或 FTP 详细信息。 然后按照以下步骤操作:

登录到您的服务器并导航到 /var/www/html/wordpress/。 打开 wp-config.php 并在 define('DB_COLLATE') 之后添加这一行

define('FS_METHOD', 'direct');

如果您收到“无法创建目录”错误。以递归方式为您的 wordpress 目录授予写权限

chmod -R go+w wordpress

注意。为安全起见,请在安装插件后撤销这些权限

chmod -R go-w wordpress

【讨论】:

【参考方案7】:

From the first hit on Google:

WordPress 在无法访问文件时会询问您的 FTP 凭据 直接地。这通常是由于 PHP 以 apache 用户身份运行引起的 (mod_php 或 CGI)而不是拥有 WordPress 文件的用户。

这在大多数共享主机环境中是相当正常的 - 文件以用户身份存储,而 Apache 以用户 apachehttpd 身份运行。这实际上是一个很好的安全预防措施,因此漏洞和黑客无法修改托管文件。您可以通过将所有 WP 文件设置为 777 安全性来规避此问题,但这意味着 没有 安全性,因此我强烈建议您不要这样做。只需使用 FTP,这是有充分理由的自动建议解决方法。

【讨论】:

感谢您的解释。有没有办法配置共享服务器以正确的用户身份运行 PHP 或修复所有者或其他解决方案?【参考方案8】:

我按照here 概述的步骤在 Ubuntu 14.04 上进行了 WordPress 本地安装并简单地运行:

sudo chown -R www-data:www-data path_to_your_project_directory

解决了我下载插件的问题。我在这里留下这篇文章的唯一原因是,当我在谷歌上搜索我的问题时,这是第一个结果,它引导我找到了我的问题的解决方案。

希望这对任何人都有帮助!

【讨论】:

它有安全隐患吗?谢谢。 @HesamMoosapour:仍然没有面临任何安全风险。【参考方案9】:

对这个问题有很多类似的回答,但没有一个完全触及根本原因。 Sebastian Schmid's 对原帖的评论触及了它,但并不完全。以下是我在 2018 年 11 月 6 日的看法:

根本原因

当您尝试通过 WordPress 管理界面上传插件时,WordPress 将调用一个名为“get_filesystem_method()”的函数(参考:/wp-admin/includes/file.php:1549)。此例程将尝试将文件写入相关位置(在本例中为插件目录)。如果没有正确设置文件权限以允许 WordPress 用户(认为执行 php 的用户身份)将文件写入相关位置,它当然会立即失败。

如果可以创建文件,则此函数会检测临时文件的文件所有者,以及函数当前文件的文件所有者(参考:/wp-admin/includes/file.php:1572)并比较两者。如果它们匹配,那么用 WordPress 的话来说,“WordPress 正在以与 WordPress 文件相同的所有者创建文件,这意味着通过 PHP 修改和创建新文件是安全的”,并且您的插件在没有 FTP 凭据提示的情况下成功上传。如果它们不匹配,您会收到 FTP 凭据提示。

修复

    确保插件目录可由运行您的 php 进程的身份写入。

    确保运行您的 php 进程的身份是以下任一者的文件所有者:

    a) 所有 WordPress 应用程序文件,或... b) 至少 /wp-admin/includes/file.php 文件

最终评论

我并不太热衷于将文件所有权专门应用于 file.php 以解决此问题(至少可以说感觉有点 hacky!)。在我看来,WordPress 代码库倾向于让我们在与 WordPress 应用程序文件的文件所有者相同的用户主体下执行 PHP 进程。我会欢迎社区中的一些 cmets。

【讨论】:

谢谢!我有一个插件想要在上​​传中创建一个目录,尽管对该目录具有正确的权限,但它还是失败了。做chown www-data wp-admin/includes/file.php 解决了它。 (其中的其他文件归 ftp 用户所有)。但事实上,正如你所注意到的,这感觉就像一个奇怪的黑客。必须有更简洁的方法来解决这个问题,无论是在 WP 中,还是在某些插件中。 最欢迎@mivk - 很高兴这有帮助!【参考方案10】:

首先移动到你的安装文件夹(例如)

cd /Applications/XAMPP/xamppfiles/

现在我们要修改您的 htdocs 目录:

sudo chown -R daemon htdocs

在出现提示时输入您的 root 密码,然后使用 chmod 调用完成:

sudo chmod -R g+w htdocs

【讨论】:

【参考方案11】:

解决此问题的最简单方法是将以下 FTP 信息添加到您的wp-config.php

define('FS_METHOD', 'direct');
define('FTP_BASE', '/usr/home/username/public_html/my-site.example.com/wordpress/');
define('FTP_CONTENT_DIR', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/');
define('FTP_PLUGIN_DIR ', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/plugins/');

FTP_BASE 是 WordPress 安装的“base”(ABSPATH) 文件夹的完整路径 FTP_CONTENT_DIR 是 WordPress 安装的 wp-content 文件夹的完整路径。 FTP_PLUGIN_DIR 是 WordPress 安装的插件文件夹的完整路径。

【讨论】:

FTP 不安全,因此我们禁用它,因此它不是解决方案。我们改用 SFTP。【参考方案12】:

我们遇到了与更大问题的一部分相同的问题。

的建议解决方案
define('FS_METHOD', 'direct');

隐藏了那个窗口,但是我们仍然在加载主题和升级等方面遇到问题。它与权限有关,但是在我们的例子中,我们通过从 php OS vendor mod_php 移动到更安全的方式解决了这个问题php OS 供应商 FastCGI 应用程序

【讨论】:

【参考方案13】:

我也遇到了同样的问题! 我已经在 wp-config.php 文件(在任何行)中添加了下面的代码,它现在可以工作了!

define('FS_METHOD', 'direct');

【讨论】:

【参考方案14】:

正如 Niels 所说,发生这种情况是因为服务器进程用户无法写入 Wordpress 文件夹。

但这是很多文章都没有解释的事情。它是 php 进程的所有者,而不是 nginx 进程。如果你尝试更改 nginx 所有者,它不会解决这个问题。

要解决它,请尝试运行ps aux 以查看哪个用户拥有 php-fpm 进程。然后检查用户是否与 wordpress 文件夹的所有者相同,或者至少可以写入。如果用户无法写入,您需要更改文件夹的权限和/或所有权;或者将两个用户(服务器所有者和 wordpress 文件夹所有者)放在一个可以写入文件夹的公共组中;或将 php.ini "user" 属性更改为可以写入文件夹的用户。

【讨论】:

【参考方案15】:

define('FS_METHOD', 'direct');

将此添加到 wp-config.php

如果问题仍然存在,您可以尝试将插件文件夹的权限设置为 755 或者在linux中你可以通过这个命令设置它 chmod -R 755

【讨论】:

以上是关于WordPress 要求我提供 FTP 凭据以安装插件的主要内容,如果未能解决你的问题,请参考以下文章

EC2上的WordPress需要FTP凭据才能安装插件

用于localhost的Wordpress FTP连接设置,用于上传和安装WooCommerce

解决 Wordpress 博客安装插件错误问题

wordpress之插件安装和主题安装(包含常见问题)

我可以在不提供 FTP 访问权限的情况下安装/更新 WordPress 插件吗?

在 Wordpress 中启用 FTP 上传和自动插件安装的权限