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

Posted

技术标签:

【中文标题】我可以在不提供 FTP 访问权限的情况下安装/更新 WordPress 插件吗?【英文标题】:Can I install/update WordPress plugins without providing FTP access? 【发布时间】:2010-10-13 00:41:34 【问题描述】:

我在我的实时服务器上使用WordPress,它只使用SFTP 使用SSH 密钥。

我想安装和升级插件,但您似乎需要输入您的 FTP 登录名才能安装插件。有没有办法通过手动上传文件而不是让 WordPress 处理整个过程来安装和升级插件?

【问题讨论】:

是的,你可以。只需使用 cPanel 或您拥有的任何其他文件上传工具;上传压缩插件并提取到wp-content/plugins/ 然后从 wp 仪表板转到插件选项卡并启用它。 如果使用VPS,应该试试这个:***.com/a/44137965/3160597 @WPDev 如果您的评论被列为答案,我会再次投票,这是最有帮助的。 youtu.be/pq4QRp4427c 这应该可以。 【参考方案1】:

如果 WordPress 无法直接写入 /wp-content,它只会在尝试安装插件或 WordPress 更新时提示您输入 FTP 连接信息。否则,如果您的 Web 服务器对必要文件具有写入权限,它将自动处理更新和安装。此方法不需要您拥有 FTP/SFTP 或 SSH 访问权限,但它要求您在网络服务器上设置特定的文件权限。

它会依次尝试各种方法,如果 Direct 和 SSH 方法不可用,它会回退到 FTP。

https://github.com/WordPress/WordPress/blob/4.2.2/wp-admin/includes/file.php#L912

WordPress 将尝试将临时文件写入您的/wp-content 目录。如果成功,它将文件的所有权与其自己的 uid 进行比较,如果匹配,它将允许您使用“直接”方法安装插件、主题或更新。

现在,如果由于某种原因您不想依赖自动检查要使用的文件系统方法,您可以在 wp-config.php 文件中定义一个常量 'FS_METHOD',即 'direct', 'ssh', 'ftpext' or 'ftpsockets' 和它将使用该方法。请记住,如果您将此设置为“直接”,但您的网络用户(运行网络服务器的用户名)没有适当的写入权限,您将收到错误消息。

总而言之,如果您不想(或不能)更改 wp-content 的权限以使您的 Web 服务器具有写入权限,请将其添加到您的 wp-config.php 文件中:

define('FS_METHOD', 'direct');

这里解释的权限:

http://codex.wordpress.org/Updating_WordPress#Automatic_Update http://codex.wordpress.org/Changing_File_Permissions

【讨论】:

我必须这样做:sudo chown -R www-data wp-content 以及授予写入权限 在第 876 行使用 getmyuid 可以说是不正确的,因为它返回的是脚本所有者的 UID,而不是脚本执行者。我认为应该是posix_getuid 这种方法的安全隐患是什么? 如果要查看php在哪个用户下运行,可以这样:print_r(posix_getpwuid(posix_geteuid()));可以在wp-config文件中添加代码。 chown -R www-data wordpress/wp-content 对我不起作用,但 chown -R www-data wordpress 对我有用【参考方案2】:

如前所述,所有烫发修复都不再起作用。您需要相应地更改权限并将以下内容放入您的wp-config.php

define('FS_METHOD', 'direct');

【讨论】:

即使我有正确的权限,使得网络服务器可以写入插件目录和 wp-content 目录,这个设置修复了它,所以管理员没有提示更新 FTP/SFTP 设置插件。谢谢你。完美运行。 我也必须明确地这样做。 他们什么时候提出这个要求的? 我还不得不依赖这个设置,依赖于 Ubuntu 12.04 上的 debian 包安装的 WP。否则,权限没问题,wp-content 对组 www-data 具有 rwx 权限... 观察以确保 wp-config.php 文件中没有以下内容:define('FS_METHOD','ftpext');在这种情况下,放置 define('FS_METHOD', 'direct');在文件的底部将不起作用。您必须删除或注释掉定义('FS_METHOD','ftpext');如果您从需要 FTP 的另一台服务器迁移,这种情况尤其可能发生。【参考方案3】:

只是想补充一点,您绝不能将wp-content 权限或任何文件夹的权限设置为777

这是我必须做的:

1) 我将 wordpress 文件夹的所有权(递归)设置为 apache 用户,如下所示:

