4

我正在尝试打开一个文件进行读/写。我一直在 Ubuntu 上开发,没有任何问题。现在是部署到 RHEL 服务器的时候了,我发现要写入的文件的位置似乎存在某种限制。

在 RHEL 上,我无法打开文件,除非它位于 /var/www/html 下。我不知道如何允许其他位置。出于磁盘空间管理的原因,我需要操作不同卷上的文件。

以下是无论如何都可以在 Ubuntu 上正常运行的代码,但如果文件位于 Web 根目录之外,则会在 RHEL 上中断:

$repometa = fopen( "/path/to/file/it/does/exist/and/has/good/perms", "r+b");

实际的错误如下,这很奇怪,因为权限很好(由“apache”用户拥有,文件上的权限为 0644,目录上的权限为 755)。

fopen(<thefile>): failed to open stream: Permission denied

有人可以向我指出描述如何解除 RHEL 的 Apache/PHP 配置以允许写入文件系统上的备用位置的文档吗?

谢谢,~保罗

4

3 回答 3

3

httpd_selinux(8)手册页中所述,如果您希望能够读取或写入文件和目录,则必须为它们提供特定的文件上下文。有关详细信息,请参阅手册页,请记住 PHP 脚本作为守护程序运行,除非您已专门设置 PHP 以作为 CGI 运行。

于 2012-01-25T06:39:24.850 回答
3

为了给接受的答案添加一些细节,我也遇到了这个确切的问题,这个命令为我修复了它。

chcon -R -t httpd_sys_content_t /path/to/file/it/does/exist/and/has/good/perms
于 2013-01-14T17:07:19.127 回答
1

听起来像是用户和/或组权限问题。文件本身可能是可写的......(正如您在漂亮的路径名中提到的那样,)但也许apache用户(或者它的标题)不允许在默认 /var/www/ 之外进行任何文件更改html目录?

有什么方法可以更改 /var/www/html 中的文件,然后让另一个 shell 脚本(和/或用户)从那里获取它并将其移动到您想要的目录?

有趣的是它可以在 Ubuntu 而不是 RHEL 上运行;就用户和组而言,也许 RHEL 更严格?

顺便说一句:一般来说,不让 PHP 写入 www 目录之外的文件可能更安全...... :)

编辑

在@Ignacio 的提示(1)上,也许这样的事情可能会起作用:http ://us2.php.net/manual/en/function.fopen.php#56551

如果它是您一直需要的东西,您可能想尝试在命令行上输入:

/usr/sbin/setsebool -P httpd_can_network_connect=1

我仍然会小心处理 www 文件夹之外的 PHP 文件...但是,希望对您有所帮助...!

(1) http://linux.die.net/man/8/httpd_selinux

于 2012-01-25T06:35:48.727 回答