2011-03-02 97 views
21

看来我不能创建文件。当我将权限设置为777在文件夹上我试图创建一个文件夹,然后脚本工作正常。如果该文件夹设置为755,则失败。我对linux不是很了解,但我想把这些东西弄清楚。我花了几个小时尝试一些东西。有没有人知道如何使它具有足够高的权限。Apache权限,PHP文件创建,MKDir失败



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

+0

你试过771吗?这个文件夹的所有者(用户和组)是谁? – soju 2011-03-02 08:47:06

+0

http://www.computerhope.com/unix/uchmod.htm – Gaurav 2011-03-02 08:47:24

回答

84

停止建议使用777.你正在让你的文件被所有人写入,这几乎意味着你失去了权限系统设计的所有安全性。如果您提出这个建议,请考虑一下它可能对配置不当的网络服务器造成的后果:通过覆盖文件来“破解”网站会变得非常容易。所以,不要。 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

对不起,我还没有回到这个问题。它没有出现在我的饲料中,因为任何人都回答了。所以,现在它终于有了(截至今天),我意识到我没有给出适当的答案大拇指!感谢你的回答。 – Michael 2011-09-13 16:19:33

+0

投入,我认为这是不是一个好主意,让网络服务器写入您的网络服务器的文件。只有上传文件夹 - 如果有的话,或其他特殊文件夹,如缓存,日志等......它可能比通过发现你的ssh密码更容易通过恶意PHP脚本进行黑客攻击。 – arod 2016-05-14 16:01:07

+1

您也可以使用<?php phpinfo()?> – Netham 2016-11-04 20:26:02

1

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

6

在Ubuntu上,您按照Berry的建议编辑/ etc/apache2/envvars。

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

+0

来检查用户。帮助我的是/ var/lib/php5权限提示。 chown www-data/var/lib/php5'帮助完成了其他所有文件和文件夹的权限(而且理智),但CMS不断抱怨。谢谢。 – raddaqii 2015-11-10 13:14:44

9

我有一个类似的问题,但在我的情况下,我有SELinux运行,它甚至失败,即使有0777权限。原来我需要明确允许的httpd对使用目录的写权限:

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET> 

SELinux的疑难解答可能有更多的细节。