Вызов системы (открыть ‹имя приложения.приложение›) иногда приводит к запуску приложения с правами root

У меня есть приложение (точнее, демон внутри /Library/StartupItems), работающее от имени пользователя root, которое время от времени запускает другой процесс, используя system("open /Applications/MyAppName.app"). Это работает нормально, за исключением того, что на некоторых компьютерах MyAppName запускается с правами root, а не под текущим пользователем.

Я пытаюсь понять, почему это так, и как я могу заставить приложение всегда запускаться как текущий пользователь.

Проблема возникает на корпоративных сайтах, использующих некоторую комбинацию каталогов Open/Active. У меня несколько ограниченный доступ к этим машинам, поэтому я пытаюсь хотя бы сформулировать некоторые гипотезы, прежде чем требовать больше времени на них.

Еще одна подсказка, которая у меня есть, заключается в том, что по крайней мере на одном из этих компьютеров, если вы откроете Activity Monitor и проверите процесс «Finder», в разделе «Пользователь:» отображается имя пользователя, но нет идентификатора пользователя (раздел «(UID)» полностью отсутствует).

Кроме того, родительский процесс отображается как «launchd (1)», а не как «launchd (95)», как в большинстве стандартных приложений. Я считаю, что этот экземпляр launchd запускается первым при каждой загрузке компьютера и работает от имени пользователя root, по сравнению с другим экземпляром запуска, который запускается от имени вошедшего в систему пользователя.

Помимо очевидных проблем с безопасностью, мне нужно, чтобы приложение не запускалось от имени пользователя root, чтобы оно поддерживало такие вещи, как открытие/видимость для двух одновременно зарегистрированных пользователей.

Есть ли у кого-нибудь идеи о том, что может быть причиной этого или как я могу решить эту проблему?


person Lawrence Johnston    schedule 06.07.2009    source источник


Ответы (1)


У меня есть несколько комментариев:

  1. Вы должны сделать своего демона надлежащим демоном запуска, т.е. вставить plist в /Library/LaunchDaemons. /Library/StartupItems устарел. См. http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html.

  2. Вероятно, вам не следует запускать второй демон непосредственно из вашего демона. Вероятно, вам следует сделать его другим демоном.

  3. Убедитесь, что вы знакомы с этой технологией. Примечание: http://developer.apple.com/technotes/tn2005/tn2083.html< /а>. Это необходимо прочитать, и оно должно объяснить, почему существует более одного процесса запуска, и должно дать вам достойную подсказку о том, что идет не так в вашем случае.

  4. Кроме того, open — это просто оболочка для Launch Services, к которой вы можете получить прямой доступ, а не вызывать system. Однако, как я уже сказал, вам не следует запускать второй демон с помощью open или Launch Services.

Если вы можете опубликовать более подробную информацию о том, что именно делают ваши демоны, мы могли бы дать вам совет, как лучше всего это сделать. Например, часто лучше запускать демон запуска по запросу, а не постоянно.

person Chris Suter    schedule 07.07.2009
comment
Спасибо, это немалая помощь. Я действительно переключился на использование демона пользовательского агента для своего второго приложения. - person Lawrence Johnston; 08.07.2009