Wordpress 4.7 忽略 Ubuntu 16.04 权限

Wordpress 4.7 忽略 Ubuntu 16.04 权限

当我卸载 Wordpress 插件时,我收到一条消息,提示我需要通过 FTP/SFTP 登录系统。当我填写正确的凭据时,Wordpress 拒绝了它们。

经过一些阅读后,我明白我应该将我的work-user所有者和www-data组(均以递归方式)添加到wp-content库中(插件、主题和语言库所在的位置)。

好吧,我这样做了,并且我还递归地向所有 wp-contnet 赋予了 777,只是为了测试(目录的基本权限为 755,文件的基本权限为 644)。

即使在此之后,Wordpress 仍然要求我通过 FTP/SFTP 登录,并且 Wordpress 再次拒绝正确的凭据。

cd /var/www/html/example.com
sudo chown $USER:www-data wp-content/ -R
sudo chmod 777 wp-content/ -R

更多详细信息(省略IP和用户名):

sudo tail /var/log/apache2/error.log:

0.0.0.0 - - [08/Dec/2016:10:12:39 +0000] "POST /example.com/wp-admin/admin-ajax.php HTTP/1.1" 200 436 "http://0.0.0.0/example.com/wp-admin/plugins.php"

sudo tail /var/log/auth.log:

Dec 8 10:24:34 ubuntu-2gb-fra1-01 sudo: pam_unix(sudo:session): session closed for user root
Dec 8 10:26:36 ubuntu-2gb-fra1-01 sshd[28358]: Invalid user sunil from IP
Dec 8 10:26:36 ubuntu-2gb-fra1-01 sshd[28358]: input_userauth_request: invalid user sunil [preauth]
Dec 8 10:26:37 ubuntu-2gb-fra1-01 sshd[28358]: Connection closed by IP port 37544 [preauth]
Dec 8 10:30:01 ubuntu-2gb-fra1-01 CRON[28571]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 8 10:30:01 ubuntu-2gb-fra1-01 CRON[28571]: pam_unix(cron:session): session closed for user root
Dec 8 10:33:41 ubuntu-2gb-fra1-01 sshd[28658]: Did not receive identification string from IP
Dec 8 10:34:54 ubuntu-2gb-fra1-01 sshd[28659]: Connection closed by IP port 17928 [preauth]
Dec 8 10:35:26 ubuntu-2gb-fra1-01 SUDO USERNAME TTY=pts/0 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/tail auth.log

更新 1 — 乔治的更新:

这次我使用我的主要 Ubuntu 工作用户在网站目录中执行以下操作:

cd /var/www/html/example.com
sudo chown $USER:www-data wp-content/ -R
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \; 

我去删除插件,被要求提供 FTP 凭据并填写了它们(我填写了相同的 Ubuntu 工作用户及其密码)但 Wordpress 仍然拒绝这些详细信息,我无法从其 GUI 中删除插件。

更新 2-解决方案的方向:

当我第一次启动 VPS 时,我禁用了使用密码登录服务器的任何选项。我总是使用 SSH 密钥登录(即使我确实有我登录的工作用户的密码)。这个事实可能与我遇到的问题有关。

换句话说,Wordpress 希望使用服务器的用户名-密码 FTP/SFTP 身份验证,但另一方面,出于安全考虑,我在创建 VPS 时禁用了服务器身份验证的密码,而 Wordpress不处理 SSH 密钥,因此 Wordpress 要求我使用 SFTP 登录,这有点自找麻烦(我认识的大多数 SFTP 用户,包括我自己,都至少使用 SSH 密钥来使用 SFTP,但不是仅有的密码)。

答案1

我想到两种可能的解决方案

  1. 使用您的登录用户名和密码作为 FTP 用户名和密码。

  2. 在你的机器上安装类似 ProFTPD 的东西

就我个人而言,如果您从仪表板操作并且权限没问题(默认),您可以使用您的登录用户名和密码。

答案2

根据我的经验,Wordpress 要求你通过 ftp 程序安装或卸载插件,而不是在 Ubuntu 上手动进行开发,这就是我在 Ubuntu 上开发的方式

现在说到权限问题,Wordpress 在 [安装或卸载] 插件时不会考​​虑文件权限,它只是坚持要求您使用这种方式。我相信 wordpress 会根据情况需要使用您的默认或设置权限来写入它们,但当 [安装或卸载] 时,必须这样做。

注意:实时安装时的情况并非如此,因为这是在后台完成的。

我相信这是一个安全功能,可确保该过程由您(所有者)完成,因此需要通过像您这样的身份验证应用程序来执行此操作。

你需要使用你的Ubuntu 密码和用户名当 FTP 应用程序询问时执行此操作(例如vsftpd或任何其他)。因此,更改权限只会允许 wordpress 操作这些文件,但不能确定如何将它们添加到 wordpress。


即使您能够登录以添加或删除插件,并且 WordPress 发现您未在 Ubuntu 上设置正确的权限,那么该过程也将不起作用,因为 wordpress 在操作插件时会对文件夹和文件进行更改。因此 WordPress 检查两件事:

  • 您是否具有实际执行此操作所需的 Ubuntu 或 Linux 权限(wordpress 环境是否归您所有)?
  • 您是否有权在当前环境中安装或卸载插件(即您是否拥有适当的 Ubuntu 文件权限)?

两者都必须对你有利才能使其按预期工作。因此,最后你需要安装一个FTP应用程序在您的计算机上进行 Wordpress 开发。

答案3

对我有用的是:

第 1 阶段 - 禁用 Wordpress 要求您提供 SFTP/FTP 凭据:

我发现 Wordpress 需要请求 SFTP/FTP 凭证(IP、用户名和密码)是多余的,也是程序中一个主要的架构问题;原因是不是所有人都允许使用密码进行服务器身份验证。有些人(比如我)出于/home/USERNAME/.ssh/authorized_keys安全/维护原因禁用了它。

解决 Wordpress 请求这些凭据的方法是禁用它。为此,请在文件末尾添加以下内容wp-config

define('FS_METHOD', 'direct');

第 2 阶段 - 授予正确的所有权、分组和权限:

sudo chown www-data:www-data wp-content/ -R
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \; 

注意我这样做了sudo chown www-data:www-data wp-content/ -R而不是sudo chown $USER:www-data wp-content/ -R。原因是使用第一个我仍然无法卸载插件,而且 Wordpress 似乎也需要www-data所有者。


基本上就是这样。完成这些操作后,您就完成了,现在可以卸载插件或执行类似操作。您需要重新开始您的服务器,在这种情况下,如果您使用 Apache,只需执行:

sudo service apache2 restart

我要感谢丹和乔治的帮助和评论。

相关内容