php - 临时更改运行进程的身份
问题描述
我想临时更改正在运行的根进程的身份。
我已经阅读了这样做的方法是先调用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 怪癖吗?
解决方案
Mac os x 源自 Unix 的 BSD 分支,并且
根据 BSD Unix 语义,赋予新创建文件的组所有权无条件地从创建它的目录的组所有权继承。
(来自https://en.m.wikipedia.org/wiki/User_identifier#Effective_user_ID - 我找不到更好的来源)
创建文件后,您始终可以使用chgrp
更改组
推荐阅读
- ios - 如何在原生 IOS 中调用 Method 向 Flutter 发送数据?
- perl - 在子例程中打开文件以在 Perl 中进行读/写
- asp.net-mvc - ASP.NET Core 远程验证不起作用
- python - 在遍历列表时在数据框的一行中添加多个值
- flutter - 使用切换流时,如何处理限制为 10 的 Firestore?
- python - 关于 numpy 平均值和方便平均值的问题
- python - Tensorflow tf.math.tanh 无需大批量即可正确扩展网络输出
- mongodb - Mongodb - group() 不能处理超过 20000 个唯一键
- spring - 使用 Spring Data JPA 和 Hibernate 查询关系数据库
- google-apps-script - 我无法在工作表中使用自定义函数