我有一个以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
运行。
答案 0 :(得分:1)
设置UID后向脚本添加posix_setgid($userInfo['gid']);
应该可以解决问题。
答案 1 :(得分:1)
您可以在事后使用chgrp()或尝试使用相同的posix方法,但使用该组:posix_setgid()。
函数调用的适当顺序首先是posix_setgid(),最后是posix_setuid()。