Come posso creare account utente dal Terminale in Mac OS X 10.5?


86

Vorrei essere in grado di creare nuovi utenti in Mac OS X 10.5 da remoto dopo aver inserito la macchina. Come faccio a fare questo?


Non ho ancora la reputazione per rispondere, ma se stai cercando come farlo dalla single_usermodalità (un ripristino di sicurezza), dovrai riavviare tenendo premuto Command-S, ottenere l'accesso in scrittura al disco per i dettagli sullo schermo e quindi rm /var/db/.AppleSetupDoneti consentirà di creare un nuovo account amministratore. Spero che questo aiuti qualcuno
New Alexandria,

Risposte:


80

Utilizzare il comando dscl. Questo esempio creerebbe l'utente "luser", in questo modo:

dscl . -create /Users/luser
dscl . -create /Users/luser UserShell /bin/bash
dscl . -create /Users/luser RealName "Lucius Q. User"
dscl . -create /Users/luser UniqueID "1010"
dscl . -create /Users/luser PrimaryGroupID 80
dscl . -create /Users/luser NFSHomeDirectory /Users/luser

È quindi possibile utilizzare passwd per modificare la password dell'utente o utilizzare:

dscl . -passwd /Users/luser password

Dovrai creare / Users / luser per la home directory dell'utente e cambiarne la proprietà in modo che l'utente possa accedervi ed essere sicuro che UniqueID sia effettivamente unico.

Questa riga aggiungerà l'utente al gruppo dell'amministratore:

dscl . -append /Groups/admin GroupMembership luser

7
Come posso garantire che l'UID sia unico?
JR Lawhorne,

3
Non esiste un modo automatico; se lo script, puoi semplicemente fargli eseguire il comando "id ####" e assicurarti che restituisca "Nessun utente del genere" o qualche hack del genere.
palmer

1
Ricorda di usare sudo se non hai i permessi.
Raffi Khatchadourian,

A proposito, poiché questo è molto più dettagliato di quanto dovrebbe essere, ho portato questi comandi nella useraddsintassi.
Xiong Chiamiov,

1
Nota che PrimaryGroupID 80è admin, quindi luserpuoi usarlo sudoanche se non lo aggiungi al gruppo degli amministratori.
ruslo,

20

(Questa risposta dovrebbe essere considerata un addendum per riempire alcuni spazi vuoti nella procedura di Palmer)

Per scegliere un UniqueID non utilizzato per il nuovo utente, è possibile utilizzare:

maxid=$(dscl . -list /Users UniqueID | awk 'BEGIN { max = 500; } { if ($2 > max) max = $2; } END { print max + 1; }')
newid=$((maxid+1))

... quindi utilizza la sequenza di comandi dscl che palmer ha fornito per creare l'account, quindi crea la home directory del nuovo utente con:

cp -R /System/Library/User\ Template/English.lproj /Users/luser
chown -R luser:staff /Users/luser
if [[ "$(sw_vers -productVersion)" != 10.[0-5].* ]]; then
    # Set ACL on Drop Box in 10.6 and later
    chmod +a "user:luser allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit" /Users/luser/Public/Drop\ Box
fi

(c'è un comando createhomedir, ma non ha funzionato quando l'ho provato.)


1
Ho creato uno script che popola il nostro Open Directory Master con nuovi utenti, quindi chiama sudo createhomedir -s(IIRC) su Open Directory Replicas / Fileshares e crea felicemente le home directory.
Clinton Blackmore,

2
dscl -listè limitato a 256 risultati, quindi se hai più di 256 utenti, questa tecnica non garantirà un UID univoco.
smokris,

Piccolo trucco per sfrattare 2 pipe aggiuntive (usare solo awk): dscl. -list / Utenti UniqueID | awk '{if ($ 2> max) max = $ 2; } END {stampa max + 1; } "
Valtoni Boaventura il

@ValtoniBoaventura Nice. L'ho incorporato per risposta (con un valore predefinito nel caso in cui non ci siano account regolari). Ho anche aggiunto un passaggio per impostare il Drop Box ACL (che è stato aggiunto in 10.6).
Gordon Davisson,


7

Un altro modo per scegliere un ID utente univoco prima di creare un account è solo guardare l'elenco e verificare che quello che si desidera utilizzare non sia presente:

 sudo dscl . list /Users uid
 sudo dscl . list groups gid

