首先,我很抱歉我的英语不好,我不是母语人士。
我正在使用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基。
感谢。
答案 0 :(得分:0)
我要检查的第一件事是SELinux设置(如果有的话)你可以通过运行来检查这个
getenforce
注意:chown user1:user2
将用户所有权更改为user1
,群组所有权更改为user2
,它不会将用户的权限堆叠在权限中。< / p>
并且:用户需要在目录上有+ x才能遍历它:)
PHP CGI将按照您告诉的任何人的方式运行,我使用的大多数PHPCGI服务都允许您指定该过程的组。
我建议:
phpcgi
phpcgi
phpcgi
%USER%:phpcgi
chmod 0660
%USER%:phpcgi
chmod 0770
然后重新启动所有内容并再次尝试:)