Quelles étapes sont nécessaires pour créer un nouvel utilisateur à partir de la ligne de commande?

27

Quelles commandes (ou script) peuvent créer un compte utilisateur entièrement fonctionnel sur Mountain Lion, s'exécutant uniquement à partir de la ligne de commande via le terminal ou ssh.

Il semble qu'une paire de réponses existante pourrait fonctionner, mais je me demandais s'il y avait un court script ou un outil pour créer des comptes d'utilisateurs entièrement fonctionnels sur Mountain Lion?

bmike
la source

Réponses:

33

Voici un script shell que j'ai écrit au travail pour gérer cela dans le cadre du processus NetInstall (création automatique d'un compte administrateur local pendant le processus de création d'image).

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

Quelques notes à mentionner:

  • Je l'ai sauvegardé en tant que fichier exécutable ".sh".
  • Puisqu'il s'exécute pendant NetInstall, il s'exécute en tant que root et doit s'exécuter en tant que root pour fonctionner correctement. Vous pouvez également soustraire les deux premières lignes, ajouter un "sudo" au début de chaque ligne suivante et les exécuter manuellement en tant que commandes individuelles dans Terminal.
  • Modifiez UniqueID de 501 en un nombre que vous savez sûr sur tous les systèmes (501 est pris par le premier compte créé sur un Mac, généralement quelque chose de plus élevé comme 550 sera probablement sûr, selon le nombre d'utilisateurs que vous avez sur votre système) .
  • PrimaryGroupID de 80 crée un utilisateur Admin. Passez à PrimaryGroupID de 20 pour créer un utilisateur standard.
  • J'ai imaginé bien plus de 50 Mac de cette façon sans aucun problème. J'utilise ce compte pour exécuter des commandes via SSH, pour envoyer des correctifs via ARD et pour effectuer une administration locale sur le bureau.
bispymusic
la source
Semble prometteur - le testera bientôt!
bmike
Le problème que je semble avoir lorsque j'essaie d'adapter ce script pour créer des utilisateurs réguliers en transmettant des variables au script est que tout sauf la dernière ligne fonctionne très bien. Autrement dit, dscl crée l'utilisateur, et lorsque j'utilise dscl. list / users, l'utilisateur apparaît très bien, mais chown ne reconnaît pas l'utilisateur, et comme je ne peux pas modifier correctement les autorisations du répertoire personnel, il ne permettra pas à cet utilisateur de se connecter. Des idées?
SI seulement je pouvais. L'une de mes faiblesses en ce qui concerne les scripts shell est que je n'ai jamais très bien appris l'utilisation des variables, principalement parce que je n'ai pas vraiment eu besoin de les utiliser pour quoi que ce soit à ce stade de mon travail. Peut-être que @bmike ou quelqu'un d'autre pourrait offrir des conseils.
bispymusic
@HackintoshCoat pouvez-vous publier votre script? Dans votre commande, vous avez tapé "/ users" en minuscules, alors qu'il s'agit en fait de "/ Users". Je doute que ce soit le problème avec votre script; mais, de nouveaux yeux vérifiant qu'il pourrait être en mesure de trouver le problème assez rapidement. J'ai un script similaire qui configure en fait plusieurs utilisateurs, donc l'utilisation des variables elle-même n'est pas un problème.
Kent
2
Au lieu des deux dernières lignes ( cp -R ...; chown -R ...), vous pouvez utiliser la commande createhomedir -u administrator. createhomedira aussi une page de manuel.
Alex Leach
14

Pour automatiser davantage cela, la ligne suivante peut être utilisée pour obtenir l'ID utilisateur "disponible" suivant si vous utilisez un Mac sur lequel des utilisateurs sont déjà configurés.

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

NextID=$((LastID + 1))

Ensuite, la ligne correspondante dans la réponse de bispymusic ci-dessus pourrait être modifiée:

 dscl . create /Users/administrator UniqueID $NextID
Kent
la source
2

J'ai quelques mises à jour sur la réponse ci-dessus.

dscl / -append /Groups/admin GroupMembership newUserName

Cette commande peut être utilisée pour donner à l'utilisateur un accès administratif. Si cette commande n'est pas fournie, l'utilisateur sera automatiquement défini comme utilisateur standard.

dscl . create /Users/newUserName PrimaryGroupID 80

Cela définit l'ID de groupe principal de l'utilisateur. 80 signifie administrateur et 20 signifie personnel . Et le réglage à 20 ne rendra pas l'utilisateur standard. Sauf si la première commande n'est pas mentionnée.

Vipin Johney
la source
Pour clarifier, l'une ou l'autre de ces commandes accomplira la même chose?
MaxGabriel
Je préfère la première commande, ajoutée à / Groups / admin .
Vipin Johney
0

Voici un script shell que j'ai écrit pour ajouter de nouveaux utilisateurs dans Max OS X en utilisant la ligne de commande. Fonctionne de la même manière que s'il s'agissait de Linux. N'hésitez pas à en éditer un pour vos besoins personnels. Nommez-le simplement useradd.sh et définissez les autorisations appropriées ( chmod 0700 useradd.shdans mon cas). Merci à bispymusic, Alex Leach, Kent pour leurs contributions.

Testé sous 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}'`"

vous pouvez obtenir le même de mon essence

Igor Voltaic
la source
Cela pourrait l'être, NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))mais cela semble juste mieux et plus clair comme c'est le cas actuellement.
Igor Voltaic