gpt4 book ai didi

php - PHP 会忽略/etc/group 设置吗?

转载 作者:IT王子 更新时间:2023-10-29 00:45:28 25 4
gpt4 key购买 nike

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

我将 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组。

谢谢。

最佳答案

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

getenforce

注意:chown user1:user2 将用户所有权更改为 user1,将 组所有权 更改为 user2,它不会堆叠用户的权限。

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

PHP CGI 将按照您的指示运行,我使用的大多数 PHPCGI 服务也将允许您指定进程组。

我建议:

  1. 创建一个名为phpcgi的组>
  2. 使 user1 和 user2 成为主要组 phpcgi
  3. 更改 CGI 进程以作为 phpcgi 运行
  4. 对于文件:
    1. 将所有权设置为 %USER%:phpcgi
    2. chmod 0660
  5. 对于文件夹:
    1. 将所有权设置为 %USER%:phpcgi
    2. chmod 0770

然后重新启动一切并再试一次:)

关于php - PHP 会忽略/etc/group 设置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com