我有一个以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)
如何强制使用正确的Gid
?
旁注:脚本需要能够作为root运行,并且在我的方案中,使用su - $user
运行不是一个选项。
您可以在事实之后使用CHGRP(),也可以尝试相同的POSIX方法,但使用组:posix_setgid()。
适当的函数调用顺序为posix_setgid()首先,posix_setuid()last。
设置UID后将posix_setgid($userInfo['gid']);
添加到脚本中。