PHP是否忽略/ etc / group设置?

时间:2013-02-07 18:10:55

标签: php linux permissions chmod chown

首先,我很抱歉我的英语不好,我不是母语人士。

我正在使用PHP和FCGI,所以我的每个虚拟主机都以不同的用户身份运行他们的PHP脚本。

我需要在两个虚拟主机(user1和user2)之间共享一个php类,所以我决定将user2添加到/ etc / group中的user1组是一个好主意。我做到了,然后我通过以下命令测试了组权限正常:

su user2
cat /home/user1/shared_class.php

它工作正常(user2访问user1类就好了)。

但PHP似乎没有认识到同样的权限。我将以下脚本保存在user2虚拟主机中进行测试并从浏览器运行:

<?php
passthru('whoami');
passthru('cat /home/user1/shared_class.php');
?>

并且返回了正确的用户名('user2'),但没有返回shared_class.php的内容。 如果我尝试require_once('/ home / user1 / shared_class.php'),我也会收到“拒绝访问”错误。所以很明显PHP认为'user2'没有访问shared_class.php的权限。

我做的另一项测试是运行

su user1
chmod o+r /home/user1/shared_class.php

在最后一个chmod之后,'user2'PHP脚本可以正常读取文件,所以我确定它不是文件夹限制(open_basedir或其他一些指令),它只是PHP忽略/etc/group.

这是预期的吗?有没有办法实现这个目标?

我现在使用的解决方法是

su user1
chown user1:user2 /home/user1/shared_class.php

这样,user2可以很好地从php访问文件,但我希望能够共享文件,而无需手动更改chown设置,即使用/ etc / group并将user2添加到user1基。

感谢。

1 个答案:

答案 0 :(得分:0)

我要检查的第一件事是SELinux设置(如果有的话)你可以通过运行来检查这个

getenforce

注意:chown user1:user2将用户所有权更改为user1群组所有权更改为user2,它不会将用户的权限堆叠在权限中。< / p>

并且:用户需要在目录上有+ x才能遍历它:)

PHP CGI将按照您告诉的任何人的方式运行,我使用的大多数PHPCGI服务都允许您指定该过程的组。

我建议:

  1. 创建一个名为phpcgi
  2. 的组
  3. 制作用户1&amp; user2主要群组phpcgi
  4. 将CGI流程更改为phpcgi
  5. 对于文件:
    1. 将所有权设置为%USER%:phpcgi
    2. chmod 0660
  6. 对于文件夹:
    1. 将所有权设置为%USER%:phpcgi
    2. chmod 0770
  7. 然后重新启动所有内容并再次尝试:)