首先,我很抱歉我的英语不好,我不是母语人士。
我将 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 组。
谢谢。