我想临时更改正在运行的 root 进程的标识。
我有读做到这一点的方法是将第一个呼叫setegid
,然后seteuid
。
问题是该组以某种方式被忽略了:
<?php
# This is executed as root.
var_dump(posix_setegid(61)); # localaccounts(61)
var_dump(posix_seteuid(502)); # bot(502)
$fp = fopen("/tmp/test", "w+b");
system("ls -la /tmp/test");
unlink("/tmp/test");
输出:
$ sudo php -f /tmp/test.php
bool(true)
bool(true)
-rw-r--r-- 1 bot wheel 0 Feb 2 17:49 /tmp/test
但是我希望它能输出:
-rw-r--r-- 1 bot localaccounts 0 Feb 2 17:49 /tmp/test
我想念什么吗?
更新:它可在Linux计算机上使用。这是怪异的OSX怪癖吗?
答案 0 :(得分:1)
Mac os x源自Unix的BSD分支,并且
根据BSD Unix语义,赋予新创建文件的组所有权无条件地继承于创建该文件的目录的组所有权。
(来自https://en.m.wikipedia.org/wiki/User_identifier#Effective_user_ID-我找不到更好的来源)
创建文件后,您始终可以使用chgrp
来更改组