Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当以root用户身份运行时,如何让PHP创建具有特定组的文件?_Php_Unix_Posix - Fatal编程技术网

当以root用户身份运行时,如何让PHP创建具有特定组的文件?

当以root用户身份运行时,如何让PHP创建具有特定组的文件?,php,unix,posix,Php,Unix,Posix,我有一个以root运行的PHP脚本。脚本将创建一些文件,这些文件应属于指定的用户和组。我已设法使脚本使用正确的所有者创建文件,但是,与文件关联的组仍然是root 以下是我所做工作的概念证明: $userInfo = posix_getpwnam('eric'); posix_initgroups($userInfo['name'], $userInfo['gid']); posix_setuid($userInfo['uid']); file_put_contents('test.txt',

我有一个以root运行的PHP脚本。脚本将创建一些文件,这些文件应属于指定的用户和组。我已设法使脚本使用正确的所有者创建文件,但是,与文件关联的组仍然是
root

以下是我所做工作的概念证明:

$userInfo = posix_getpwnam('eric');
posix_initgroups($userInfo['name'], $userInfo['gid']);
posix_setuid($userInfo['uid']);

file_put_contents('test.txt', 'Some content');
然后我以root用户身份运行它:

sudo php test.php
它创建一个绑定到根组的文件:

Access: (0644/-rw-r--r--)  Uid: ( 1000/    eric)   Gid: (    0/    root)
如何强制PHP使用正确的
Gid
创建文件

旁注:脚本需要能够以root用户身份运行,在我的场景中不能选择使用
su-$user
运行。

添加
posix_setgid($userInfo['gid'),这样就可以了。

您可以在事后使用,也可以尝试相同的posix方法,但使用组:

函数调用的适当顺序是:posix_setgid()先,posix_setuid()后


在posix_setuid()之前,而不是之后。您必须是root用户才能更改UID或GID,并且调用
posix_setuid()
会删除root权限。无论哪种方式都有效。在我这一方都无法正常工作。除非进程当前在superuser下运行,否则无法更改为任何其他组。如果您在此处的唯一目标是使用其他用户和组创建文件,那么posix就太过分了,只需使用chown和chgrp即可。