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

简而言之,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运行以下命令,则会得到不同的结果:-

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

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

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

我还要补充一点,我怀疑我们的服务器

id

通过LDAP获取信息

sssd

如果我加上

我可以看到,httpd进程没有

社保署

团体,只有本地的。

为了清晰起见,请编辑:

为了清楚起见,我应该加上

apache

到本地组

(300)testgroup

,然后运行

再次:-

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

因此,虽然很明显,但关键是核心进程权限,因为某些原因,当我启动时

httpd

(作为

apache:apache

),它正在接收本地组

阿帕奇

是中的子组(“Groups”)的成员并将其添加到该子组

/proc/$$/status

),它不是在收集那些

阿帕奇

是via sssd的成员。这就是谜团。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值