L’ajout d’un utilisateur est l’un des exercices les plus fondamentaux sur tout système informatique; cet article se concentre sur la façon de le faire sur un système Linux.
Avant de commencer, je veux mentionner trois fondamentaux à garder à l’esprit. Tout d’abord, comme avec la plupart des systèmes d’exploitation, les utilisateurs de Linux ont besoin d’un compte pour pouvoir se connecter. Cet article couvre spécifiquement les comptes locaux, pas les comptes réseau tels que LDAP. Deuxièmement, les comptes ont à la fois un nom (appelé nom d’utilisateur) et un numéro (appelé ID utilisateur). Troisièmement, les utilisateurs sont généralement placés dans un groupe. Les groupes ont également un nom et un identifiant de groupe.
Comme on pouvait s’y attendre, Linux inclut un utilitaire de ligne de commande pour ajouter des utilisateurs ; il s’appelle useradd. Vous pouvez également trouver la commande adduser. De nombreuses distributions ont ajouté ce lien symbolique à la commande useradd par commodité.
$ file `which adduser`
/usr/sbin/adduser: symbolic link to useradd
Jetons un coup d’œil à useradd.
Remarque : Les valeurs par défaut décrites dans cet article reflètent celles de Red Hat Enterprise Linux 8.0. Vous pouvez trouver des différences subtiles dans ces fichiers et certaines valeurs par défaut sur d’autres distributions Linux ou d’autres systèmes d’exploitation Unix tels que FreeBSD ou Solaris.
Comportement par défaut
L’utilisation de base de useradd est assez simple: un utilisateur peut être ajouté simplement en fournissant son nom d’utilisateur.
$ sudo useradd sonny
Dans cet exemple, la commande useradd crée un compte appelé sonny. Un groupe portant le même nom est également créé et sonny y est placé pour être utilisé comme groupe principal. Il existe d’autres paramètres, tels que la langue et le shell, qui sont appliqués selon les valeurs par défaut et définies dans les fichiers de configuration /etc/default/useradd et /etc/login.defs. Cela est généralement suffisant pour un système personnel unique ou un petit environnement commercial à un serveur.
Alors que les deux fichiers ci-dessus régissent le comportement de useradd, les informations utilisateur sont stockées dans d’autres fichiers trouvés dans le répertoire /etc, auxquels je me référerai tout au long de cet article.
Fichier | Description | Champs (définis en gras par useradd) |
---|---|---|
passwd | Stocke les détails du compte utilisateur | nom d’utilisateur: inutilisé: uid: gid: commentaire: homedir: shell |
Stocke les détails de sécurité du compte utilisateur | nom d’utilisateur: mot de passe: lastchange: minimum: maximum: warn: inactif: expire: inutilisé | |
group | Stocke les détails du groupe | nom du groupe:unused:gid:membres |
Comportement personnalisable
La ligne de commande permet la personnalisation pour les moments où un administrateur a besoin d’un contrôle plus fin, par exemple pour spécifier le numéro d’identification d’un utilisateur.
Numéros d’ID utilisateur et de groupe
Par défaut, useradd essaie d’utiliser le même numéro pour l’ID utilisateur (UID) et l’ID de groupe principal (GID), mais il n’y a aucune garantie. Bien qu’il ne soit pas nécessaire que l’UID et le GID correspondent, il est plus facile pour les administrateurs de les gérer lorsqu’ils le font.
J’ai juste le scénario à expliquer. Supposons que j’ajoute un autre compte, cette fois pour Timmy. La comparaison des deux utilisateurs, sonny et timmy, montre que les deux utilisateurs et leurs groupes principaux respectifs ont été créés à l’aide de la commande getent.
$ getent passwd sonny timmy
sonny:x:1001:1002:Sonny:/home/sonny:/bin/bash
timmy:x:1002:1003::/home/timmy:/bin/bash
$ getent group sonny timmy
sonny:x:1002:
timmy:x:1003:
Malheureusement, ni l’UID des utilisateurs ni le GID principal ne correspondent. En effet, le comportement par défaut consiste à attribuer le prochain UID disponible à l’utilisateur, puis à tenter d’attribuer le même numéro au groupe principal. Cependant, si ce numéro est déjà utilisé, le prochain GID disponible est attribué au groupe. Pour expliquer ce qui s’est passé, j’émets l’hypothèse qu’un groupe avec GID 1001 existe déjà et j’entre une commande pour confirmer.
$ getent group 1001
book:x:1001:alan
Le livre de groupe avec l’ID 1001 a provoqué l’arrêt des GID d’un. C’est un exemple où un administrateur système aurait besoin de prendre plus de contrôle sur le processus de création d’utilisateur. Pour résoudre ce problème, je dois d’abord déterminer le prochain identifiant d’utilisateur et de groupe disponible qui correspondra. Les commandes getent group et getent passwd seront utiles pour déterminer le prochain nombre disponible. Ce nombre peut être passé avec l’argument -u.
$ sudo useradd -u 1004 bobby
$ getent passwd bobby; getent group bobby
bobby:x:1004:1004::/home/bobby:/bin/bash
bobby:x:1004:
Une autre bonne raison de spécifier l’ID est pour les utilisateurs qui accéderont à des fichiers sur un système distant à l’aide du système de fichiers réseau (NFS). NFS est plus facile à administrer lorsque tous les systèmes client et serveur ont le même IDENTIFIANT configuré pour un utilisateur donné. Je couvre cela un peu plus en détail dans mon article sur l’utilisation d’autofs pour monter des partages NFS.
Plus de personnalisation
Très souvent cependant, d’autres paramètres de compte doivent être spécifiés pour un utilisateur. Voici de brefs exemples des personnalisations les plus courantes que vous devrez peut-être utiliser.
Commentaire
L’option commentaire est un champ en texte brut pour fournir une brève description ou d’autres informations à l’aide de l’argument -c.
$ sudo useradd -c "Bailey is cool" bailey
$ getent passwd bailey
bailey:x:1011:1011:Bailey is cool:/home/bailey:/bin/bash
Groupes
Un utilisateur peut se voir attribuer un groupe principal et plusieurs groupes secondaires. L’argument -g spécifie le nom ou le GID du groupe principal. S’il n’est pas spécifié, useradd crée un groupe principal avec le même nom d’utilisateur (comme démontré ci-dessus). L’argument -G (majuscule) est utilisé pour transmettre une liste de groupes séparés par des virgules dans lesquels l’utilisateur sera placé ; ceux-ci sont appelés groupes secondaires.
$ sudo useradd -G tgroup,fgroup,libvirt milly
$ id milly
uid=1012(milly) gid=1012(milly) groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)
Répertoire personnel
Le comportement par défaut de useradd est de créer le répertoire personnel de l’utilisateur dans /home. Cependant, différents aspects du répertoire personnel peuvent être remplacés par les arguments suivants. Le -b définit un autre répertoire dans lequel les foyers des utilisateurs peuvent être placés. Par exemple, /home2 au lieu de /home par défaut.
$ sudo useradd -b /home2 vicky
$ getent passwd vicky
vicky:x:1013:1013::/home2/vicky:/bin/bash
Le -d vous permet de spécifier un répertoire personnel avec un nom différent de celui de l’utilisateur.
$ sudo useradd -d /home/ben jerry
$ getent passwd jerry
jerry:x:1014:1014::/home/ben:/bin/bash
Le répertoire squelette
Le -k indique que le nouveau répertoire personnel du nouvel utilisateur doit être rempli avec tous les fichiers du répertoire /etc/skel. Ce sont généralement des fichiers de configuration shell, mais ils peuvent être tout ce qu’un administrateur système souhaite mettre à la disposition de tous les nouveaux utilisateurs.
Shell
L’argument -s peut être utilisé pour spécifier le shell. La valeur par défaut est utilisée si rien d’autre n’est spécifié. Par exemple, dans ce qui suit, shell bash est défini dans le fichier de configuration par défaut, mais Wally a demandé zsh.
$ grep SHELL /etc/default/useradd
SHELL=/bin/bash
$ sudo useradd -s /usr/bin/zsh wally
$ getent passwd wally
wally:x:1004:1004::/home/wally:/usr/bin/zsh
Sécurité
La sécurité est un élément essentiel de la gestion des utilisateurs, il existe donc plusieurs options disponibles avec la commande useradd. Un compte utilisateur peut recevoir une date d’expiration, sous la forme AAAA-MM-JJ, en utilisant l’argument -e.
$ sudo useradd -e 20191231 sammy
$ sudo getent shadow sammy
sammy:!!:18171:0:99999:7::20191231:
Un compte peut également être désactivé automatiquement si le mot de passe expire. L’argument -f définit le nombre de jours après l’expiration du mot de passe avant la désactivation du compte. Zéro est immédiat.
$ sudo useradd -f 30 willy
$ sudo getent shadow willy
willy:!!:18171:0:99999:7:30::
Un exemple concret
En pratique, plusieurs de ces arguments peuvent être utilisés lors de la création d’un nouveau compte utilisateur. Par exemple, si je dois créer un compte pour Perry, je peux utiliser la commande suivante :
$ sudo useradd -u 1020 -c "Perry Example" \
-G tgroup -b /home2 \
-s /usr/bin/zsh \
-e 20201201 -f 5 perry
Reportez-vous aux sections ci-dessus pour comprendre chaque option. Vérifiez les résultats avec :
$ getent passwd perry; getent group perry; getent shadow perry; id perry
perry:x:1020:1020:Perry Example:/home2/perry:/usr/bin/zsh
perry:x:1020:
perry:!!:18171:0:99999:7:5:20201201:
uid=1020(perry) gid=1020(perry) groups=1020(perry),3000(tgroup)
Quelques conseils finaux
La commande useradd est un « must-know » pour tout administrateur Unix (pas seulement Linux). Il est important de comprendre toutes ses options car la création d’utilisateur est quelque chose que vous voulez obtenir correctement la première fois. Cela signifie avoir une convention de nommage bien pensée qui inclut une plage d’UID / GID dédiée réservée à vos utilisateurs dans toute votre entreprise, pas seulement sur un seul système — en particulier lorsque vous travaillez dans une organisation en pleine croissance.