【问题标题】:group membership of www-data differs when script is run via php-fpm通过 php-fpm 运行脚本时,www-data 的组成员身份不同
【发布时间】:2017-03-07 20:08:43
【问题描述】:

我有一个奇怪的问题。我有一个通过 php 调用的 bash 脚本,当通过 php-fpm 调用时,组成员身份有所不同。从命令行调用时,www-data 是组 ums 的成员,但被 php-fpm 调用时它不是。

#!/bin/bash
echo -e "$(id) \n$(id www-data)" > id.log

从命令行调用时一切正常:

$ su www-data -c id_log.sh && cat id.log

uid=33(www-data) gid=33(www-data) groups=33(www-data),1055(ums)
uid=33(www-data) gid=33(www-data) groups=33(www-data),1055(ums)

相同组:不带参数的 id 与带 www-data 作为参数的 id 给出相同的结果。但是当通过 php-fpm 和 nginx 调用时,它的行为异常,并且 www-data 不在 ums 组中:

<?php
exec("id_test.sh")
?>


$ cat id.log

uid=33(www-data) gid=33(www-data) groups=33(www-data)
uid=33(www-data) gid=33(www-data) groups=33(www-data),1055(ums)

当从命令行通过 php 调用时,它是不同的:

$ php -f call_id_log.php && cat id.log

uid=33(www-data) gid=33(www-data) groups=33(www-data),1055(ums) 
uid=33(www-data) gid=33(www-data) groups=33(www-data),1055(ums)

php 本身的行为与预期相同,但 php-fpm 似乎创建了自己的环境 - 有人知道吗?

【问题讨论】:

    标签: php bash shell sh


    【解决方案1】:

    答案很简单。在更改www-data 的组成员身份后,php-fpm 在重新启动之前无法识别该更改。我没想到。

    $ usermod -aG ums www-data
    $ systemctl reload php5-fpm.service
    

    一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 2022-11-05
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多