我正在关注更改文件权限«WordPress Codex,但是当我尝试通过plugin更新和/或安装theme和/或wp-admin时,我正在关注:


至执行请求的操作,WordPress需要访问您的Web服务器。请输入您的FTP凭据以继续。如果您不记得自己的凭据,则应与您的Web主机联系。


从文件系统级别:

# ls -ld wp-content/ wp-content/plugins/ wp-content/themes/
drwxrwxr-x.  6 root apache 4096 Jun  2 12:01 wp-content/
drwxrwxr-x. 28 root apache 4096 Jun  2 00:00 wp-content/plugins/
drwxrwxr-x. 11 root apache 4096 May 11 16:34 wp-content/themes/
# 


httpd运行为apache

$ ps auxw | grep httpd
root     20158  0.0  0.1 533080 26192 ?        Ss   15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20233  0.0  0.2 612608 34908 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20234  0.0  0.2 538772 46904 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20235  0.0  0.1 536832 24268 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20236  0.0  0.2 626272 35640 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20237  0.0  0.0 535296  9592 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20322  0.0  0.1 537088 26620 ?        S    15:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20380  0.0  0.2 626060 33816 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20429  0.0  0.1 538216 29184 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20447  0.0  0.2 629380 43180 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
apache   20448  0.0  0.2 626172 35224 ?        S    15:04   0:00 /usr/sbin/httpd -DFOREGROUND
alexus   24073  0.0  0.0 112652   972 pts/9    R+   15:13   0:00 grep --color=auto httpd
$ 


我希望能够通过install来执行请求的操作(update和/或/wp-admin),而无需使用FTP凭据。

我该怎么办?

评论

这是本地主机安装吗?如果是这样,请参阅:wordpress.stackexchange.com/questions/19649/…

@GregMcMullen不,这不是本地主机安装,并且您评论的链接的“已接受”答案是递归地将wordpress目录的所有权更改为任何人-这对我不起作用,因为httpd作为apache运行。

@alexus看来您的文件目前归root.apache所有。您尝试过apache.apache而不是没人吗?

@timMalone将文件/目录设置为apache.apache或root.apache没什么区别,只要httpd作为apache运行,并且apache的uid是apache gid的组的一部分,它们都是一样的,因为我的权限设置为g + w。

@alexus好的,还可以尝试-在wp-config.php(codex.wordpress.org/…)中将FS_METHOD设置为“ direct”

#1 楼

将以下内容添加到wp-config.php:

define( 'FS_METHOD', 'direct' );


让我知道它如何为您工作。

评论


wordpress.stackexchange.com/questions/189554/…

– alexus
17年6月22日在15:29

为我工作,除非您在文件系统中具有错误的权限。顺便说一句,我在wp-config.php的最顶部添加了它

– Toskan
18-09-28在18:12

使用此方法之前,请务必阅读Alexus链接到的帖子。此方法肯定有效(它为我解决了问题),但绝对不应在共享主机环境或任何有风险的环境中使用此方法,因为这样做可能会损害安全性。

–JamesHoux
19年5月18日在15:51

添加此内容后,我收到以下错误消息:更新失败:无法安装更新,因为我们将无法复制某些文件。这通常是由于文件权限不一致造成的。

– Sabbir
3月18日下午3:57

对于将整个站点从本地主机迁移到实时服务器的用户来说,这可能是危险的。我希望您使用@Syamraj K的修改文件权限的方法,或者在在线迁移之前将其从wp-config.php中删除

–Cedric Ipkiss
11月10日下午1:48

#2 楼

这意味着WordPress在安装文件夹中进行更改的权限有限。

为了解决此问题,您所需要做的就是为其提供必要的权限。

之后,在终端/腻子/命令行提示符中运行以下命令通过SSH连接到您的服务器:

sudo chown -R apache:apache /var/www/html


查看本文以获取全部详细信息。

评论


权限很好,请重新阅读我的问题)

– alexus
16年8月5日在18:55

chown:无效用户:‘apache:apache’

