Wie erstelle ich Benutzerkonten über das Terminal in Mac OS X 10.5?

86

Ich möchte in der Lage sein, neue Benutzer in Mac OS X 10.5 aus der Ferne zu erstellen, nachdem ich sie in den Computer eingelesen habe. Wie mache ich das?

JR Lawhorne
quelle
Ich habe noch nicht den Ruf zu antworten, aber wenn Sie dies aus dem single_userModus heraus tun Command-Smöchten (ein Sicherheits-Reset), müssen Sie einen Neustart durchführen und die Bildschirmdetails beachten, um Schreibzugriff auf die Festplatte zu erhalten und dann rm /var/db/.AppleSetupDonekönnen Sie ein neues Administratorkonto erstellen. Hoffe, das hilft jemandem
New Alexandria

Antworten:

80

Verwenden Sie den Befehl dscl. In diesem Beispiel würde der Benutzer "luser" folgendermaßen erstellt:

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

Sie können dann mit passwd das Kennwort des Benutzers ändern oder Folgendes verwenden:

dscl . -passwd /Users/luser password

Sie müssen / Users / luser für das Basisverzeichnis des Benutzers erstellen und den Eigentümer ändern, damit der Benutzer darauf zugreifen kann, und sicherstellen, dass die UniqueID tatsächlich eindeutig ist.

Diese Zeile fügt den Benutzer der Administratorgruppe hinzu:

dscl . -append /Groups/admin GroupMembership luser
palmer
quelle
7
Wie stelle ich sicher, dass die UID eindeutig ist?
JR Lawhorne
3
Es gibt keinen automatischen Weg; Wenn Sie dieses Skript ausführen, können Sie einfach den Befehl "id ####" ausführen und sicherstellen, dass "No such user" oder ein solcher Hack zurückgegeben wird.
Palmer
1
Denken Sie daran, sudo zu verwenden, wenn Sie keine Berechtigungen haben.
Raffi Khatchadourian
Übrigens, da dies viel ausführlicher ist als es sein sollte, habe ich diese Befehle in die useraddSyntax portiert .
Xiong Chiamiov
1
Beachten Sie, dass PrimaryGroupID 80ist admin, so luserverwenden können , sudoauch wenn Sie ihn an die Administratoren der Gruppe nicht hinzugefügt werden .
Ruslo
20

(Diese Antwort sollte als Nachtrag zum Ausfüllen einiger Lücken in Palmers Prozedur betrachtet werden.)

Um eine nicht verwendete UniqueID für Ihren neuen Benutzer auszuwählen, können Sie Folgendes verwenden:

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

... dann benutze die Sequenz von dscl-Befehlen, die palmer gegeben hat, um das Konto zu erstellen, und erstelle dann das Home-Verzeichnis des neuen Benutzers mit:

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

(Es gibt einen Befehl createhomedir, der beim Testen nicht funktioniert hat.)

Gordon Davisson
quelle
1
Ich habe ein Skript erstellt, das unseren Open Directory-Master mit neuen Benutzern sudo createhomedir -sauffüllt und dann die Open Directory-Replikate / Dateifreigaben aufruft (IIRC), und sie erstellen glücklich die Basisverzeichnisse.
Clinton Blackmore
2
dscl -listist auf 256 Ergebnisse beschränkt. Wenn Sie also mehr als 256 Benutzer haben, kann diese Technik keine eindeutige UID garantieren.
Smokris
Kleiner Trick, um 2 zusätzliche Rohre zu entfernen (nur awk verwenden): dscl. -list / Users UniqueID | awk '{if ($ 2> max) max = $ 2; } END {print max + 1; } '
Valtoni Boaventura
@ValtoniBoaventura Schön. Ich habe das per Antwort eingebaut (mit einer Voreinstellung, falls es keine regulären Konten gibt). Ich habe auch einen Schritt hinzugefügt, um die Drop-Box-ACL (die in 10.6 hinzugefügt wurde) festzulegen.
Gordon Davisson
8

Wenn Sie eine Reihe von Benutzern erstellen müssen, können Sie eine strukturierte Textdatei erstellen und an diese übergeben, dsimportum die Aufgabe zu erledigen.

