Я хочу временно изменить личность бега корень процесс.
Я прочитал способ сделать это, чтобы сначала позвонить 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 происходит от ветви BSD Unix, и
В соответствии с семантикой BSD Unix, принадлежность группы к вновь созданному файлу безоговорочно наследуется от принадлежности группы к каталогу, в котором он был создан.
(От https://en.m.wikipedia.org/wiki/User_identifier#Effective_user_ID — Я не могу найти лучший источник)
Вы всегда можете использовать chgrp
изменить группу после создания файла
Других решений пока нет …