运行过程中临时改变身份

时间:2019-02-02 16:52:45

标签: php macos posix

我想临时更改正在运行的 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怪癖吗?

1 个答案:

答案 0 :(得分:1)

Mac os x源自Unix的BSD分支,并且

  

根据BSD Unix语义,赋予新创建文件的组所有权无条件地继承于创建该文件的目录的组所有权。

(来自https://en.m.wikipedia.org/wiki/User_identifier#Effective_user_ID-我找不到更好的来源)

创建文件后,您始终可以使用chgrp来更改组