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

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

Es sieht so aus, als ob ein vorhandenes Antwortpaar funktionieren könnte , aber ich habe mich gefragt, ob es ein kurzes Skript oder Tool zum Erstellen voll funktionsfähiger Benutzerkonten auf Mountain Lion gibt.

Antworten (4)

Hier ist ein Shell-Skript, das ich bei der Arbeit geschrieben habe, um dies als Teil des NetInstall-Prozesses zu handhaben (automatisches Erstellen eines lokalen Administratorkontos 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 dies als ausführbare ".sh"-Datei gespeichert.
  • Da es während NetInstall ausgeführt wird, wird es als root ausgeführt und muss als root ausgeführt werden, um ordnungsgemäß zu funktionieren. Sie können auch die ersten beiden Zeilen subtrahieren, am Anfang jeder nachfolgenden Zeile ein „sudo“ hinzufügen und diese manuell als einzelne Befehle in Terminal ausführen.
  • Ändern Sie die UniqueID von 501 in eine Zahl, von der Sie wissen, dass sie auf allen Systemen sicher ist (501 wird vom ersten auf einem Mac erstellten Konto verwendet, im Allgemeinen ist etwas Höheres wie 550 wahrscheinlich sicher, je nachdem, wie viele Benutzer Sie auf Ihrem System haben). .
  • PrimaryGroupID von 80 erstellt einen Admin-Benutzer. Ändern Sie die PrimaryGroupID auf 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 lokale Desktop-Administration durchzuführen.
Sieht vielversprechend aus - wird demnächst getestet!
Das Problem, das ich zu haben scheine, wenn ich versuche, dieses Skript so anzupassen, dass es normale Benutzer erstellt, indem ich Variablen an das Skript übergebe, ist, dass alles außer der letzten Zeile einwandfrei funktioniert. Das heißt, dscl erstellt den Benutzer, und wenn ich dscl verwende. list /users, der Benutzer wird ganz gut angezeigt, aber chown erkennt den Benutzer nicht, und da ich die Berechtigungen des Home-Verzeichnisses nicht richtig ändern kann, lässt es diesen Benutzer sich nicht anmelden. Irgendwelche Ideen?
Ich wünschte ich könnte. Eine meiner Schwächen beim Shell-Skripting ist, dass ich die Verwendung von Variablen nie sehr gut gelernt habe, vor allem, weil ich sie zu diesem Zeitpunkt in meinem Job eigentlich für nichts benötigt habe. Vielleicht kann @bmike oder jemand anderes Ratschläge geben.
@HackintoshCoat kannst du dein Skript posten? In Ihrem Befehl haben Sie "/users" in Kleinbuchstaben eingegeben, obwohl es sich tatsächlich um "/Users" handelt. Ich bezweifle, dass das das Problem mit Ihrem Skript ist; Aber wenn Sie es mit frischen Augen überprüfen, können Sie das Problem möglicherweise ziemlich schnell finden. Ich habe ein ähnliches Skript, das tatsächlich mehrere Benutzer einrichtet, sodass die Verwendung von Variablen selbst kein Problem darstellt.
Anstelle der letzten beiden Zeilen ( cp -R ...; chown -R ...) können Sie auch den Befehl verwenden createhomedir -u administrator. createhomedirhat auch eine Manpage.
Anstatt von . Als Datenquelle können Sie "/LDAPv3/127.0.0.1" verwenden. Ein Beispiel: dscl "/LDAPv3/127.0.0.1" -list /Users UniqueID. Ich habe ein paar Stunden gebraucht, um es herauszufinden ...

Um dies weiter zu automatisieren, kann die folgende Zeile verwendet werden, um die nächste "verfügbare" Benutzer-ID zu erhalten, wenn Sie auf einem Mac laufen, auf dem 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

Ich habe einige Updates zu der obigen Antwort.

dscl / -append /Groups/admin GroupMembership newUserName

Dieser Befehl kann verwendet werden, um dem Benutzer Administratorzugriff zu gewähren. Wenn dieser Befehl nicht angegeben wird, wird der Benutzer automatisch als Standardbenutzer festgelegt.

dscl . create /Users/newUserName PrimaryGroupID 80

Dies legt die primäre Gruppen-ID des Benutzers fest. 80 bedeutet Administrator und 20 Mitarbeiter . Und die Einstellung auf 20 wird den Benutzer nicht zum Standard machen. Es sei denn, der erste Befehl wird nicht erwähnt.

Zur Verdeutlichung: Jeder dieser Befehle wird dasselbe bewirken?
Ich bevorzuge den ersten Befehl, der an /Groups/admin angehängt wird .

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). Danke 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 dasselbe aus meinem Kern bekommen

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, so wie es jetzt ist.