Jakie kroki są potrzebne, aby utworzyć nowego użytkownika z wiersza poleceń?

27

Jakie polecenia (lub skrypty) mogą utworzyć w pełni funkcjonalne konto użytkownika w Mountain Lion, uruchamiane tylko z wiersza poleceń przez terminal lub ssh.

Wygląda na to, istniejącej pary z odpowiedzi może działać, ale zastanawiałem się, czy nie było krótki skrypt lub narzędzie do tworzenia w pełni funkcjonalne konta użytkownika na Mountain Lion?

bmike
źródło

Odpowiedzi:

33

Oto skrypt powłoki, który napisałem w pracy, aby obsłużyć to w ramach procesu NetInstall (automatyczne tworzenie lokalnego konta administratora podczas procesu tworzenia obrazu).

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

Kilka uwag do wspomnienia:

  • Mam to zapisane jako plik wykonywalny „.sh”.
  • Ponieważ wykonuje się podczas NetInstall, działa jako root i musi działać jako root, aby działać poprawnie. Możesz także odjąć pierwsze dwa wiersze, dodać „sudo” na początku każdego kolejnego wiersza i ręcznie uruchomić je jako osobne polecenia w terminalu.
  • Zmodyfikuj UniqueID z 501 na liczbę, o której wiesz, że jest bezpieczna na wszystkich systemach (501 jest pobierane przez pierwsze konto utworzone na komputerze Mac, zazwyczaj coś wyższego, na przykład 550, będzie prawdopodobnie bezpieczne, w zależności od liczby użytkowników w systemie) .
  • PrimaryGroupID z 80 tworzy użytkownika administracyjnego. Zmień na PrimaryGroupID na 20, aby utworzyć użytkownika standardowego.
  • W ten sposób zobrazowałem ponad 50 komputerów Mac bez żadnych problemów. Używam tego konta do uruchamiania poleceń za pośrednictwem SSH, do wypychania łatek za pomocą ARD i do zarządzania lokalnymi biurkami.
bispymusic
źródło
Wygląda obiecująco - wkrótce to przetestuje!
bmike
Problem, jaki mam, kiedy próbuję dostosować ten skrypt do tworzenia zwykłych użytkowników poprzez przekazywanie zmiennych do skryptu, polega na tym, że wszystko oprócz ostatniej linii działa dobrze. Oznacza to, że dscl tworzy użytkownika, a kiedy używam dscl. list / users, użytkownik pokazuje się dobrze, ale chown nie rozpoznaje użytkownika, a ponieważ nie mogę poprawnie zmienić uprawnień do katalogu domowego, nie pozwoli temu użytkownikowi się zalogować. Jakieś pomysły?
Chciałbym móc. Jedną z moich słabości, jeśli chodzi o skrypty powłoki, jest to, że nigdy nie nauczyłem się bardzo dobrze posługiwania się zmiennymi, głównie dlatego, że tak naprawdę nie musiałem ich używać do niczego w tym momencie pracy. Może @bike lub ktoś inny może udzielić porady.
bispymusic
@HackintoshCoat czy możesz opublikować swój skrypt? W swoim poleceniu wpisałeś małe „/ users”, podczas gdy w rzeczywistości jest to „/ Users”. Wątpię, czy to jest problem z twoim skryptem; ale świeże oczy sprawdzą, czy problem jest w stanie dość szybko znaleźć problem. Mam podobny skrypt, który konfiguruje wielu użytkowników, więc użycie samych zmiennych nie stanowi problemu.
Kent
2
Zamiast dwóch ostatnich wierszy ( cp -R ...; chown -R ...) możesz użyć polecenia createhomedir -u administrator. createhomedirteż ma stronę podręcznika.
Alex Leach
14

Aby dodatkowo to zautomatyzować, można użyć następującego wiersza w celu uzyskania następnego „dostępnego” identyfikatora użytkownika, jeśli używasz komputera Mac, na którym już skonfigurowali użytkownicy.

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

NextID=$((LastID + 1))

Następnie odpowiednią linię w powyższej odpowiedzi bispymusic można zmienić:

 dscl . create /Users/administrator UniqueID $NextID
Kent
źródło
2

Mam kilka aktualizacji powyższej odpowiedzi.

dscl / -append /Groups/admin GroupMembership newUserName

Tego polecenia można użyć, aby użytkownik miał dostęp administracyjny. Jeśli to polecenie nie zostanie podane, użytkownik zostanie automatycznie ustawiony jako użytkownik standardowy.

dscl . create /Users/newUserName PrimaryGroupID 80

Ustawia identyfikator grupy podstawowej użytkownika. 80 oznacza admin, a 20 oznacza personel . Ustawienie wartości 20 nie spowoduje, że użytkownik stanie się standardem. Chyba że pierwsze polecenie nie jest wymienione.

Vipin Johney
źródło
Aby wyjaśnić, którekolwiek z tych poleceń osiągną to samo?
MaxGabriel,
Wolę pierwsze polecenie, dołączając do / Groups / admin .
Vipin Johney,
0

Oto skrypt powłoki, który napisałem, aby dodać nowych użytkowników w Max OS X za pomocą wiersza poleceń. Działa tak samo, jakby to był Linux. Możesz je edytować do własnych potrzeb. Po prostu nazwij go useradd.sh i ustaw prawidłowe uprawnienia ( chmod 0700 useradd.shw moim przypadku). Dzięki bispymusic, Alex Leach, Kent za ich wkład.

Testowany system 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}'`"

możesz dostać ten sam z mojej istoty

Igor Voltaic
źródło
Może tak być, NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))ale teraz wygląda to lepiej i wyraźniej.
Igor Voltaic