Apache 权限,PHP 文件创建,MKDir 失败
Posted
技术标签:
【中文标题】Apache 权限,PHP 文件创建,MKDir 失败【英文标题】:Apache permissions, PHP file create, MKDir fail 【发布时间】:2011-07-07 02:47:21 【问题描述】:似乎我无法创建文件。当我在文件夹上将权限设置为 777 时,我试图在其中创建一个文件夹,然后脚本工作正常。如果文件夹设置为 755,则失败。我对linux不太了解,但我想弄清楚这些东西。我花了几个小时尝试一些东西。有谁知道如何使它具有足够高的权限。
我知道这是一个权限和 apache 问题,我只是不知道如何解决这个问题。我已经编辑了 httpd.conf 文件,但我真的不知道我在做什么......有什么帮助吗? (我保存了备份。)
【问题讨论】:
你试过 771 吗?该文件夹的所有者(用户和组)是谁? computerhope.com/unix/uchmod.htm 【参考方案1】:请停止建议使用 777。你让每个人都可以写你的文件,这几乎意味着你失去了权限系统设计的所有安全性。如果您建议这样做,请考虑一下它可能对配置不当的网络服务器产生的后果:通过覆盖文件来“破解”网站将变得非常容易。所以,不要。
Michael:您的脚本无法创建目录有一个完全可行的原因,运行 php(可能与 Apache 不同)的用户根本没有足够的权限来执行此操作。我认为您应该解决根本问题,而不是更改权限,这意味着您的文件拥有错误的所有者,或者 Apache 或 PHP 在错误的用户下运行。
现在,您似乎已经安装了自己的服务器。您可以通过运行一个简单的脚本来确定哪个用户正在运行 PHP,该脚本调用安装在大多数 linux 中的“whoami”程序:
<?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/
应该是这样的。如果您遇到问题,请告诉我们,请不要采纳任何实质上告诉您的建议:如果安全问题困扰您,请移除安全。
【讨论】:
对不起,我还没有回答这个问题。正如任何人回答的那样,它从未出现在我的提要中。所以,现在它终于有了(截至今天),我意识到我没有给正确的答案竖起大拇指!感谢您的回答。 加入,我认为让网络服务器编写你的网络服务器的文件不是一个好主意。只有上传文件夹——如果有的话,或者其他一些特殊的文件夹,比如缓存、日志等……通过恶意 php 脚本被黑客入侵可能比发现你的 ssh 密码更容易。 你也可以使用 来查看用户【参考方案2】:我有类似的问题,但在我的情况下,我正在运行 SELinux,即使获得 0777 权限也失败了。事实证明,我需要明确允许 httpd 使用以下方式对目录进行写访问:
chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>
SELinux Troubleshooter 可能有更多详细信息。
【讨论】:
【参考方案3】:在 ubuntu 上,您按照 Berry 的建议编辑 /etc/apache2/envvars。
当您更改 Apache 用户时,请注意意外后果。其中之一是可能存储在 /var/lib/php5 中的 PHP 会话。您可能还需要更改该文件夹的所有权。
【讨论】:
帮助我的是 /var/lib/php5 权限提示。chown www-data /var/lib/php5
在所有其他文件和文件夹权限都井然有序(并且理智)之后提供了帮助,但 CMS 一直在抱怨。谢谢。以上是关于Apache 权限,PHP 文件创建,MKDir 失败的主要内容,如果未能解决你的问题,请参考以下文章
Centos 7 / Apache / PHP - mkdir():权限被拒绝
PHP 运行 mkdir() Permission Denied 的原因
PHP 运行 mkdir() Permission Denied 的原因