LaunchAgent имеет нежелательный root-доступ

460
user1169420

У меня проблема с запуском моего LaunchAgent от имени обычного пользователя (не root). Все, что я прочитал, подразумевает, что это должно быть поведение по умолчанию. Ожидается, что если вы поместите plist в / Library / LaunchAgents, то при загрузке он загружается для пользователя, как пользователя, при входе пользователя в систему.

Однако я обнаружил, что если вы запускаете launchctl с помощью sudo ('sudo launchctl load /Library/LaunchAgents/myagent.plist'), тогда процесс запускается в сеансе пользователя с правами root . Это означает, что «ps u -ax» показывает процесс, выполняющийся как «root», а также файлы, созданные процессом, принадлежат root: staff

Я попытался погуглить по этому поводу и нашел тонну сообщений, как будто кто-то хочет, чтобы у их агента был root-доступ (что IMO «неправильно»), и они делают все эти сообщения на форуме о том « как я могу дать ему root », и все отвечая, чтобы объяснить: « он не получает root, это пользовательский агент » ... Это то, что я ожидаю, однако у меня возникла противоположная проблема, я не хочу, чтобы у этого агента был root-доступ, он не должен иметь это, все же это имеет это.

Если ответ « вы просто не можете запустить launchctl с помощью sudo или это происходит », я не смог найти это нигде. И если это так, то как мне выполнить запуск / выгрузку launchctl на Агенте от демона, который должен иметь root-доступ, что мне нужно сделать, чтобы продукт сам обновился?

РЕДАКТИРОВАТЬ: Вот пример часто связанного сообщения, из-за которого кажется, что это не должно быть проблемой, из-за чего агенту кажется невозможным работать от имени пользователя root, даже если вы этого хотите ... https: // superuser .com / а / 36173/603140

0
почему бы не поместить его в ~ / Library / LaunchAgents? Tetsujin 7 лет назад 0
Потому что он должен работать для каждого пользователя. Но это не должно влиять на то, запускается ли он от имени root, насколько я могу судить из документации. Документы (и большинство обсуждений) делают так, чтобы они звучали так же долго, как и где угодно, но / Lirbrary / LaunchDaemons он должен запускаться как пользователь. Я обнаружил, что это больше связано с тем, что launchctl запускается с помощью sudo. user1169420 7 лет назад 0

1 ответ на вопрос

0
Gordon Davisson

launchd maintains a separate list of items for each user session ("launch agents"), and one for the system context ("launch daemons"). When you run launchctl load as root, the item is loaded into the system list (i.e. as a launch daemon instead of an agent) no matter where the file is located. What you need to do depends on exactly what you're trying to accomplish:

  • If you're trying to get the item to load as a launch agent into future user sessions (i.e. for the next time you log in), just put it in /Library/LaunchAgents, set the permissions properly, then sit back and relax. When a user logs in it scans that directory and loads whatever it finds.

  • If you're trying to get the item to load into an existing login session, you need to run launchctl load in that session. Exactly what that means and how you do it is complicated, and may depend on which version of OS X you're running (Apple keeps changing the launchd architecture...). At least in older versions of OS X, you'd have to find the process ID of some process running in the session you're targeting, and run something like:

    sudo launchctl bsexec $PIDInTargetSession sudo -u $TargetUsername launchctl load /Library/LaunchAgents/youritem.plist 

    Explanation: the first sudo switches to root, then launchctl bsexec $PIDInTargetSession switches to the target sessions's mach bootstrap context (I said it was complicated), then sudo -u $TargetUsername switches UID from root to the target user, then finally launchctl load /Library/LaunchAgents/youritem.plist loads the agent in that session.

If that doesn't do it, check this message for some alternatives.

Спасибо, это очень полезно. К сожалению, у меня нет представителя, чтобы даже поддержать вас. Я подозревал, что похоже, что он загружается как демон из папки агента, но 1 я не смог найти никаких документов, подтверждающих эту возможность, и 2 программа имеет видимый графический интерфейс, который, как я думал, не может быть у демонов. Можете ли вы указать какие-либо документы по этому поводу, или это просто контекстуальные знания и здравый смысл для вас? user1169420 7 лет назад 0
@ user1169420 Я бы не сказал, что «здравый смысл» во многом с этим связан - какое-то чтение (Apple [техническая записка TN2083 для разработчиков, «Демоны и агенты»]) (https://developer.apple.com/library/mac/ technotes / tn2083 / _index.html) был особенно полезен), и определенное количество экспериментов в процессе попыток заставить различные вещи работать на протяжении многих лет ... Gordon Davisson 7 лет назад 0