Welche Schritte sind erforderlich, um einen neuen Benutzer über die Befehlszeile zu erstellen?

27

Welche Befehle (oder Skripte) können ein voll funktionsfähiges Benutzerkonto auf Mountain Lion erstellen, das nur über die Befehlszeile über Terminal oder SSH ausgeführt wird?

Es sieht aus wie ein bestehendes Paar von Antworten funktionieren kann, aber ich fragte mich , ob es für die Erstellung von voll funktionsfähigen Benutzerkonten auf Mountain Lion ein kurzes Skript oder Werkzeug war?

bmike
quelle

Antworten:

33

Hier ist ein Shell-Skript, das ich bei der Arbeit geschrieben habe, um dies als Teil des NetInstall-Prozesses zu handhaben (Erstellen eines lokalen Administratorkontos automatisch während des Imaging-Prozesses).

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

Einige Anmerkungen zu erwähnen:

  • Ich habe diese als ausführbare ".sh" -Datei gespeichert.
  • Da es während der NetInstall-Installation ausgeführt wird, wird es als root ausgeführt und muss als root ausgeführt werden, damit es ordnungsgemäß funktioniert. Sie können auch die ersten beiden Zeilen subtrahieren, am Anfang jeder nachfolgenden Zeile ein "sudo" einfügen und diese manuell als einzelne Befehle in Terminal ausführen.
  • Ändern Sie die UniqueID von 501 auf eine Zahl, von der Sie wissen, dass sie auf allen Systemen sicher ist (501 wird von dem ersten auf einem Mac erstellten Konto übernommen, in der Regel ist eine höhere Zahl wie 550 wahrscheinlich sicher, je nachdem, wie viele Benutzer sich auf Ihrem System befinden.) .
  • Die PrimaryGroupID 80 erstellt einen Admin-Benutzer. Ändern Sie zu PrimaryGroupID von 20, um einen Standardbenutzer zu erstellen.
  • Ich habe weit über 50 Macs auf diese Weise ohne Probleme abgebildet. Ich verwende dieses Konto, um Befehle über SSH auszuführen, Patches über ARD zu verteilen und die lokale Desk-Side-Administration durchzuführen.
bispymusic
quelle
Sieht vielversprechend aus - werde es bald testen!
bmike
Das Problem, das ich zu haben scheint, wenn ich versuche, dieses Skript anzupassen, um reguläre Benutzer zu erstellen, indem ich Variablen an das Skript übergebe, ist, dass alles außer der letzten Zeile gut funktioniert. Das heißt, Dscl erstellt den Benutzer und wenn ich Dscl verwende. liste / benutzer, der benutzer erscheint ganz gut, aber chown erkennt den benutzer nicht und da ich die berechtigungen für das home-verzeichnis nicht richtig ändern kann, lässt er diesen benutzer sich nicht einloggen. irgendwelche ideen?
Ich wünschte ich könnte. Eine meiner Schwächen beim Erstellen von Shell-Skripten ist, dass ich den Umgang mit Variablen nie sehr gut gelernt habe, vor allem, weil ich sie zu diesem Zeitpunkt in meinem Job eigentlich für nichts gebraucht habe. Vielleicht kann @bmike oder jemand anderes einen Rat geben.
Bispymusic
@ HackintoshCoat können Sie Ihr Skript veröffentlichen? In Ihrem Befehl haben Sie "/ users" in Kleinbuchstaben eingegeben, obwohl es sich tatsächlich um "/ users" handelt. Ich bezweifle, dass dies das Problem mit Ihrem Skript ist. Neue Augen, die dies überprüfen, können das Problem möglicherweise recht schnell finden. Ich habe ein ähnliches Skript, das tatsächlich mehrere Benutzer einrichtet, sodass die Verwendung von Variablen selbst kein Problem darstellt.
Kent
2
Anstelle der letzten beiden Zeilen ( cp -R ...; chown -R ...) können Sie den Befehl verwenden createhomedir -u administrator. createhomedirhat auch eine Manpage.
Alex Leach
14

Um dies weiter zu automatisieren, kann die folgende Zeile verwendet werden, um die nächste "verfügbare" Benutzer-ID abzurufen, wenn Sie einen Mac verwenden, für den bereits Benutzer eingerichtet sind.

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

NextID=$((LastID + 1))

Dann könnte die entsprechende Zeile in der obigen Antwort von Bispymusic geändert werden:

 dscl . create /Users/administrator UniqueID $NextID
Kent
quelle
2

Ich habe einige Updates zu der obigen Antwort.

dscl / -append /Groups/admin GroupMembership newUserName

Mit diesem Befehl kann der Benutzer Administratorzugriff erhalten. Wenn dieser Befehl nicht angegeben wird, wird der Benutzer automatisch als Standardbenutzer festgelegt.

dscl . create /Users/newUserName PrimaryGroupID 80

Hiermit wird die primäre Gruppen-ID des Benutzers festgelegt. 80 bedeutet admin und 20 bedeutet staff . Und die Einstellung auf 20 macht den Benutzer nicht zum Standard. Es sei denn, der erste Befehl wird nicht erwähnt.

Vipin Johney
quelle
Zur Verdeutlichung kann mit beiden Befehlen dasselbe erreicht werden?
MaxGabriel
Ich bevorzuge den ersten Befehl, der an / Groups / admin angehängt wird .
Vipin Johney
0

Hier ist ein Shell-Skript, das ich geschrieben habe, um neue Benutzer in Max OS X über die Befehlszeile hinzuzufügen. Funktioniert genauso, als wäre es Linux. Fühlen Sie sich frei, eine für Ihre persönlichen Bedürfnisse zu bearbeiten. Nennen Sie es einfach useradd.sh und legen Sie die richtigen Berechtigungen fest ( chmod 0700 useradd.shin meinem Fall). Dank an bispymusic, Alex Leach, Kent für ihre Beiträge.

OS X High Sierra getestet

#!/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}'`"

Sie können das gleiche von meinem Kern bekommen

Igor Voltaic
quelle
Es könnte sein, NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))aber es sieht einfach besser und klarer aus, wie es gerade ist.
Igor Voltaic