已修复:Apache - PHP 是否有创建/编辑文件和目录的权限?

已修复:Apache - PHP 是否有创建/编辑文件和目录的权限?

我在 rackspace 云上有一个服务器...Fedora 13,我安装了 apache 和 mysql。

现在,我有一段代码(PHP),我的 Web 应用程序经常使用它。它在运行 XAMPP 的本地机器上运行良好,但当我将此代码上传到 Rackspace 服务器上时,它却无法运行:

$myFile = "textfile.txt";
$fh = fopen($myFile, 'w') or die("cant open");
$stringData = "CONTENT";
fwrite($fh, $stringData);
fclose($fh);

非常简单的 PHP 代码应该可以正常工作。但是,它不会创建文件,如果我自己上传 textfile.txt 文件,并将权限设置为 0666,那么它会编辑该文件。但是,这并不理想,因为它仍然不会创建新文件(或目录),并且手动更改每个文件的权限是不可行的。

文件的所有者是root,文件组是root

我该如何让它工作?

更新 - 已修复

我将所有者更改为 apache:apache 执行以下操作:chown -R apache:apache /var/www/html

似乎有效:)

这样做是否存在安全问题,或者拥有用户 apache 和组 apache 可以吗?

谢谢!

答案1

授予 apache 用户对整个 DocRoot 的写入权限并不理想。我通常会进行一些不同的配置。

首先,我确定文件将被写入的位置 - 可以是在 DocRoot 中,也可以是在 apache 中使用 Alias 配置引入的单独位置。

我创建一个组(通常称为 www-pub)并将 apache 用户添加到其中。

然后我就这么做了

chown root:www-pub <directory>

chmod g+rwxs <directory>

它设置了 setgid 位,这意味着在顶部创建的任何文件或目录都将具有与父目录相同的组,并且可以由该组写入(和读取)。

这样,您就限制了 apache 用户可以访问的位置和内容,但仍然只允许在该区域创建文件等等。

答案2

放置一个 info.php。

echo -e "<?php \nphpinfo(); \n?>" > info.php具有适当的所有权。然后在此处更新,以便我可以检查是否display_errors处于开启状态。

或者简单转动ON display_errors它就会帮助您排除故障。

相关内容