Qual è il modo giusto per creare un utente su MacOS X, dalla riga di comando, che verrà utilizzato solo per l'esecuzione di un'applicazione separata? Ad esempio, esiste già l'utente '_www' per Apache httpd, ma per la nuova applicazione voglio che utilizzi il proprio account.Crea un utente per l'esecuzione di un demone, su MacOS X?
risposta
Non esiste un comando "adduser". L'approccio Mac prevede l'uso del comando dscl, che è "l'utilità della riga di comando del servizio directory". I servizi di directory sono simili nella nozione di LDAP, ma è una soluzione diversa.
Gli esempi seguenti utilizzeranno 'mydaemon' come account previsto, anche se in genere si utilizzerà un valore corrispondente al nome dell'applicazione daemon.
Tutti gli utenti daemon hanno il prefisso con un carattere di sottolineatura, ad esempio _www.
Per elencare gli attributi su una voce esistente:
sudo dscl . -read /Users/_www
Prima di creare un utente, creare un gruppo di scegliere un id gruppo inutilizzato (qui abbiamo scelto 300):
sudo dscl . -create /Groups/_mydaemon
sudo dscl . -create /Groups/_mydaemon PrimaryGroupID 300
Una volta fatto, creiamo un nuovo utente (usiamo lo stesso ID come abbiamo fatto per il gruppo, che non userà una shell:
sudo dscl . -create /Users/_mydaemon UniqueID 300
sudo dscl . -create /Users/_mydaemon PrimaryGroupID 300
sudo dscl . -create /Users/_mydaemon UserShell /usr/bin/false
Quanto sopra si basa sulla lettura di varie fonti di informazione e sulla verifica del processo stesso. Uno di riferimento, che ho trovato utile è:
http://minecraft.gamepedia.com/Tutorials/Create_a_Mac_OS_X_startup_daemon
Nota, c'è anche la versione GUI di dscl (posizione sulla base di MacOS X 10.10):
/System/Library/CoreServices/Applicazioni/Directory \ Utility.app/
L'ultimo GID utilizzato può essere trovato con il comando 'dscacheutil -q group | gp di grep | tail -n 1' – Sphinges
Il comando suggerito da [@sphinges] (https://stackoverflow.com/users/1710017/sphinges) è errato. Gli id di gruppo non sono necessariamente elencati in ordine crescente così l'ultimo, ma non necessariamente il più alto viene restituito '' 'dscacheutil -q group | gp di grep | awk '{print $ 2}' | ordina -n | tail -n 1'' dovrebbe funzionare meglio, anche se preferisco di gran lunga vedere gli ultimi 15 o giù di lì, dato che sopra 260 tendono ad essere piuttosto sparse '' 'dscacheutil -q group | gp di grep | awk '{print $ 2}' | ordina -n | coda -n 15''' – Scott