Das Apple Command-Line Administration Guide enthält ein ganzes Kapitel über Benutzer und Gruppen.

Clinton Blackmore
quelle
Ungerade. Offenbar hat Apple die Version 10.5 des Dokuments, auf das Sie sich ursprünglich bezogen hatten, entfernt, die Version 10.3 und eine weniger umfassende Version von Snow Leopard
chb
7

Eine andere Möglichkeit, eine eindeutige Benutzer-ID auszuwählen, bevor Sie ein Konto erstellen, besteht darin, die Liste zu durchsuchen und zu überprüfen, ob die gewünschte Benutzer-ID nicht vorhanden ist:

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

Praktisch, wenn Sie eine bestimmte ID benötigen


quelle
dscl -listist auf 256 Ergebnisse beschränkt. Wenn Sie also mehr als 256 Benutzer haben, kann diese Technik keine eindeutige UID garantieren.
Smokris
yup, das ist der kürzeste Weg, um diesen Benutzer hier gerade jetzt hinzuzufügen, nur grepmit dem, den idSie für den neuen Benutzer verwenden
wollten
7

Ich habe die verschiedenen Antworten hier genutzt, um ein meiner Meinung nach schönes Skript zum Erstellen von Benutzerkonten zu erstellen. Zugegeben, dies ist nicht dafür gedacht, einen Befehl von ssh aus gleichzeitig auszuführen. Es ist außerdem so konzipiert, dass es als Skript ausgeführt wird, wenn ein paketbasiertes Image von OS X kompiliert wird (wie es von Casper Imaging oder InstaDMG erstellt wurde ).

#!/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)"

Mit dem Skript können Sie angeben, zu welchen Gruppen ein Benutzer gehören soll. Es scheint mir, dass dies je nach der Version von OS X, die Sie ausführen, unterschiedlich sein kann. Ich erhalte andere Ergebnisse, wenn ich idals Administrator unter OS X 10.6 ausgeführt werde, als wenn ich als Administrator unter OS X 10.5 ausgeführt werde.

Clinton Blackmore
quelle
In einer anderen Antwort warnt Elliott, dass der Befehl 'createhomedir -c' gegen Ende Konten für alle Benutzer in dem Verzeichnis erstellt, an das Sie gebunden sind. (Die Option '-c' in der Manpage 'erstellt Basisverzeichnisse nur für lokale Basispfade.') Es gibt eine andere Option, '-u Benutzername', die möglicherweise besser funktioniert.
Clinton Blackmore
Hallo, ich benutze das obige Skript. Mein neuer Benutzer wird hinzugefügt, aber wenn der Benutzer eine Verbindung zu seinem Kalender herstellt, wird angezeigt, dass er nicht über die Berechtigungen verfügt. Können Sie mir helfen ?
@jimmy: Ich würde empfehlen, eine neue Frage zu serverfault zu stellen und auf diese Antwort zu verlinken, anstatt nur eine Frage in den Kommentaren zu stellen, die selten zu sehen sein wird. Ich würde erwarten, dass die Berechtigungen stimmen. Die Verwendung von "chown" und "chmod" kann hilfreich sein, wenn Sie eine Datei identifizieren können, die nicht über die richtigen Berechtigungen verfügt. Ich weiß jedoch nicht, welche.
Clinton Blackmore
dscl -listist auf 256 Ergebnisse beschränkt. Wenn Sie also mehr als 256 Benutzer haben, kann diese Technik keine eindeutige UID garantieren.
Smokris
4

Ich habe einen kleinen Wrapper über dscldie useraddParameter von Takes gestartet - es ist nicht vollständig (und ich glaube auch nicht, da einige Dinge unter OS X nicht möglich sind), aber ich habe es verwendet, um einige Benutzer zu erstellen.

Das Framework ist für alle Parameter vorhanden. Wenn Sie also die großartigen sozialen Funktionen von GitHub nutzen möchten, ist dies ganz einfach.

Xiong Chiamiov
quelle
Das Ausführen # gem install osx-useradd.gemspecunter OS X 10.5 führt zu ERROR: While executing gem ... (Gem::RemoteSourceException)und die zweite Zeile ist HTTP Response 301 fetching http://gems.rubyforge.org/yaml.