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

2022-08-30 17:18:31

看来我无法创建文件。当我将权限设置为777在我试图在其中创建文件夹的文件夹上时,脚本工作正常。如果该文件夹设置为 755,则失败。我对Linux了解不多,但我应该弄清楚这些东西。我花了几个小时尝试一些东西。有没有人知道如何使它具有足够高的权限。



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


答案 1

停止建议使用777。您正在使每个人都可以写入您的文件,这几乎意味着您将失去权限系统设计的所有安全性。如果您提出这一点,请考虑它可能对配置不良的Web服务器产生的后果:通过覆盖文件来“破解”网站将变得非常容易。所以,不要。

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 配置文件都位于该目录中。

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

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

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

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

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


答案 2

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

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>

SELinux Troubleshooter 可能有更多详细信息。


推荐