Apache权限,PHP文件创建,MKDir失败

时间:2011-03-02 08:43:50

标签: php apache file-permissions

似乎我无法创建文件。当我将权限设置为777在我试图创建文件夹的文件夹中,脚本工作正常。如果文件夹设置为755,则失败。我对linux知之甚少,但我想把这些东西搞清楚。我花了几个小时尝试一些东西。有谁知道如何使它,以便apache具有足够高的权限。



我知道这是一个权限和apache问题,我只是不知道如何解决这个问题。我编辑了httpd.conf文件,但我真的不知道我在做什么...有什么帮助吗? (我保存了备份。)

4 个答案:

答案 0 :(得分:90)

停止建议使用777.您正在让所有人都可以写入您的文件,这几乎意味着您失去了权限系统专为此设计的所有安全性。如果您建议这样做,请考虑一下配置不当的网络服务器可能带来的后果:通过覆盖文件来“破解”网站会非常容易。所以,不要。

迈克尔:你的脚本无法创建目录是完全可行的原因,运行PHP的用户(可能与Apache不同)根本没有足够的权限来执行此操作。我认为您应该解决根本问题,而不是更改权限,这意味着您的文件拥有错误的所有者,或者Apache或PHP在错误的用户下运行。

现在,您似乎已安装了自己的服务器。您可以通过运行调用大多数linux中安装的'whoami'程序的简单脚本来确定运行PHP的用户:

<?php
echo `whoami`;

如果一切正常,您应该会看到PHP正在运行的用户名。根据您的操作系统,这可能是“www-data”,“nobody”,“http”或任何变体。如果您的网站是唯一运行的网站,则可以通过更改Apache运行的用户来轻松更改。如果您有Debian,就像我倾向于那样,您可以编辑文件/ etc / apache2 / envvars(以root身份),并更改APACHE_RUN_USER的值。根据您的操作系统,此变量可能在不同的配置文件中设置,因此如果您在/ etc / apache2 / envvars中找不到它,请尝试使用以下命令搜索变量声明:

$ grep -R "APACHE_RUN_USER=" .

目录中所有apache-config文件都在。

如果您不是服务器上的唯一一个,您可能需要考虑为每个网站创建用户帐户,并使用Apache2-MPM-ITK之类的东西来根据所调用的网站更改RUN_USER。此外,确保运行PHP进程的用户是文件的所有者和目录。你可以使用chown:

来实现
% chown theuser:theuser -R /var/www/website/

如果PHP与它自己的用户一起运行,并且是它需要写入的文件和目录的所有者,那么权限700就足够了。我自己倾向于使用750作为大多数文件,因为我通常在该组中有多个用户,并且他们可以拥有阅读权限。因此,您可以更改权限:

% chmod 0750 -R /var/www/website/

那应该是它。如果您遇到问题,请告诉我们,请不要接受任何基本上告诉您的建议:如果安全问题困扰您,请删除安全措施。

答案 1 :(得分:13)

我有类似的问题,但在我的情况下,我有SELinux运行,即使有0777权限它也失败了。事实证明我需要明确允许httpd使用以下命令对目录进行写访问:

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>

SELinux Troubleshooter可能有更多细节。

答案 2 :(得分:6)

在ubuntu上,你可以像Berry建议的那样编辑/ etc / apache2 / envvars。

更改Apache用户时,请注意意外后果。其中之一是可以存储在/ var / lib / php5中的PHP会话。您可能还需要更改该文件夹的所有权。

答案 3 :(得分:1)

php用户(www-data,php,apache,无论它可能是什么)需要具有755目录的写权限。我假设它不是该文件夹的创建者组的成员,否则它将能够写入它。将php用户添加到组或将文件夹的权限更改为777.如果两者都不是选项,则可以使用PECL SSH2扩展名与组中的用户(或所有者)一起登录的文件)并改为创建文件。