Jak utworzyć konta użytkowników z terminala w systemie Mac OS X 10.5?

86

Chciałbym mieć możliwość tworzenia nowych użytkowników w Mac OS X 10.5 zdalnie po ssh'ing na maszynie. Jak mam to zrobic?

JR Lawhorne
źródło
Nie mam jeszcze reputacji, aby odpowiedzieć, ale jeśli szukasz sposobu na zrobienie tego z single_usertrybu (resetowanie zabezpieczeń), musisz ponownie uruchomić, przytrzymując Command-S, uzyskać dostęp do zapisu na dysku zgodnie ze szczegółami na ekranie , a następnie rm /var/db/.AppleSetupDoneumożliwi utworzenie nowego konta administratora. Mam nadzieję, że to komuś pomoże
Nowa Aleksandria,

Odpowiedzi:

80

Użyj polecenia dscl. Ten przykład utworzyłby użytkownika „luser”, w ten sposób:

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

Następnie możesz użyć passwd, aby zmienić hasło użytkownika lub użyć:

dscl . -passwd /Users/luser password

Będziesz musiał utworzyć / Users / luser dla katalogu domowego użytkownika i zmienić własność, aby użytkownik mógł uzyskać do niego dostęp, i upewnij się, że UniqueID jest w rzeczywistości unikalny.

Ten wiersz doda użytkownika do grupy administratora:

dscl . -append /Groups/admin GroupMembership luser
pielgrzym z ziemi świętej
źródło
7
Jak mogę się upewnić, że UID jest unikalny?
JR Lawhorne
3
Nie ma automatycznego sposobu; jeśli to zrobisz, możesz po prostu uruchomić komendę „id ####” i upewnić się, że zwróci „Brak takiego użytkownika” lub jakiś hack.
palmer
1
Pamiętaj, aby używać sudo, jeśli nie masz uprawnień.
Raffi Khatchadourian
BTW, ponieważ jest to bardziej szczegółowe, niż powinno być, umieściłem te polecenia w useraddskładni.
Xiong Chiamiov
1
Zauważ, że PrimaryGroupID 80jest admin, więc lusermożna używać sudo, nawet jeśli nie dodać go do grupy Administratorzy męska.
ruslo
20

(Ta odpowiedź powinna być traktowana jako uzupełnienie do wypełnienia niektórych pól w procedurze Palmera)

Aby wybrać nieużywany UniqueID dla nowego użytkownika, możesz użyć:

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

... następnie użyj sekwencji poleceń dscl podanych przez Palmera, aby utworzyć konto, a następnie utwórz katalog domowy nowego użytkownika za pomocą:

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

(istnieje polecenie createhomedir, ale nie działało, gdy go przetestowałem).

Gordon Davisson
źródło
1
Stworzyłem skrypt, który zapełnia naszego Open Directory Master nowymi użytkownikami, a następnie wywołuje sudo createhomedir -s(IIRC) w Replikach / folderach plików Open Directory i chętnie tworzą katalogi domowe.
Clinton Blackmore,
2
dscl -listjest ograniczony do 256 wyników, więc jeśli masz więcej niż 256 użytkowników, ta technika nie zagwarantuje unikalnego UID.
smokris
Mała sztuczka, aby eksmitować 2 dodatkowe potoki (użyj tylko awk): dscl. -list / Users UniqueID | awk '{if (2 $> max) max = 2 $; } END {print max + 1; } '
Valtoni Boaventura
@ValtoniBoaventura Nicea. Włączyłem to w odpowiedzi (z domyślnym ustawieniem w przypadku braku regularnych kont). Dodałem również krok, aby ustawić Drop Box ACL (który został dodany w 10.6).
Gordon Davisson
8

Jeśli masz grupę użytkowników do utworzenia, możesz utworzyć uporządkowany plik tekstowy i przekazać go dsimportdo wykonania zadania.

Przewodnik administratora wiersza polecenia Apple zawiera cały rozdział dotyczący użytkowników i grup.

Clinton Blackmore
źródło
Dziwny. Wygląda na to, że Apple zrezygnowało z wersji 10.5 dokumentu, o którym wspominałeś początkowo, ale zachowało wersję
chb
7

Innym sposobem na wybranie unikalnego identyfikatora użytkownika przed utworzeniem konta jest przejrzenie listy i sprawdzenie, czy nie ma tam tego, którego chcesz użyć:

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

Przydatne, jeśli musisz użyć określonego identyfikatora


źródło
dscl -listjest ograniczony do 256 wyników, więc jeśli masz więcej niż 256 użytkowników, ta technika nie zagwarantuje unikalnego UID.
smokris
tak, to jest najkrótsza ścieżka do dodania tego użytkownika właśnie tutaj, tylko grepz idmyślą o tym , którego miałeś użyć dla nowego użytkownika
yair
7

Wykorzystałem różne odpowiedzi tutaj, aby wymyślić, co uważam za fajny skrypt do tworzenia kont użytkowników. Trzeba przyznać, że nie jest to przeznaczone do uruchamiania polecenia na raz z ssh; Moreso został zaprojektowany jako skrypt uruchamiany podczas kompilacji obrazu systemu OS X opartego na pakiecie (utworzonego przez Casper Imaging lub 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)"

Skrypt umożliwia określenie grup, do których użytkownik powinien należeć. Wydaje mi się, że może się to różnić w zależności od używanej wersji systemu OS X. Otrzymuję inne wyniki, gdy uruchamiam się idjako administrator w OS X 10.6, niż kiedy działam jako administrator w OS X 10.5.

Clinton Blackmore
źródło
W innej odpowiedzi Elliott ostrzega, że ​​pod koniec polecenie „createhomedir -c” utworzy konta dla wszystkich użytkowników w katalogu, z którym jesteś związany. (Opcja „-c” na stronie podręcznika „tworzy katalogi domowe tylko dla lokalnych ścieżek domowych.”) Istnieje inna opcja, „-u nazwa użytkownika”, która może działać lepiej.
Clinton Blackmore,
cześć, używam powyższego skryptu. Dodaje więc mojego nowego użytkownika, ale kiedy użytkownik połączy się ze swoim kalendarzem, mówi, że nie ma uprawnień! Możesz mi pomóc ?
@jimmy: Polecam zadać nowe pytanie na temat błędu serwera i link do tej odpowiedzi zamiast zadawać pytanie w komentarzach, które rzadko będą widoczne. Spodziewałbym się, że uprawnienia będą odpowiednie. Użycie „chown” i „chmod” może pomóc, jeśli możesz zidentyfikować plik, który nie ma odpowiednich uprawnień ... ale nie wiem, który to byłby.
Clinton Blackmore,
dscl -listjest ograniczony do 256 wyników, więc jeśli masz więcej niż 256 użytkowników, ta technika nie zagwarantuje unikalnego UID.
smokris
4

Zacząłem małe opakowanie na temat dscltych useraddparametrów - nie jest kompletne (nie sądzę, że może być, ponieważ niektóre rzeczy nie są możliwe w OS X), ale użyłem go do tworzenia użytkowników.

Struktura jest dostępna dla wszystkich parametrów, więc jeśli chcesz skorzystać z niesamowitych funkcji społecznościowych GitHub, łatwo to zrobić.

Xiong Chiamiov
źródło
Uruchomienie # gem install osx-useradd.gemspecw systemie OS X 10.5 powoduje, ERROR: While executing gem ... (Gem::RemoteSourceException)a druga linia to HTTP Response 301 fetching http://gems.rubyforge.org/yaml.