# chown -R apache wordpress/

2) 我将 wordpress 文件夹的组所有权(递归)更改为 apache 组,如下所示:

# chgrp -R apache wordpress/

3) 授予所有者对该目录的完全权限,如下所示:

# chmod u+wrx wordpress/*

这样就完成了。我的wp-content 文件夹有755 权限,顺便说一句。

TL;DR 版本:

# chown -R apache:apache wordpress
# chmod u+wrx wordpress/*

【讨论】:

将您的wordpress 设置为apache 拥有与设置777 一样糟糕。结果是一样的:任何php 脚本现在都可以更改您的wordpress 文件。最好的选择是 chown apache:apache 临时,安装您的更新并 chown 回原来的或使用 ssh/ftp 技巧 我不同意。这与设置为 777 不太一样。如果您将权限设置为 777,则机器中的任何用户都将具有写访问权限。这本身就是一个问题。虽然您是对的,但 apache 现在可以更改 php 文件,这将是最初的意图(为了更新或安装任何东西)。如果有人设法将恶意 php 文件放在服务器中,那将是一个全新的问题,对不同的用户大喊大叫也无济于事。 谢谢,它也节省了我的时间,因为我没有 FTP 权限,只有 root 访问权限。 这是唯一帮助我的人!非常感谢,经过多年开发 Wordpress 网站,这仍然是一个经典问题! 如果您在不寻常的构建下运行 WordPress,请将其粘贴在 PHP 文件中以检查 Apache 的运行身份(例如,ubuntu 是 www-data): 【参考方案4】:
    wp-config.php 添加define('FS_METHOD', 'direct'); 使服务器可写目录wp-content/wp-content/plugins/。 安装插件(将插件目录复制到wp-content/plugins 目录中)。

在版本 3.2.1 上工作

【讨论】:

也适用于 4.0 版。 您必须添加此选项,但您只需要更改 wp-content/plugins 上的权限 这是安装插件而不提示输入 FTP 信息的明确步骤。您可以采取步骤以使用权限强化 WordPress,然后进行这 2 项更改,并且您应该保持大部分安全。【参考方案5】:

打开wp-config.php 文件并添加以下行:

define('FS_METHOD', 'direct');

这对我有用...谢谢

【讨论】:

在 2020 年 6 月的 5.4 版上也可以使用(并且似乎是必需的)。【参考方案6】:

只是对 wp-config.php

的快速更改
define('FS_METHOD','direct');

就是这样,享受您的 wordpress 更新无需 ftp

替代方法:

有一些主机会阻止这种方法工作 以简化您的 WordPress 更新。幸运的是,还有另一种方法 防止这种害虫提示您输入 FTP 用户名和密码。

同样,在 wp-config.php 文件中的 mysql 登录声明之后, 添加以下内容:

define("FTP_HOST", "localhost");
define("FTP_USER", "yourftpusername");
define("FTP_PASS", "yourftppassword");

【讨论】:

【参考方案7】:

php_mod 更改为fastcgi 并启用cgiSuEXEC(ISPConfig 用户)。对我有用。

如果不起作用,请尝试将wp-content 更改为775rootsudo 用户:

chmod -R 775 ./wp-content

然后添加到wp-config.php:

define('FS_METHOD', 'direct');

祝你好运

【讨论】:

【参考方案8】:

为了启用 SSH2 进行更新和主题上传,您必须生成 SSH 密钥并安装 PHP SSH 模块。然后 WordPress 将检测到您有可用的 SSH2,并且在进行上传/升级时您会看到显示的不同选项 (SSH2)。

1.) 确保已为 debian 安装 PHP 模块:

sudo apt-get install libssh2-php

2.) 生成 SSH 密钥,添加密码是可选的:

ssh-keygen
cd  ~/.ssh
cp id_rsa.pub authorized_keys

3.) 更改权限以便 WordPress 可以访问这些密钥:

