Wie kann ich einen Daemon-Prozess als angegebener Benutzer beim Booten ohne interaktive Anmeldung starten?

Ich versuche, einen TeamCity Build Agent auf einem Mac Mini Server mit 10.7.3 einzurichten. Ich habe es erfolgreich zum Laufen gebracht und erstellt, aber nur, wenn ich mich anmelde und den Prozess manuell starte.

Wir möchten, dass der Prozess beim Start gestartet wird, was einfach zu bewerkstelligen ist, indem eine Plist-Datei im Ordner /Library/LaunchDaemon abgelegt wird. Leider funktioniert dies bei uns nicht, da der Prozess als root und nicht als unser angegebener Benutzer gestartet wird. Wir würden es wirklich vorziehen, die Dinge auf den Ordner des Benutzers zu beschränken und benötigen außerdem Zugriff auf einen Schlüsselbund, um die Mechanik der iOS-Codesignatur zu handhaben. Leider funktioniert die Verwendung von ~/Library/LaunchAgents nicht, da dies anscheinend erfordert, dass jemand das Terminal besucht und sich anmeldet – dies muss vom Booten aus gestartet werden und weiter ausgeführt werden, wenn der Benutzer abgemeldet ist.

Gibt es eine Möglichkeit, einen Prozess beim Booten als bestimmter Benutzer zu starten?

Antworten (2)

Sie können einfach als ein anderer Benutzer mit sudo -uwie folgt ausgeführt werden:

#!/bin/sh

UZER=jsmith

sudo -u "$UZER" /path/to/program/you/want/to/run

exit 0

Ändern Sie einfach „jsmith“ in den entsprechenden kurzen Benutzernamen, speichern Sie das dann irgendwo als Skript und rufen Sie es von /Library/LaunchDaemons auf

Denken Sie daran, dass alle Dateien in /Library/LaunchDaemons root gehören müssen, um ausgeführt zu werden.

(Ich denke, das hat bmike vorgeschlagen)

Andere Option

Ich habe jedoch ein HOWTO geschrieben, um die automatische Anmeldung sicherer zu machen:

Terminally Geeky: Verwenden Sie die automatische Anmeldung sicherer

Die Zusammenfassung lautet wie folgt:

  • Aktivieren Sie die automatische Anmeldung
  • Legen Sie diese Launchd-Plist in ~/Library/LaunchAgents ab
  • Neustart

Was es macht:

Sobald Sie sich anmelden, bringt Sie launchd zurück zum Anmeldebildschirm mit:

"/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession" -suspend

Beachten Sie, dass alles eine lange Zeile ist.

Wenn man bedenkt, dass jemand mit physischem Zugang zu Ihrem Computer viele potenzielle Exploits hat, halte ich dies für relativ sicher, aber natürlich muss jeder seine eigene Entscheidung treffen. Ich betreibe es in meinem kleinen Büro, aber mein iMac steht in meinem privaten Büro, das ich abschließen kann, wenn ich nicht da bin.

Beachten Sie auch, dass die automatische Anmeldung mit FileVault 2 nicht funktioniert .

Erhält das Ausführen von sudo -u Schlüsselbundzugriff für den angegebenen Benutzer?
Das weiß ich nicht. Sie können das securityTool ausprobieren, um zu sehen, ob Sie auf diese Weise darauf zugreifen können.
Am Ende war die automatische Anmeldung mit Ihrem Logout für unsere Zwecke gut genug.

Der einfache Weg besteht darin, diesen Benutzer so einzustellen, dass er sich automatisch anmeldet, und dann den Bildschirm mit aktiviertem schnellen Benutzerwechsel zu sperren. Andernfalls müssen Sie die harte Arbeit leisten, einen Benutzer auf Administratorebene zu erstellen und Ihr Skript oder Ihren Prozess mit einem bestimmten Benutzer starten zu lassen.

Prozesse, die gestartet werden, bevor die Benutzeranmeldesitzung beginnt, sind funktional root und müssen sich selbst herabstufen, wenn Sie nicht möchten, dass sie als root ausgeführt werden. Apple macht das mit dem Webserver und dem Benutzer _www und auf der Client-Seite laufen einige Prozesse als Benutzer none, _spotlight und , _mdnsresponder.

Erwischt. Erstere Option klingt wirklich hässlich, gibt es eine Dokumentation zur Durchführung der letzteren Option?
Ich würde mit developer.apple.com/library/mac/#documentation/MacOSX/… für die Dokumentation beginnen. Es ist dicht, also haben Sie darüber nachgedacht, Ihren Daemon so zu ändern, dass er sudoden Benutzer auswählt, anstatt ihn als geerbte Aufgabe zu starten. Ich habe das in letzter Zeit nicht ausprobiert, aber es ist schnell und könnte einfach funktionieren.