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?


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

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).


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.


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


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.


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ć.


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.