【发布时间】: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 似乎创建了自己的环境 - 有人知道吗?
【问题讨论】: