Quali passi sono necessari per creare un nuovo utente dalla riga di comando?


27

Quali comandi (o script) possono creare un account utente completamente funzionale su Mountain Lion, eseguendo solo dalla riga di comando tramite terminale o ssh.

Sembra che una coppia esistente di risposte potrebbe funzionare, ma mi chiedevo se ci fosse un breve script o uno strumento per creare account utente completamente funzionali su Mountain Lion?

Risposte:


33

Ecco uno script di shell che ho scritto al lavoro per gestirlo come parte del processo NetInstall (creazione automatica di un account amministratore locale durante il processo di imaging).

#!/bin/sh
. /etc/rc.common
dscl . create /Users/administrator
dscl . create /Users/administrator RealName "Administrator Account"
dscl . create /Users/administrator hint "Password Hint"
dscl . create /Users/administrator picture "/Path/To/Picture.png"
dscl . passwd /Users/administrator thisistheaccountpassword
dscl . create /Users/administrator UniqueID 501
dscl . create /Users/administrator PrimaryGroupID 80
dscl . create /Users/administrator UserShell /bin/bash
dscl . create /Users/administrator NFSHomeDirectory /Users/administrator
cp -R /System/Library/User\ Template/English.lproj /Users/administrator
chown -R administrator:staff /Users/administrator

Alcune note da menzionare:

  • L'ho salvato come file ".sh" eseguibile.
  • Poiché viene eseguito durante NetInstall, viene eseguito come root e deve funzionare come root per funzionare correttamente. È inoltre possibile sottrarre le prime due righe, aggiungere un "sudo" all'inizio di ogni riga successiva ed eseguirle manualmente come singoli comandi nel Terminale.
  • Modifica UniqueID da 501 a un numero che saprai sia sicuro su tutti i sistemi (501 è preso dal primo account creato su un Mac, in genere qualcosa di più alto come 550 sarà probabilmente sicuro, a seconda di quanti utenti hai sul tuo sistema) .
  • PrimaryGroupID di 80 crea un utente amministratore. Passare a PrimaryGroupID di 20 per creare un utente standard.
  • Ho ripreso oltre 50 Mac in questo modo senza problemi. Uso questo account per eseguire comandi tramite SSH, per inviare patch tramite ARD e per eseguire l'amministrazione locale sul lato scrivania.

Sembra promettente - lo proveremo presto!
bmike

Il problema che sembro avere quando provo ad adattare questo script per creare utenti regolari passando variabili allo script è che tutto, tranne l'ultima riga, funziona perfettamente. Cioè, dscl crea l'utente e quando uso dscl. elenco / utenti, l'utente si presenta bene, ma chown non riconosce l'utente e poiché non riesco a modificare correttamente le autorizzazioni della directory home, non consentirà a quell'utente di accedere. Qualche idea?

Vorrei poter. Uno dei miei punti deboli quando si tratta di shell scripting è che non ho mai imparato molto bene l'uso delle variabili, soprattutto perché non ho davvero bisogno di usarle per nulla a questo punto del mio lavoro. Forse @bmike o qualcun altro potrebbe essere in grado di offrire consigli.
bispymusic,

@HackintoshCoat puoi pubblicare la tua sceneggiatura? Nel tuo comando hai digitato "/ users" in minuscolo, quando in realtà è "/ Users". Dubito che sia questo il problema con la tua sceneggiatura; ma, controllando gli occhi, potrebbe essere in grado di trovare il problema abbastanza rapidamente. Ho uno script simile che in realtà imposta più utenti, quindi l'utilizzo delle variabili non è un problema.
Kent,

2
Al posto delle ultime due righe ( cp -R ...; chown -R ...), è possibile utilizzare il comando createhomedir -u administrator. createhomedirha anche una pagina man.
Alex Leach,

14

Per automatizzare ulteriormente ciò, è possibile utilizzare la seguente riga per ottenere il successivo ID utente "disponibile" se si è in esecuzione su un Mac in cui sono già impostati utenti.

LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`

NextID=$((LastID + 1))

Quindi, la riga corrispondente nella risposta bispymusic sopra potrebbe essere modificata:

 dscl . create /Users/administrator UniqueID $NextID

2

Ho alcuni aggiornamenti sulla risposta sopra.

dscl / -append /Groups/admin GroupMembership newUserName

Questo comando può essere utilizzato per consentire all'utente l'accesso amministrativo. Se questo comando non viene fornito, l'utente verrà automaticamente impostato come utente standard.

dscl . create /Users/newUserName PrimaryGroupID 80

Questo imposta l'id del gruppo principale dell'utente. 80 significa admin e 20 significa staff . E l'impostazione su 20 non renderà l'utente standard. A meno che il primo comando non sia menzionato.


Per chiarire, uno di questi comandi compirà la stessa cosa?
MaxGabriel,

Preferisco il primo comando, aggiungendo a / Gruppi / admin .
Vipin Johney,

0

Ecco uno script di shell che ho scritto per aggiungere nuovi utenti in Max OS X usando la riga di comando. Funziona come se fosse Linux. Sentiti libero di modificarne uno per le tue esigenze personali. Basta nominarlo useradd.sh e impostare le autorizzazioni corrette ( chmod 0700 useradd.shnel mio caso). Grazie a bispymusic, Alex Leach, Kent per il loro contributo.

Testato su OS X High Sierra

#!/bin/sh

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi

read -p "Enter user name and press [ENTER]: " UserName

if [[ $UserName == `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` ]]; then
    echo "User already exists!"
    exit 0
fi

read -p "Enter real name and press [ENTER]: " RealName
read -p "Enter PrimaryGroupID (80 - admin, 20 - user) and press [ENTER]: " PrimaryGroupID
LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`
NextID=$((LastID + 1))

. /etc/rc.common
dscl . create /Users/$UserName
dscl . create /Users/$UserName RealName $RealName

read -p "Enter password hint and press [ENTER]: " PasswordHint
dscl . create /Users/$UserName hint $PasswordHint
PasswordHint=0

echo " "
read -s -p "Enter Account Password and press [ENTER]: " AccountPassword
echo " "
read -s -p "Enter Account Password again and press [ENTER]: " AccountPasswordRepeat
if [[ $AccountPassword == $AccountPasswordRepeat ]]; then
  dscl . passwd /Users/$UserName $AccountPassword
  AccountPassword=0
else
  echo "Passwords do not match!"
  exit 1
fi
echo " "
dscl . create /Users/$UserName UniqueID $NextID
dscl . create /Users/$UserName PrimaryGroupID $PrimaryGroupID
dscl . create /Users/$UserName UserShell /bin/bash
dscl . create /Users/$UserName NFSHomeDirectory /Users/$UserName
createhomedir -u $UserName -c

echo " "
echo "New user `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` has been created with unique ID `dscl . -list /Users UniqueID | grep -w $UserName | awk '{print $2}'`"

puoi ottenere lo stesso dal mio succo


Potrebbe essere, NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))ma sembra solo migliore e più chiaro come è adesso.
Igor Voltaic,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.