– Numediaweb
18年2月2日在9:46

记住,Apache可以是使用不同Linux版本的不同用户。因此,您可以尝试使用组并查看是否出错,因为Apache的用户和组通常是相同的。然后使用正确的用户。在Ubuntu中,最常见的是用于生成Apache文件的“ www-data:www-data”或“ www:www”。

– MontyThreeCard
19年1月25日在16:09

在找到正确的用户名后,此方法非常有用(另请参见列出所有用户的命令)

–顶级大师
1月8日11:38

如果要在OSX上使用它,请使用_www:_www(莫哈韦沙漠,不知道其他版本的含义)

– Larzan
5月6日14:08

#3 楼

即使所有权为root:apache并具有775权限,并且httpd以apache运行是完全正确的,但Wordpress并不喜欢这样。它希望所有者为apache,如wp-admin/includes/file.php所示:

    // Attempt to determine the file owner of the WordPress files, and that of newly created files
   $wp_file_owner = $temp_file_owner = false;
   if ( function_exists('fileowner') ) {
      $wp_file_owner = @fileowner( __FILE__ );
      $temp_file_owner = @fileowner( $temp_file_name );
  }


您将是:
wp_file_owner = root
temp_file_owner = apache

if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) {
    // WordPress is creating files as the same owner as the WordPress files,
    // this means it's safe to modify & create new files via PHP.
    $method = 'direct';
    $GLOBALS['_wp_filesystem_direct_method'] = 'file_owner';
} elseif ( $allow_relaxed_file_ownership ) {
    // The $context directory is writable, and $allow_relaxed_file_ownership is set, this means we can modify files
    // safely in this directory. This mode doesn't create new files, only alter existing ones.
    $method = 'direct';
    $GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership';
}


如果$ wp_file_owner与$ temp_file_owner相同,则继续。您的将陷入elseif中,根据注释,该elseif不允许删除/创建,而只能进行更新(我通过在Wordpress中更新插件的代码来验证了这一点,并且有效)。

注意,我没有广泛浏览代码,这只是我的快速解释。我遇到了同样的问题,切换了user:group以便httpd用户也是文件所有者后,它不再提示输入FTP凭据。

评论


是的,将所有者更改为www-data对我有用。有趣的WordPress!

–ankush981
18年8月30日在3:45

有趣的发现,我会调查一下...谢谢我+1)

– alexus
19/12/16在17:07

#4 楼

这不是一个直接的答案,但是可能不得不说-这是一个应避免解决的问题,除非您正在谈论本地开发,在这种情况下,您可以将权限设置为777。

原因是如果网络服务器可以覆盖您的代码,那么在它上面运行的任何恶意代码也将能够做到这一点。风险要比不必键入ftp凭据节省几秒钟的便​​利大得多。

#5 楼

尽管问题不再是新问题了,但我也想在此问题上加上我的两分钱。

很多人在其VPS服务器上都安装了Centos(7),下面的代码行可以解决他们的问题。

Imho与SELinux息息相关,SELinux阻止WordPress按要求完成其工作。到目前为止,将解释SELinux是什么以及它做什么。仅供参考,介绍开始于:


安全性增强的Linux(SELinux)是在内核中实现的强制性访问控制(MAC)安全性机制。


只需执行以下3个步骤:


1打开终端(或通过SSH访问服务器)
2添加以下代码行
chcon -R -t httpd_sys_content_t /var/www/html/wordpress

3添加第二行代码
chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress



无需从服务器重新启动或从任何守护程序重新启动。


我不会说它对所有人都有帮助,但是对于那些没有禁用SELinux的人来说,这应该是一种缓解。

干杯

注意:请根据自己的需要进行调整(即WordPress的路径)

编辑:请确保在删除define("FS_METHOD", "direct");行时是/曾经在wp-config.php中使用过,因为当上述代码行按需进行时,这绝对是不可行的事情。

#6 楼

就我而言,我通过从GIT切换回FTP模式解决了这一问题。

不再发出警告。

也许对其他人也有帮助。