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

25

看起来我无法创建文件。当我将要创建文件夹的目录权限设置为777时,脚本可以正常运行。如果将目录设置为755,则会失败。我对linux并不是很了解,但我应该自己找出这些问题。我已经尝试了几个小时,但仍然没有成功。有人知道如何让apache具有足够高的权限吗?



我知道这是一个权限和apache的问题,但我不知道怎么解决。我已经编辑了httpd.conf文件,但我真的不知道我在做什么... 有人可以帮忙吗?(我已备份。)


你试过使用771吗?这个文件夹的所有者(用户和组)是谁? - soju
http://www.computerhope.com/unix/uchmod.htm - Gaurav
3个回答

98

不要建议使用777。这将使您的文件对所有人可写,这基本上意味着您失去了权限系统设计的所有安全性。如果您建议这样做,请考虑其对配置不良的 Web 服务器可能产生的后果:通过覆盖文件,攻击网站将变得非常容易。所以不要这样做。

迈克尔(Michael):你的脚本无法创建目录有一个完全可以解决的原因,即运行 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配置文件的目录中获取。

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

% chown theuser:theuser -R /var/www/website/

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

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

那就是这样了。如果你遇到问题,请告诉我们,但请不要听从任何本质上告诉你:“如果安全有问题,请移除安全措施”的建议。


2
抱歉我没有回答这个问题。它从来没有在我的反馈中显示有人回答过。所以,现在它终于有了答案(截至今天),我意识到我没有给出适当的赞同答案!感谢您的回答。 - ThePrimeagen
我认为让Web服务器编写Web服务器的文件不是一个好主意。只有上传文件夹(如果有的话)或其他一些特殊文件夹,如缓存、日志等,才可以这样做。通过恶意PHP脚本被黑客攻击的可能性比发现您的SSH密码要大得多。 - arod
1
您还可以使用 <?php phpinfo() ?> 检查用户。 - Netham

18

我有一个类似的问题,但在我的情况下,我正在运行SELinux,并且即使使用0777权限也失败了。结果证明我需要显式允许httpd对目录具有写访问权限:

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>

SELinux故障排除工具可能会提供更多详细信息。

6
在Ubuntu系统中,您可以按照Berry的建议编辑/etc/apache2/envvars文件。但是,当您更改Apache用户时,要注意可能会带来的意外后果,其中之一是PHP会话可能存储在/var/lib/php5中。您可能还需要更改该文件夹的所有权。

对我有帮助的是/var/lib/php5权限提示。在所有其他文件和文件夹权限都正确(且合理)之后,chown www-data /var/lib/php5 终于解决了CMS一直在抱怨的问题。谢谢。 - raddaqii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接