Comodo se è necessario utilizzare un determinato ID


dscl -listè limitato a 256 risultati, quindi se hai più di 256 utenti, questa tecnica non garantirà un UID univoco.
smokris,

sì, questo è il percorso più breve per aggiungere quell'utente proprio qui in questo momento, solo grepcon quello idche avevi in ​​mente di utilizzare per il nuovo utente
yair

7

Ho sfruttato le diverse risposte qui per trovare quello che penso sia un bel copione per creare account utente. Certo, questo non è progettato per eseguire un comando alla volta da ssh; è progettato per essere eseguito come script durante la compilazione di un'immagine basata su pacchetti di OS X (come creata da Casper Imaging o InstaDMG ).

#!/bin/bash
# This script creates a user account under Mac OS X
# (tested with 10.5 and 10.6; likely works with 10.4 but not earlier)
# Written by Clinton Blackmore, based on work at
# http://serverfault.com/questions/20702

# === Typically, this is all you need to edit ===

USERNAME=joeadmin
FULLNAME="Joe Admin"
PASSWORD="hard_to_hack"

# A list of (secondary) groups the user should belong to
# This makes the difference between admin and non-admin users.
# Leave only one uncommented
#SECONDARY_GROUPS=""  # for a non-admin user
SECONDARY_GROUPS="admin _lpadmin _appserveradm _appserverusr" # for an admin user

# ====

if [[ $UID -ne 0 ]]; then echo "Please run $0 as root." && exit 1; fi

# Find out the next available user ID
MAXID=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
USERID=$((MAXID+1))

# Create the user account
dscl . -create /Users/$USERNAME
dscl . -create /Users/$USERNAME UserShell /bin/bash
dscl . -create /Users/$USERNAME RealName "$FULLNAME"
dscl . -create /Users/$USERNAME UniqueID "$USERID"
dscl . -create /Users/$USERNAME PrimaryGroupID 20
dscl . -create /Users/$USERNAME NFSHomeDirectory /Users/$USERNAME

dscl . -passwd /Users/$USERNAME $PASSWORD


# Add use to any specified groups
for GROUP in $SECONDARY_GROUPS ; do
    dseditgroup -o edit -t user -a $USERNAME $GROUP
done

# Create the home directory
createhomedir -c > /dev/null

echo "Created user #$USERID: $USERNAME ($FULLNAME)"

Lo script consente di specificare a quali gruppi deve appartenere un utente. Mi sembra che ciò potrebbe differire in base alla versione di OS X in uso. Ottengo risultati diversi quando corro idcome amministratore su OS X 10.6 rispetto a quando corro come amministratore su OS X 10.5.


In un'altra risposta, Elliott avverte che il comando 'createhomedir -c', verso la fine, creerà account per tutti gli utenti nella directory a cui siete destinati. (L'opzione '-c', nella pagina man, 'crea home directory solo per i percorsi home locali.') C'è un'altra opzione, '-u username', che potrebbe funzionare meglio.
Clinton Blackmore,

ciao sto usando lo script sopra. Quindi aggiunge il mio nuovo utente ma quando l'utente si connetterà al suo calendario dice che non ha i permessi! Mi potete aiutare ?

@jimmy: consiglierei di porre una nuova domanda su serverfault e di collegarmi a questa risposta piuttosto che fare semplicemente una domanda nei commenti, che sarà raramente vista. Mi aspetto che le autorizzazioni siano giuste. L'uso di 'chown' e 'chmod' può aiutare se riesci a identificare un file che non ha i permessi corretti ... ma non so quale sarebbe.
Clinton Blackmore,

dscl -listè limitato a 256 risultati, quindi se hai più di 256 utenti, questa tecnica non garantirà un UID univoco.
smokris,

4

Ho iniziato un piccolo wrapper sui parametri dsclche richiede useradd- non è completo (né penso che possa essere, in quanto alcune cose non sono possibili su OS X), ma l'ho usato per creare alcuni utenti.

Il framework è lì per tutti i parametri, quindi se vuoi sfruttare le fantastiche funzionalità social di GitHub, è facile da fare.


L'esecuzione # gem install osx-useradd.gemspecsu OS X 10.5 risulta ERROR: While executing gem ... (Gem::RemoteSourceException)e la seconda riga è HTTP Response 301 fetching http://gems.rubyforge.org/yaml.
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.