30 votes

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

Quelles commandes (ou script) permettent de créer un compte utilisateur pleinement fonctionnel sur Mountain Lion, fonctionnant uniquement à partir de la ligne de commande via un terminal ou ssh.

On dirait qu'il y a déjà paire de réponses pourrait fonctionner, mais je me demandais s'il existait un script court ou un outil pour créer des comptes d'utilisateurs entièrement fonctionnels sur Mountain Lion ?

38voto

bispymusic Points 4042

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

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

  • J'ai enregistré ce fichier comme un fichier exécutable ".sh".
  • Comme il s'exécute pendant NetInstall, il s'exécute en tant que Root, et doit être exécuté 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 à un nombre que vous saurez être 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 créé des images de plus de 50 Macs 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 faire de l'administration locale.

0 votes

Cela semble prometteur - je le testerai bientôt !

0 votes

Le problème que je semble avoir lorsque j'essaie d'adapter ce script pour créer des utilisateurs réguliers en passant des variables au script est que tout sauf la dernière ligne fonctionne très bien. C'est-à-dire que dscl crée l'utilisateur, et lorsque j'utilise dscl . list /users, l'utilisateur s'affiche parfaitement, mais chown ne reconnaît pas l'utilisateur, et comme je ne peux pas modifier correctement les autorisations du répertoire d'origine, il ne laissera pas cet utilisateur se connecter. Avez-vous des idées ?

0 votes

J'aimerais pouvoir le faire. Une de mes faiblesses en ce qui concerne les scripts shell est que je n'ai jamais bien appris l'utilisation des variables, principalement parce que je n'ai pas encore eu besoin de les utiliser pour quoi que ce soit à ce stade de mon travail. Peut-être que @bmike ou quelqu'un d'autre pourra vous donner des conseils.

14voto

Kent Points 6002

Pour automatiser davantage cette opération, la ligne suivante peut être utilisée pour obtenir le prochain identifiant d'utilisateur "disponible" si vous travaillez sur un mac qui a déjà des utilisateurs 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

2voto

Vipin Johney Points 121

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

Ceci définit l'id de groupe primaire de l'utilisateur. 80 signifie admin et 20 signifie personnel . Et le réglage à 20 ne rendra pas l'utilisateur standard. A moins que la première commande ne soit pas mentionnée.

0 votes

Pour clarifier, l'une ou l'autre de ces commandes accomplira la même chose ?

0 votes

Je préfère la première commande, qui ajoute à /Groupes/admin .

0voto

Igor Voltaic Points 252

Voici un shell script que j'ai écrit pour ajouter de nouveaux utilisateurs dans Max OS X en utilisant la ligne de commande. Il fonctionne de la même manière que s'il s'agissait de Linux. N'hésitez pas à en modifier un pour vos besoins personnels. Il suffit de le nommer useradd.sh et de définir les permissions correctes ( chmod 0700 useradd.sh dans mon cas). Merci à bispymusic, Alex Leach, Kent pour leurs contributions.

OS X High Sierra testé

#!/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 à partir de mon point de vue

0 votes

Cela pourrait être NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1)) mais ça a l'air mieux et plus clair comme c'est maintenant.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X