首页 > 解决方案 > 临时更改运行进程的身份

问题描述

我想临时更改正在运行的进程的身份。

我已经阅读了这样做的方法是先调用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 怪癖吗?

标签: phpmacosposix

解决方案


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

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

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

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


推荐阅读