当以root用户身份运行时,如何让PHP创建具有特定组的文件?
我有一个以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
以下是我所做工作的概念证明:
$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')设置UID后对脚本进行编码>,这样就可以了。您可以在事后使用,也可以尝试相同的posix方法,但使用组:
函数调用的适当顺序是:posix_setgid()先,posix_setuid()后
在posix_setuid()之前,而不是之后。您必须是root用户才能更改UID或GID,并且调用posix_setuid()
会删除root权限。无论哪种方式都有效。在我这一方都无法正常工作。除非进程当前在superuser下运行,否则无法更改为任何其他组。如果您在此处的唯一目标是使用其他用户和组创建文件,那么posix就太过分了,只需使用chown和chgrp即可。