无法安装新插件,因为出现错误“无法创建目录”

时间:2010-09-24 作者:jldugger

一名教员在安装wordpress教学软件时遇到困难。修复个人权限问题已经屡屡发生,并已成为一种长期的痛苦,因此我将在这里提问。我该怎么做才能使WP正常工作?他们遇到的错误类型:

安装插件:Lightbox 2 2.9.2下载安装包http://downloads.wordpress.org/plugin/lightbox-2.2.9.2.zip… 正在解压缩包…无法创建目录/主页/CIM140/public\\u html/wordpress/wp content/升级/lightbox-2。tmp

当我将su作为www数据(用户apache在Ubuntu中运行)时,我可以将该目录设置得很好。我的测试wp实例很好地安装了这个插件,所以我不知道为什么它会对他们失败。

6 个回复
最合适的回答,由SO网友:Chris_O 整理而成

@pwnguin,

我在用WordPress运行mod\\u php时遇到了同样的问题,我最终解决了这个问题。

# chown www-data:www-data  /home/CIM140/public_html/wordpress/ -R
只要你控制这个盒子,就不会引起任何安全问题。

编辑:

您可能还需要将umask更改为022,这样WordPress创建的新目录将具有755个权限,文件将具有644个权限。

另一个选项是覆盖wp config中的默认文件权限。php:

define(\'FS_CHMOD_DIR\', (0755 & ~ umask()));
define(\'FS_CHMOD_FILE\', (0644 & ~ umask()));
您还可以强制文件系统方法进行更新。

(主要首选)“Direct”强制它使用PHP内部的直接文件I/O请求,这会在配置不当的主机上引发安全问题,在适当的时候会自动选择这些可以在wp config中定义。php具有:define(\'FS_METHOD\', \'ftpext\');

通过执行print_r(@get_defined_constants()); php中的命令。

SO网友:willbradley

对于我(在Ubuntu上),我必须添加umask 002/etc/apache2/envvars 为了让Wordpress以775权限而不是755权限上传插件/图像(即允许Apache和root以外的任何人更改上传的文件)

SO网友:Otto

为了理解你为什么会遇到这些问题,你需要理解所有权的基本概念。

基本上,您知道apache是作为www数据用户运行的。这就是为什么将所有内容都设置为该用户所有的原因,因为WordPress正在验证它是否可以作为拥有自己文件的用户创建文件。因此,您要做的是将所有内容都归拥有这些文件的用户所有。

如果您完全控制机器,这很好。另一方面,如果它是共享托管服务器,那么您就创建了一个安全漏洞。

通常,web服务器以某个用户(如www数据)的身份运行,然后由其他用户(如“otto”,即我的用户帐户)运行代码。在这种情况下,Web服务器将无法以“otto”的形式创建文件,因此无法以我的帐户的形式正确创建文件。因此,WordPress关于创建正确拥有的文件并因此能够安装插件或更新文件的检查将失败,因为共享的Web服务器用户拥有我的文件将存在安全风险。

在这种情况下,WordPress应该正确地提示我输入FTP凭据或类似的内容。这将是一种解决用户帐户问题的方法,通过身份验证为应该写入文件的用户,然后以该用户的身份写入文件。

现在,您正试图通过将所有WordPress文件更改为与Web服务器写入文件的帐户相同的帐户来解决此问题。更常见的方法是更改Web服务器写入文件的方式,允许PHP进程由运行文件的用户帐户“拥有”。

对此的一般回答是“SUPPP”。此版本的PHP将PHP进程运行的用户设置为与其运行的PHP文件的所有者相同的用户。这在共享托管设置上更安全,因为它确保共享Web服务器运行的PHP进程作为PHP文件的所有者运行,因此无法读取其他用户帐户等。

在Ubuntu上,我相信这是实现这一目标的一般方法:

安装SUPPP:

$ sudo apt-get install libapache2-mod-suphp
禁用旧的mod\\u php

$ sudo a2dismod php5 
重新启动Apache

$ sudo /etc/init.d/apache2 restart
瞧。现在,让WordPress PHP文件归其所有者所有。没有特殊技巧,没有更改权限或所有权或类似的内容。由于PHP进程将作为这些文件的所有者运行,因此它将能够作为所有者对其进行写入。目录应为755,文件应为644(注意,SUPPP不喜欢文件按组可写,因此755/644是正确的权限集)。

SO网友:Phil Gardner

我有时会在一些网站上更正目录和文件权限不足以解决此问题。然后,我发现一个或多个目录设置了不可变标志。这可以通过运行chattr -R /var/www/sub.domain.tld 作为根。

SO网友:Varun

您需要授予相关目录的写入权限。理想情况下,您应该只对相关的文件或文件夹执行此操作,然后恢复权限,以免使您的站点易受攻击。

您可以使用命令行中的以下命令修复此问题(假设您位于Wordpress根文件夹中):

# cd wp-content
# chmod -R a+w plugins
# chmod -R a+w themes
# chmod -R a+w upgrade
最安全的解决方案是将apache添加到与Wordpress安装所有者相同的组中,并将所有组权限更改为可写。

SO网友:Kumar Saurabh

这里非常简单的解决方案是:通过运行命令更改opt folder的权限sudo chmod -R 777 /opt.

结束

相关推荐

Updates for a private plugin?

如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点