2015-09-27 9 views
5

Was ist der richtige Weg, um einen Benutzer auf MacOS X von der Kommandozeile aus zu erstellen, der nur für die Ausführung einer Server-Anwendung verwendet wird? Zum Beispiel gibt es bereits den Benutzer "_www" für Apache httpd, aber für die neue Anwendung möchte ich, dass er sein eigenes Konto verwendet.Erstellen Sie einen Benutzer zum Ausführen eines Daemon auf MacOS X?

Antwort

7

Es gibt keinen "adduser" -Befehl. Der Mac-Ansatz besteht darin, den dscl-Befehl zu verwenden, der das "Directory Service Command Line Utility" ist. Directory Services ähnelt LDAP, ist aber eine andere Lösung.

In den folgenden Beispielen wird 'mydaemon' als das beabsichtigte Konto verwendet, obwohl Sie normalerweise einen Wert verwenden würden, der dem Namen Ihrer Daemon-Anwendung entspricht.

Allen Daemon-Benutzern wird ein Unterstrich vorangestellt, z. B. _www.

Um die Attribute auf einem vorhandenen Eintrag Liste:

sudo dscl . -read /Users/_www 

Bevor Sie einen Benutzer erstellen, erstellen Sie eine Gruppe eine freie Gruppe ID Auswahl (hier wählten wir 300):

sudo dscl . -create /Groups/_mydaemon 
    sudo dscl . -create /Groups/_mydaemon PrimaryGroupID 300 

Ist das erledigt, wir einen neuen Benutzer (wir die gleiche ID verwenden, wie wir für die Gruppe haben, die nicht eine Shell verwenden werden:

sudo dscl . -create /Users/_mydaemon UniqueID 300 
    sudo dscl . -create /Users/_mydaemon PrimaryGroupID 300 
    sudo dscl . -create /Users/_mydaemon UserShell /usr/bin/false 

Das Vorstehende basiert darauf, verschiedene Informationsquellen zu lesen und den Prozess selbst zu überprüfen. Eine Referenz, die ich gefunden nützlich ist:

http://minecraft.gamepedia.com/Tutorials/Create_a_Mac_OS_X_startup_daemon

Hinweis gibt es auch GUI-Version von dscl (Standort basierend auf MacOS X 10.10):

/System/Library/Coreservices/Anwendungen/Verzeichnis \ Utility.app/

+0

Die zuletzt verwendete GID kann mit dem Befehl 'dscacheutil -q group | gefunden werden grep gid | tail -n 1' – Sphinges

+1

Der von [@sphinges] (https://stackoverflow.com/users/1710017/sphinges) vorgeschlagene Befehl ist falsch. Die Gruppen-IDs sind nicht unbedingt in aufsteigender Reihenfolge aufgelistet, daher wird die letzte, aber nicht unbedingt die höchste zurückgegebene '' 'dscacheutil -q-Gruppe | grep gid | awk '{print $ 2}' | sortieren -n | tail -n 1''' sollte besser funktionieren, obwohl ich es vorziehe, die letzten 15 zu sehen, da sie über 260 eher ziemlich dünn sind "dscacheutil -q group | grep gid | awk '{print $ 2}' | sortieren -n | Schwanz -n 15''' – Scott