cd ~
chmod 755 .ssh
chmod 644 .ssh/*

现在您将在进行上传/升级/插件时获得 SSH2 选项。

4.) 为方便起见,您可以在 wp-config.php 中设置默认值,这将在 WordPress 上传窗口中预先填充 SSH 凭据。

define('FTP_PUBKEY','/home/<user>/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/home/<user>/.ssh/id_rsa');
define('FTP_USER','<user>');
define('FTP_PASS','passphrase');
define('FTP_HOST','domain.com');

“密码”是可选的,如果您在ssh-kengen 期间没有设置密码;那就不要加在wp-config.php

这解决了我的问题。而且我根本不需要做chown。但是我在其他地方看到过这种方法。

参考文献:

http://wp.tutsplus.com/articles/tips-articles/quick-tip-upgrade-your-wordpress-site-via-ssh/ http://codex.wordpress.org/Editing_wp-config.php#Enabling_SSH_Upgrade_Access

【讨论】:

我不是安全专家,我意识到 wordpress 包含此功能并认为没问题....但我对此感觉不太好... 1. 有一个没有 ssh 帐户密码,(任何获得私钥的人都可以随时远程登录,无需密码)和 2. 以明文形式存储密码(参见 1)。它让我想起了 rsh,这取决于“没有人可以访问我的本地文件”的想法,以保护系统的网络密码。 我确信您可以生成密码而不是将其添加到 wp-config.php,然后您只需在进入“连接信息”对话框时输入它。 以这种方式使用未加密的私钥是一个巨大的安全漏洞。但是您可以通过在authorized_keys 中的相关行前添加“from=whatever”来缓解此问题。 这很好,但似乎 php7 存在不兼容性:core.trac.wordpress.org/ticket/35517【参考方案9】:

通常您只需将插件上传到wp-content\plugins 目录即可。如果您无法通过 SFTP 访问此目录,恐怕您可能会被卡住。

【讨论】:

是的,把它们放到 wp-content/plugins 中。【参考方案10】:

你可以很容易地通过在命令promt上输入以下命令来获得它

sudo chown -R www-data:www-data your_folder_name

或将以下代码复制并粘贴到您的 wp-config.php 文件中。

define('FS_METHOD', 'direct');

其中“your_folder_name”是您的 WordPress 安装在此文件夹中的文件夹。

【讨论】:

【参考方案11】:

如果您使用的是 Ubuntu,一个对我有用的快速解决方案是将所有权授予 Apache 用户(默认为 www-data),如下所示:

cd your_wordpress_directory
sudo chown -R www-data wp-content
sudo chmod -R 755 wp-content

【讨论】:

不要给不需要的文件执行权限。【参考方案12】:

在终端执行以下代码

sudo chown -R www-data /var/www

更多详情请访问 Wordpress on Ubuntu install plugins without FTP access

【讨论】:

让 www-data 访问您的网络目录中的所有内容不是一个好主意 对我有用的变体:sudo chown -R www-data /var/www/html【参考方案13】:

将以下代码添加到 wp-config

define('FS_METHOD', 'direct');

FS_METHOD 强制使用文件系统方法。它只能是直接的、ssh2、ftpext 或 ftpsockets。通常,只有在遇到更新问题时才应更改此设置。如果您更改它并且它没有帮助,请将其更改回来/删除它。在大多数情况下,如果自动选择的方法不起作用,将其设置为 'ftpsockets' 将起作用。

(Primary Preference) "direct" 强制它使用来自 PHP 内部的 Direct File I/O 请求,这会在配置不当的主机上引发安全问题,这会在适当时自动选择.

(Secondary Preference) "ssh2" 是强制使用 SSH PHP 扩展(如果已安装)

(3rd Preference) "ftpext" 是强制使用 FTP PHP Extension for FTP Access,最后是

(第 4 种偏好)“ftpsockets”利用 PHP Sockets 类进行 FTP 访问

欲了解更多信息,请访问:http://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants

【讨论】:

【参考方案14】:

WordPress 2.7 允许您直接上传 zip 文件(插件页面底部有一个链接)——无需 FTP 访问。这是 2.7 中的一项新功能,它仅适用于插件(尚不适用于主题)。

【讨论】:

顺便说一句,升级更容易——你会看到一个图标,表明有新版本可用,然后单击“升级”并让它完成它的工作。很不错。甚至 WordPress 核心也以这种方式升级 - 我从 2.7 升级到 2.7.1,没有上传任何内容。 只有在您设置了文件权限以便 Web 服务器/PHP 用户可以写入它们时才适用。如果没有,它将提示您输入 FTP/SFTP 凭据。请参阅 stereointeractive.com 的回答。【参考方案15】:

复活一个旧线程,但是有一个很棒的新插件,叫做SSH SFTP Updater Support,它添加了 SFTP 功能,而无需编辑您的 wp-config.php 文件。此外,Wordpress 的 SFTP 实现依赖于一些有些晦涩难懂的 PHP 模块,这些模块通常不会在服务器上启用;这个插件打包了一个不同的 PHP SFTP 插件,所以你不必在 Apache 端配置任何东西。

我在让 SFTP 支持工作时遇到了很多问题 - 这个插件解决了所有这些问题,真是太棒了。

【讨论】:

【参考方案16】:

stereointeractive 的答案涵盖了所有选项。只是想提一下使用 FTP 的另一种方式。我猜你不允许FTP访问的原因是为了安全。解决这些安全问题的一种方法是运行仅在 127.0.0.1 上侦听的 FTP 服务器

这允许您从 WordPress 内部使用 FTP,并且您将能够安装插件而不会将其暴露给世界其他地方。这也可以应用于其他流行的 Web 应用程序,例如 Joomla!和 Drupal。这就是我们对 BitNami appliances 和 cloud servers 所做的事情,而且效果很好。

【讨论】:

【参考方案17】:

我还推荐SSH SFTP Updater Support plugin。刚刚也解决了我所有的问题……尤其是在通过管理员删除插件方面。只需以通常的方式安装它,下次 WordPress 提示您输入 FTP 详细信息时,将会有额外的字段供您复制/粘贴您的私人 SSH 密钥或上传您的 PEM 文件。

我唯一的问题是让它记住密钥(尝试了两种方法)。不喜欢每次我需要删除插件时都必须查找并输入它的想法。但至少目前这是一个可靠的解决方案。

【讨论】:

" 会有额外的字段供您复制/粘贴您的私人 SSH 密钥" .... 我不是安全天才,但 ... 不是你的私人 ssh 密钥的全部意义永远不必通过网络发送它们?【参考方案18】:

是的,直接在WordPress中安装插件。

    复制插件文件夹并粘贴到WordPress插件文件夹中。 转到管理端 (/test/wp-admin) 然后转到插件链接并检查插件的名称。 激活插件以便轻松安装插件。

其他选项

    为插件代码创建 zip 文件。 转到管理端 (/test/wp-admin) 然后转到插件链接然后单击添加新然后浏览插件 zip 文件夹并安装插件然后出来选项激活插件所以这样做激活插件和激活插件。

【讨论】:

【参考方案19】:

我看到很多人建议将权限设置为 777。我在 2 天前遇到了同样的问题,我所做的只是将其添加到 wp-content

define('FS_METHOD', 'direct');

将插件文件夹的权限设置为 775

这解决了我询问 FTP 访问登录名/密码的问题。

在此之前,我必须通过将 .zip 文件添加到插件文件夹来手动添加插件,然后转到 wp-admin/plugins 并安装它。

【讨论】:

【参考方案20】:

试试这个

1) 在wp-config.php 中添加define('FS_METHOD', 'direct');

2) 将wp-content 目录设置为777 可写。

3) 现在安装插件。

【讨论】:

嗨 Mohan,非常感谢 FS_METHOD 选项。这确实是我一直在寻找的。我确实需要说以下几点:除非情况特殊,否则任何目录都不应该每个都需要 777。这使得目录世界可读、可写和可执行。这是一个巨大的安全风险。正确的解决方案是找出您的 apache 用户是谁(www-data、_www 或类似用户)。此用户需要对 wp-content 的读写访问权限或需要对此目录的所有权('sudo chown www-data wp-content'),没有执行权限。很抱歉有点直率,但 777 对网络内容很危险。 不要 777 你的上传目录,这是不安全的,不应该是一个答案!【参考方案21】:

可以使用 SFTP 或 SSH 自动更新 WordPress 中的插件,但您需要有 ssh2 pecl 扩展。您可以使用以下tutorial

了解如何操作

【讨论】:

【参考方案22】:

我们使用 SFTP 和 SSH(在我们的开发服务器和实时服务器上),我已经尝试(虽然不太难)使用 WordPress 上传功能。我同意 Toby,将您的插件上传到 wp-content/plugins 目录,然后从那里激活它们。

【讨论】:

【参考方案23】:

试试这个检查是否给 wp-content 文件夹正确的权限。

编辑 wp-config.php 添加以下行

define('FS_METHOD', 'direct');

将“wp-content”目录修改为 www-data 以获得完全访问权限。

现在尝试安装插件。

【讨论】:

【参考方案24】:

是的,你可以做到。

你需要添加

define('METHOD','direct');

在你的 wpconfig 中。 但这种方法并不可取,因为它存在安全隐患。

谢谢,

【讨论】:

不应该是 FS_METHOD?【参考方案25】:

方法一: 你可以这样设置: 1. 在 wp-config.php 中你需要写这行。

define('FS_METHOD', 'direct'); 

注意:把它放在define('DB_CHARSET', 'utf8mb4')之后。

    设置 wp-content 权限或递归权限 775 完全权限 你可以通过filezilla给它。写点击目录>权限>检查读写和执行并检查递归到子目录

方法二:

或者你也可以设置这个

define("FTP_HOST", "localhost");
define("FTP_USER", "yourftpusername");
define("FTP_PASS", "yourftppassword");

【讨论】:

到 2020 年 2 月,这是一个明确的指示,Note: put this after define( 'DB_CHARSET', 'utf8mb4' ).【参考方案26】:

请在 wp-config.php 中添加define('FS_METHOD','direct');

【讨论】:

【参考方案27】:

设置一个 ftp 甚至一个 SFTP 连接或 chmod 777 是去本地环境以外的任何东西的坏方法。甚至打开 SFTP 方法也会带来更多不必要的安全风险。

需要的是这些目录的所有者对 /wp-content/uploads 和 /wp-content/plugins/ 的可写权限。 (linux ls -la 会显示所有权)。

运行的默认 apache 用户是 www-data。

chmod 777 允许机器上的任何用户编辑这些文件,而不仅仅是 apache/php 线程用户。

如果您还没有使用 SFTP,则会从外部来源引入另一个可能的故障点。而您只需要运行 apache/php 进程的本地用户访问即可完成目标。

没有看到任何人提出这些观点,所以我想我会提供这些信息来帮助我们解决在线持续存在的 WP 安全问题。

【讨论】:

【参考方案28】:

这是一个简单的方法。

执行以下命令。

这将为 Apache 启用 mod_rewrite 模块

$sudo a2enmod rewrite

此命令会将文件夹的所有者更改为 www-data

$sudo chown -R www-data [Wordpress Folder Location]

执行上述命令后,无需 FTP 即可安装任何主题。

【讨论】:

对于 nginx 只需运行第二个命令sudo chown -R www-data [Wordpress Folder Location] @srokatonie 感谢您的评论。这对每个人都有用。【参考方案29】:

当您没有在 /wp-content 目录上写入权限时,WordPress 不允许您通过 WordPress 管理仪表板上传任何插件的唯一原因。请记住,您的 wordpress 目录 /wp-content 需要 0755 权限级别。 有多种方法可以更改文件夹的权限级别。

使用 cPanel 更改文件权限:

转到文件管理器,打开您的 wordpress 网站应该所在的公共 HTML 文件夹,或者如果您的网站位于其他文件夹中,则打开站点根目录。在您的 WordPress 根目录中导航到 wp-content 文件夹;在 wp-content 文件夹行的末尾,最后一个框带有该文件夹的文件权限。确保将文件夹权限级别编辑为 0755,您就完成了。

使用 SSH 终端更改文件权限:

在您的终端中找到 WordPress 网站的根目录,在我的例子中是 /var/www/html,因此要进入 WordPress 根目录,请输入以下命令:

cd /var/www/html 

现在您位于所需文件夹 /wp-content 所在的 WordPress 根目录中。因此,要更改文件权限,请键入以下命令:

sudo chmod wp-content 755 

这会将您的 /wp-content 目录文件权限更改为 0755。

现在您不会收到通过 FTP 上传 wordpress 插件的错误消息了。

【讨论】:

【参考方案30】:

您可以在 wp-config.php 中添加以下内容

define('METHOD','direct');

这是一个 youtube 视频,解释了如何做到这一点。 https://youtu.be/pq4QRp4427c

【讨论】:

以上是关于我可以在不提供 FTP 访问权限的情况下安装/更新 WordPress 插件吗?的主要内容,如果未能解决你的问题,请参考以下文章

在不安装的情况下使用/加载新的python模块

FTP

Lnmp下pureftpd新建FTP账户权限不足解决方法

在没有root访问权限的情况下安装zsh? [关闭]

在不安装 Microsoft Report Viewer 的情况下发布网站

如何在不提供用户名和密码的情况下访问共享文件夹[关闭]