У меня есть приложение (точнее, демон внутри /Library/StartupItems), работающее от имени пользователя root, которое время от времени запускает другой процесс, используя system("open /Applications/MyAppName.app")
. Это работает нормально, за исключением того, что на некоторых компьютерах MyAppName запускается с правами root, а не под текущим пользователем.
Я пытаюсь понять, почему это так, и как я могу заставить приложение всегда запускаться как текущий пользователь.
Проблема возникает на корпоративных сайтах, использующих некоторую комбинацию каталогов Open/Active. У меня несколько ограниченный доступ к этим машинам, поэтому я пытаюсь хотя бы сформулировать некоторые гипотезы, прежде чем требовать больше времени на них.
Еще одна подсказка, которая у меня есть, заключается в том, что по крайней мере на одном из этих компьютеров, если вы откроете Activity Monitor и проверите процесс «Finder», в разделе «Пользователь:» отображается имя пользователя, но нет идентификатора пользователя (раздел «(UID)» полностью отсутствует).
Кроме того, родительский процесс отображается как «launchd (1)
», а не как «launchd (95)
», как в большинстве стандартных приложений. Я считаю, что этот экземпляр launchd запускается первым при каждой загрузке компьютера и работает от имени пользователя root, по сравнению с другим экземпляром запуска, который запускается от имени вошедшего в систему пользователя.
Помимо очевидных проблем с безопасностью, мне нужно, чтобы приложение не запускалось от имени пользователя root, чтобы оно поддерживало такие вещи, как открытие/видимость для двух одновременно зарегистрированных пользователей.
Есть ли у кого-нибудь идеи о том, что может быть причиной этого или как я могу решить эту проблему?