LaunchAgent hat einen unerwünschten Root-Zugriff

564
user1169420

Ich habe ein Problem damit, dass mein LaunchAgent als normaler Benutzer (nicht als Root) ausgeführt wird. Alles, was ich gelesen habe, impliziert, dass dies das Standardverhalten sein sollte. Die Erwartung ist, dass, wenn Sie die plist in / Library / LaunchAgents ablegen, sie beim Laden für den Benutzer als Benutzer beim Benutzer-Login geladen wird.

Was ich jedoch feststelle, ist, dass, wenn Sie launchctl mit sudo ausführen ('sudo launchctl load /Library/LaunchAgents/myagent.plist'), der Prozess in der Benutzersitzung als root gestartet wird . Dies bedeutet, dass "ps u -ax" den Prozess darstellt, der als "root" ausgeführt wird, und auch, dass die durch den Prozess erstellten Dateien im Besitz von root: staff sind

Ich habe versucht, darüber zu googeln und habe eine Menge Posts gefunden, wie jemand möchte, dass sein Agent Root-Zugriff hat (was IMO "falsch" ist) und sie alle diese Forenbeiträge über " Wie kann ich es Root geben " und jeder ist Beantworten, um zu erklären, "dass es nicht root wird, es ist ein Benutzeragent " ... Das erwarte ich, obwohl ich das gegenteilige Problem habe. Ich möchte nicht, dass dieser Agent root-Zugriff hat, sollte es nicht haben es hat es doch.

Wenn die Antwort lautet: " Sie können das Starten von Launchctl einfach nicht mit Sudo ausführen oder das passiert ", konnte ich das nirgendwo dokumentieren. Und wenn dies der Fall ist, wie kann ich dann einen Launchctl von einem Daemon entladen / laden, der über Root-Zugriff verfügen sollte. Was muss ich tun, damit sich das Produkt selbst aktualisieren kann?

BEARBEITEN: Hier ist ein Beispiel für einen häufig verknüpften Beitrag, der den Eindruck erweckt, dass dies nicht einmal ein Problem sein sollte. Es scheint, als könnte der Agent nicht als root ausgeführt werden, selbst wenn Sie es wollten ... https: // superuser .com / a / 36173/603140

0
warum nicht in ~ / Library / LaunchAgents? Tetsujin vor 8 Jahren 0
Weil es für jeden Benutzer laufen muss. Dies sollte sich jedoch nicht darauf auswirken, ob es als root ausgeführt wird oder nicht, soweit ich das anhand der Dokumente feststellen kann. Die Dokumente (und die meisten Diskussionen) lassen es so aussehen, als sei es irgendwo anders, aber als / Lirbrary / LaunchDaemons sollte es als Benutzer ausgeführt werden. Ich finde, es hat mehr damit zu tun, ob launchctl mit sudo läuft. user1169420 vor 8 Jahren 0

1 Antwort auf die Frage

0
Gordon Davisson

launchd führt eine separate Liste von Elementen für jede Benutzersitzung ("Launch Agents") und eine für den Systemkontext ("Launch Daemons"). Wenn Sie launchctl loadals Root ausgeführt werden, wird das Element in die Systemliste geladen (dh als Start-Daemon anstelle eines Agenten), unabhängig davon, wo sich die Datei befindet . Was Sie tun müssen, hängt davon ab, was Sie genau erreichen möchten:

  • Wenn Sie versuchen, das Element als Startagenten in zukünftige Benutzersitzungen zu laden (z. B. für die nächste Anmeldung), legen Sie es einfach in / Library / LaunchAgents ab, legen Sie die Berechtigungen richtig fest und lehnen Sie sich zurück. Wenn sich ein Benutzer anmeldet, scannt er dieses Verzeichnis und lädt, was er findet.

  • Wenn Sie versuchen, das Element in eine vorhandene Anmeldesitzung zu laden, müssen Sie launchctl load diese Sitzung ausführen . Was genau das bedeutet und wie Sie es tun, ist kompliziert und kann davon abhängen, welche Version von OS X Sie verwenden (Apple ändert die Launchd-Architektur ständig ...). Zumindest in älteren Versionen von OS X müssen Sie die Prozess-ID eines Prozesses ermitteln, der in der Sitzung ausgeführt wird, für die Sie ein Targeting durchführen, und Folgendes ausführen:

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

    Erläuterung: Der erste sudowechselt zu root, wechselt dann launchctl bsexec $PIDInTargetSessionzum mach-Bootstrap-Kontext der Zielsitzung (ich sagte, es sei kompliziert), wechselt dann die sudo -u $TargetUsernameUID vom Stamm zum Zielbenutzer und launchctl load /Library/LaunchAgents/youritem.plistlädt schließlich den Agenten in dieser Sitzung.

Wenn dies nicht der Fall ist, überprüfen Sie diese Nachricht auf Alternativen.

Danke, das ist sehr hilfreich. Leider habe ich nicht die Vertretung, um Sie sogar zu verteidigen. Ich hatte vermutet, dass es schien, als würde er als Dämon aus dem Agentenordner geladen, aber 1 ich konnte keine Dokumente finden, die diese Möglichkeit unterstützen, und 2 das Programm hat eine sichtbare GUI, die ich für Dämonen nicht gedacht hätte. Können Sie auf irgendwelche Dokumente dazu verweisen, oder ist es nur Kontextwissen und gesunder Menschenverstand für Sie? user1169420 vor 8 Jahren 0
@ user1169420 Ich würde nicht sagen, dass "gesunder Menschenverstand" viel damit zu tun hatte - einige Lektüre (Apples [Entwickler-Tech-Hinweis TN2083, "Daemons and Agents") (https://developer.apple.com/library/mac/ technotes / tn2083 / _index.html) war besonders hilfreich) und ein gewisses Maß an Experimenten beim Versuch, verschiedene Dinge über die Jahre zum Laufen zu bringen ... Gordon Davisson vor 8 Jahren 0