У меня есть программа, которая запускается от имени пользователя root (getuid()
возвращает 0).
Мне нужно запустить инструмент командной строки как пользователь, который в данный момент вошел в систему (что я могу определить по получению HOME env var ). (Подробности см. Ниже)
Как мне это сделать, в идеале с помощью NSTask
?
Я знаю, как запустить инструмент, используя NSTask в качестве текущего (root) пользователя, поэтому все, что мне нужно, это знать, что мне нужно изменить в этом.
В качестве альтернативы, есть ли способ запустить раздел кода моей программы под другим идентификатором пользователя?
Разработка
В частности, указанная программа запускается AuthorizationExecuteWithPrivileges
. Интересно, что это дает программе немного иную среду, как при запуске программы с помощью sudo:
С помощью sudo фактический и эффективный пользователь (от getuid()
и geteuid()
) оба являются "root".
Однако с AuthorizationExecuteWithPrivileges
эффективный пользователь остается тем пользователем, который вызвал эту функцию. Это имеет некоторые странные эффекты, например затем программа использует NSUserDefaults, поскольку они попадают в разные домены, как показывает мое тестирование.