Comment créer des comptes utilisateur à partir du terminal sous Mac OS X 10.5?

86

J'aimerais pouvoir créer de nouveaux utilisateurs dans Mac OS X 10.5 à distance après la connexion SSH à la machine. Comment puis-je faire cela?

JR Lawhorne
la source
Je n'ai pas encore la réputation de répondre, mais si vous voulez savoir comment procéder depuis le single_usermode (réinitialisation de la sécurité), vous devrez alors redémarrer sans interruption Command-S, pour pouvoir accéder en écriture au disque selon les détails à l'écran. , puis rm /var/db/.AppleSetupDonequi vous permettra de créer un nouveau compte administrateur. J'espère que cela aidera quelqu'un
New Alexandria

Réponses:

80

Utilisez la commande dscl. Cet exemple créerait l'utilisateur "luser", comme suit:

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

Vous pouvez ensuite utiliser passwd pour changer le mot de passe de l'utilisateur ou utiliser:

dscl . -passwd /Users/luser password

Vous devrez créer / Users / luser pour le répertoire de base de l'utilisateur et modifier le propriétaire pour que l'utilisateur puisse y accéder, et vous assurer que l'identifiant unique est en fait unique.

Cette ligne ajoutera l'utilisateur au groupe de l'administrateur:

dscl . -append /Groups/admin GroupMembership luser
palmer
la source
7
Comment puis-je m'assurer que l'UID est unique?
JR Lawhorne
3
Il n'y a pas de moyen automatique; si vous écrivez ceci, vous pouvez simplement le faire exécuter avec la commande "id ####" et assurez-vous qu'il renvoie "Aucun utilisateur de ce type" ou quelque chose de ce genre.
palmer
1
N'oubliez pas d'utiliser sudo si vous ne disposez pas des autorisations.
Raffi Khatchadourian
BTW, comme c’est beaucoup plus bavard qu’il devrait être, j’ai porté ces commandes dans la useraddsyntaxe.
Xiong Chiamiov
1
Notez que PrimaryGroupID 80est admin, donc luserpeut utiliser sudomême si vous ne pas l'ajouter au groupe d'administrateurs.
Ruslo
20

(Cette réponse devrait être considérée comme un addenda pour remplir quelques blancs dans la procédure de Palmer)

Pour choisir un identifiant unique non utilisé pour votre nouvel utilisateur, vous pouvez utiliser:

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

... puis utilisez la séquence de commandes dscl fournie par palmer pour créer le compte, puis créez le répertoire de base du nouvel utilisateur avec:

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

(Il existe une commande createhomedir, mais cela ne fonctionnait pas lorsque je l'ai testée.)

Gordon Davisson
la source
1
J'ai créé un script qui remplit notre maître Open Directory avec de nouveaux utilisateurs, puis appelle sudo createhomedir -s(IIRC) sur les réplicas / Fileshares Open Directory, et ceux-ci créent les répertoires de base avec joie.
Clinton Blackmore
2
dscl -listest limité à 256 résultats. Par conséquent, si vous avez plus de 256 utilisateurs, cette technique ne pourra pas garantir un UID unique.
smokris
Petit truc pour expulser 2 tuyaux supplémentaires (utilisez uniquement awk): dscl. -list / Utilisateurs UniqueID | awk '{if ($ 2> max) max = $ 2; } END {print max + 1; } '
Valtoni Boaventura
@ ValtoniBoaventura Nice. J'ai incorporé cela en réponse (avec une valeur par défaut au cas où il n'y aurait pas de comptes réguliers). J'ai également ajouté une étape pour définir la liste de contrôle d'accès de la boîte de dépôt (qui a été ajoutée à la version 10.6).
Gordon Davisson
8

Si vous devez créer un groupe d'utilisateurs, il est possible de créer un fichier texte structuré et de le transmettre dsimportpour effectuer le travail.

Le Guide d' administration en ligne de commande d'Apple contient un chapitre complet sur les utilisateurs et les groupes.

Clinton Blackmore
la source
Impair. Apple semble avoir supprimé la version 10.5 du document que vous avez mentionné au début, mais conserve la version
10.3
7

Un autre moyen de choisir un ID utilisateur unique avant de créer un compte consiste simplement à parcourir la liste et à vérifier que celui que vous souhaitez utiliser ne figure pas dans la liste:

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

Pratique si vous devez utiliser un certain identifiant


la source
dscl -listest limité à 256 résultats. Par conséquent, si vous avez plus de 256 utilisateurs, cette technique ne pourra pas garantir un UID unique.
smokris
yup c'est le chemin le plus court pour ajouter cet utilisateur ici maintenant, juste grepavec ce que idvous aviez à l'esprit pour l'utiliser pour le nouvel utilisateur
yair
7

J'ai exploité les différentes réponses ici pour trouver ce que je pense être un bon script pour créer des comptes d'utilisateurs. Certes, ce n'est pas conçu pour exécuter une commande à la fois à partir de ssh; il est plus particulièrement conçu pour être un script exécuté lors de la compilation d'une image OS X basée sur un package (telle que créée par Casper Imaging ou 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)"

Le script vous permet de spécifier les groupes auxquels un utilisateur doit appartenir. Il me semble que cela pourrait différer selon la version d'OS X que vous utilisez. J'obtiens des résultats différents iden tant qu'administrateur sous OS X 10.6 et en tant qu'administrateur sous OS X 10.5.

Clinton Blackmore
la source
Dans une autre réponse, Elliott avertit que la commande 'createhomedir -c', vers la fin, créera des comptes pour tous les utilisateurs du répertoire auquel vous êtes lié. (L'option '-c', dans la page de manuel, 'crée des répertoires de base pour les chemins de répertoire locaux uniquement.') Il existe une autre option, '-u nom d'utilisateur', qui peut mieux fonctionner.
Clinton Blackmore
bonjour j'utilise le script ci-dessus. Donc, il ajoute mon nouvel utilisateur, mais lorsque l'utilisateur se connecte à son agenda, il dit qu'il n'a pas les autorisations! Pouvez-vous m'aider ?
@ jimmy: Je recommanderais de poser une nouvelle question sur serverfault et de créer un lien vers cette réponse plutôt que de simplement poser une question dans les commentaires, ce qui sera rarement vu. Je m'attends à ce que les autorisations soient exactes. Utiliser 'chown' et 'chmod' peut vous aider si vous pouvez identifier un fichier qui ne dispose pas des autorisations adéquates ... mais je ne sais pas lequel.
Clinton Blackmore
dscl -listest limité à 256 résultats. Par conséquent, si vous avez plus de 256 utilisateurs, cette technique ne pourra pas garantir un UID unique.
smokris
4

J'ai commencé un petit wrapper sur les paramètres dsclqui prennent useradd- ce n'est pas complet (et je ne le pense pas, certaines choses étant impossibles sous OS X), mais je m'en suis servi pour créer des utilisateurs.

Le cadre est là pour tous les paramètres, donc si vous voulez tirer parti des fonctionnalités sociales impressionnantes de GitHub, rien de plus simple.

Xiong Chiamiov
la source
Sous # gem install osx-useradd.gemspecOS X 10.5, vous obtenez ERROR: While executing gem ... (Gem::RemoteSourceException)la deuxième ligne HTTP Response 301 fetching http://gems.rubyforge.org/yaml.