代码之家  ›  专栏  ›  技术社区  ›  sibaz

作为apache用户运行的PHP不是apache所属的任何LDAP组的成员

  •  0
  • sibaz  · 技术社区  · 6 年前

    简而言之,PHP以用户apache的身份执行的代码,似乎没有对apache所属的组的写访问权,apache可以在shell上对这些组进行写操作。

    所以我在生产服务器上有一个用户apache。如果我跑 id apache 我认为apache是几个组的成员,包括 groupa . 如果我 grep apache /etc/groups 我可以看到这些组成员身份不是在本地定义的,而是来自LDAP。

    我有一个文件夹 /u/dir 属于 root:groupa 有权限 g+rws

    如果我跑 sudo su -s /bin/bash -c "mkdir /u/dir/subdir" apache 它工作正常,apache有权在 /u/方向

    但是,如果我在PHP中创建并运行以下脚本,它将失败,并被拒绝权限:`

    如果我跑 id阿帕奇 从shell可以看出: uid=48(apache) gid=123(groupa) groups=123(groupa)

    但是,如果从PHP运行以下命令,则会得到不同的结果:-

    <?php echo shell_exec("id");?>

    uid=48(apache) gid=48(apache) groups=48(apache)

    有什么想法可以解释为什么PHP(可能还有Apache/httpd进程)没有他们应该拥有的所有组成员资格,以及如何修复它?

    在有人建议之前,我做了一个测试;如果我将apache添加到/etc/group s中的一个组并重新启动apache,那么上面的调用将显示新的组,但它不会通过LDAP获取apache所属的组(而这个服务器是一个池,访问远程映射/u,因此我不想在每个服务器上手动复制每个组)

    我还要补充一点,我怀疑我们的服务器 id 通过LDAP获取信息 sssd

    看到: https://unix.stackexchange.com/questions/409843/how-to-get-the-supplementary-groups-ids-of-a-process

    如果我加上 <?php echo shell_exec("cat /proc/$$/status"); ?> 我可以看到,httpd进程没有 社保署 团体,只有本地的。

    为了清晰起见,请编辑:

    为了清楚起见,我应该加上 apache 到本地组 (300)testgroup ,然后运行 <?php echo shell_exec(“id”);?> 再次:-

    uid=48(apache) gid=48(apache) groups=48(apache),300(testgroup)

    因此,虽然很明显,但关键是核心进程权限,因为某些原因,当我启动时 httpd (作为 apache:apache ),它正在接收本地组 阿帕奇 是中的子组(“Groups”)的成员并将其添加到该子组 /proc/$$/status ),它不是在收集那些 阿帕奇 是via sssd的成员。这就是谜团。

    2 回复  |  直到 6 年前
        1
  •  0
  •   heiglandreas    6 年前

    你在拿苹果和梨作比较。

    作为用户apache在shell中运行的脚本将返回shell为用户提供的信息。

    但是,当您运行PHP脚本时,它不仅由apache用户运行,还由apache守护进程运行,该守护进程具有一个配置参数,作为运行子进程的用户和组。这会覆盖系统信息。我很确定你的apaches httpd.conf在某个地方包含组和用户“apache”。因此,PHP脚本作为用户apache和组apache执行——由于配置设置的原因,只有这一组。

    我不确定调用此PHP脚本时会发生什么情况:

    <?php
    echo shell_exec("/bin/bash id");
    

    因为这可能会调用一个新的bash会话。

        2
  •  0
  •   sibaz    6 年前

    结果我一点问题都没有。有人将apache用户的主组更改为我的远程组(在我的示例中为groupa),因此当apache根据httpd.conf文件以apache:apache运行时,它正在覆盖该主组。由于apache实际上并不是group a的成员,所以它似乎放弃了groupa。