当脚本通过php-fpm运行时,www-data的组成员资格不同

时间:2017-03-07 20:08:43

标签: php bash shell sh

我这里有一个奇怪的问题。我有一个通过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给出与id www-data作为参数相同的结果。但是当通过php-fpm和nginx调用时,它会出现意外行为且www数据不在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似乎创造了自己的环境 - 有人在这里有线索吗?

1 个答案:

答案 0 :(得分:0)

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

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

一切都很好。