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_METHOD
是 FILESYSTEM_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() 或类似的敏感函数。正在生产中。 最好还是使用<?php echo(exec("id")); ?>
,它甚至可以为您提供超出用户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 以用户 apache
或 httpd
身份运行。这实际上是一个很好的安全预防措施,因此漏洞和黑客无法修改托管文件。您可以通过将所有 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 凭据以安装插件的主要内容,如果未能解决你的问题,请参考以下文章
用于localhost的Wordpress FTP连接设置,用于上传和安装WooCommerce