Module 1
Chapitre 05 - Gestion des utilisateurs
1. Gestion des utilisateurs et groupe
1.1 Les utilisateurs
Unix est un système multi-utilisateurs. Plusieurs personnes peuvent l'utiliser de façon simultanée (dans le cas de configurations en réseau).
Pour le système, un utilisateur n'est pas obligatoirement une personne physique. Un utilisateur peut détenir des fichiers, exécuter des programmes ou encore déclencher automatiquement des fonctions systèmes.
Par exemple, un utilisateur peut être créé dans le seul but de détenir des fichiers publics. On parle alors de pseudo utilisateur.
Un utilisateur possède un nom d'utilisateur appelé aussi login lui permettant d'établir une connexion. Ce login est associé à un mot de passe personnel. Pour accéder aux ressources du système, l'utilisateur doit entrer la bonne paire login/mot de passe : c'est l'authentification(le login).
Les utilisateurs sont identifiés par le système grâce à un UID (identifiant d'utilisateur) unique. Cet identifiant est une valeur numérique.
1.1.1 Le fichier /etc/passwd
Le fichier /etc/passwd contient les informations relatives à tous les utilisateurs du système. On y touve leur :
login
mot de passe (chiffré)
UID
GID principal
nom complet et autres informations
répertoire principal
leur shell
La syntaxe de "/etc/passwd" est très simple, chaque ligne concerne un utilisateur. les différents champs sont séparés par des ":" :
login:mot-de-passe:UID:GID:info-utilisateur:répertoire-principal:shell
Détaillons les champs :
Login : c'est l'identifiant que doit entrer l'utlisateur pour s'authentifier. La convention veut qu'un utilisateur John Smith possède jsmith ou smith_j comme login.
Mot de passe : il est évident que le mot de passe n'apparait pas en clair dans le fichier, il est chiffré en md5. C'est la commande passwd qui s'occupe de chiffrer le mot de passe. Ce champ peut prendre plusieurs siginifications :
"*" : il est impossible de s'authentifier sur le système avec ce compte
"!!" : Le compte est désactivé
"x" ou "!" : le mot de passe est dans un fichier shadow (voir ci-après)
champ vide : Il n'y a pas de mot de passe pour ce compte.
UID : il s'agit de l'identifiant unique de l'utilisateur.
L'utilisateur root possède l'UID 0
Par convention, les UID inférieurs à 100 sont réservés aux comptes système.
GID : l'identifiant du groupe principal de l'utilisateur
Info utilisateur : des informations sur l'utilisateur. chaque information est séparée par une virgule (le nom complet, numéro de poste ...).
répertoire personnel : Il s'agit du répertoire dans lequel sont stockés les fichiers appartenant à l'utilisateur. En général de la forme /home/login.
shell : c'est l'interpréteur de commandes qui sera lancé après l'authentification.
1.1.2 Le fichier /etc/shadow
Le fichier /etc/passwd est accessible à tout le monde. en effet, certaines commandes ont besoin de connaitre la liste des utlisateurs ou la correspondance login/UID.
La présence du mot de passe dans /etc/passwd, même crypté, pose un problème de sécurité. La solution à ce problème est de stocker les mots de passe dans un fichier différent : /etc/shadow. Pour garantir la sécurité, seul l'administrateur peut le lire.
| Note: | |
sous Linux, si le fichier /etc/shadow n'est pas utilisé, l'utilitaire pwconv permet, à partir d'un fichier /etc/passwd unique, de créer le fichier /etc/shadow qui lui correspond. |
1.2 Les Groupes
Le fichier /etc/group contient les information relatives au groupes présents sur le système.
Voici sa syntaxe :
groupe:*:GID:utilisateurs
groupe : le nom du groupe
* : la présence de ce champ est lié aux anciennes versions d'Unix et n'est plus utilisé. Il peut rester vide ou contenir le caractère "*" ou "x".
GID : c'est l'identifiant unique du groupe sous la forme d'une valeur numérique.
utilisateur : il s'agit de la liste des utilisateurs appartenant au groupe. Ils sont séparés par des virgules :
compta:x:230:pierre,romain,jerome
1.3 Les commandes de gestion des utilsateurs
Afin de manipuler les fichiers passwd, shadow et group facilement, des commandes ont été crées. Elles automatisent les vérifications (l'utilisateur à créer existe-t-il déja ? le mot de passe est-il assez compliqué ?...) évitant ainsi toute erreur de saisie.
1.3.1 Ajouter un utilisateur
La commande useradd permet de créer un utilisateur :
useradd [options] login
Principales options de useradd
Option | Explication |
-c commentaire | Informations concernant l'utilisateur (nom, poste) |
-d répertoire | Chemin du répertoire personnel de l'utilisateur |
-e date | Date d'expiration du compte. Le format est AAAA-MM-JJ |
-f nombre de jours | C'est le nombre de jours suivant l'expiration du mot de passe après lequel le compte est désactivé. La valeur 0 permet de désactiver le compte dès que le mot de passe expire. La valeur -1 permet de désactiver cette caractéristique. La valeur par défaut est -1 |
-g groupe principal | Le nom du groupe ou le numéro du groupe de connexion initial de l'utilisateur. Le nom ou le numéro du groupe doivent exister. Le numéro de groupe par défaut est 1 |
-G groupes supplémentaire | Les autres groupes auxquels appartient l'utilisateur (séparés par des virgules) |
-m | Le répertoire de l'utilisateur sera créé (par défaut, cela n'est pas fait) |
-k [ répertoire ] | A utiliser si et seulement si l'option -m est présente. Permet de copier les fichiers et répertoires contenus dans le répertoire répertoire (/etc/skel si non spécifié) dans le répertoire de l'utilisateur |
-p le mot de passe chiffré | Vous pouvez saisir le mot de passe en option. Il doit être chiffré (pour récupérer la version cryptée d'un mot de passe il faut utliser la bibliothèque crypt). Le comportement par défaut est de désactiver le compte |
-s chemin vers un exécutable | Shell lancé à la connexion de l'utilisateur |
-u uid | L'identifiant unique de l'utilisateur |
Exemple : nous voulons créer l'utlisateur lambda :
commentaire : "utilisateur lambda"
son shell : /bin/zsh
son répertoire personnel : /home/lambda
nous recopions le contenu de /etc/skel dans son répertoire
il appartient aux groupes "dev" et "final"
le compte sera désactivé immédiatement après expiration du mot de passe
root@localhost # useradd -c "utilisateur lambda" -f 0 -G final,dev -m -k /etc/skel -s /bin/zsh lambda
La commande useradd -D montre les options par défaut :
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel
Il est possible de changer les valeurs par défaut grace aux options suivantes :
Options de useradd -D
Option | Explication |
-h répertoire | Répertoire dans lequel créer les répertoires utilisateurs |
-e date | La date d'expiration du compte |
-f nombre de jours | Délai de désactivation après expiration du mot de passe |
-g GID | Le groupe par défaut |
-s chemin vers un exécutable | Le shell par défaut |
1.3.2 Suppression d'un utilisateur
La commande userdel permet de supprimer un utilisateur :
root@localhost # userdel options login
L'option -r efface le répertoire personnel de l'utilisateur.
1.3.3 Changer le mot de passe d'un utilisateur
La commande passwd permet de changer le mot de passe d'un utilisateur. L'administrateur peut changer n'importe quel mot de passe. Un utilisateur normal ne peut changer que son propre mot de passe.
passwd [ options ] [ login ]
Si l'argument login n'est pas spécifié, le changement de mot de passe s'applique sur l'utilisateur courrant.
Options passwd
Option | Explication |
-k | Indique que seul le mot de passe doit être mis à jour sans toucher aux propriétés d'expiration |
-l | Permet de verrouiller le compte spécifié en préfixant le mot de passe crypté par le caractère "!". Seul l'utilisateur root peut utiliser cette option |
--stdin | Le mot de passe doit être lu à partir de l'entrée standard qui peut alors être un tube (pipe) |
-u | Déverrouille le mot de passe du compte. Seul l'utilisateur root peut utiliser cette option |
-d | Supprime le mot de passe d'un compte. Le champ réservé au mot de passe crypté sera supprimé dans le fichier de configuration. Seul l'utilisateur root peut utiliser cette option |
-S | Affiche des informations sur le statut du mot de passe pour un compte donné. Seul l'utilisateur root peut utiliser cette option |
1.3.4 Afficher des informations sur un utilisateur
Pour connaître l'identité de l'utilisateur courant (bien que cela soit affiché dans la majorité des prompts par défaut) on utilise la commande whoami.
Elle affiche le login de l'utilisateur courant. Les commandes who, users et w permettent de connaître les utilisateurs actuellement connectés sur la machine.
1.4 Les commandes de gestion des groupes
1.4.1 Créer un groupe
La commande groupadd permet de créer un nouveau groupe :
root@localhost # groupadd option groupe
Options de groupadd
Option | Explication |
-g | Permet de choisir la valeur numérique du GID du nouveau groupe. Cet identifiant doit être unique |
-r | Cette option permet d'ajouter un groupe système (dont le GID est inférieur à 500) |
-f | Permet de stopper la commande lorsque le groupe ou le GID du nouveau groupe existe déjà |
1.4.2 Suppression d'un groupe
Pour supprimer un groupe, on utilise la commande groupdel :
groupdel GID
| Note: | |
on ne peut pas supprimer un groupe si c'est le groupe principal d'un utilisateur. |
1.4.3 Modifier les groupes secondaires d'un compte
Pour modifier les groupes secondaire d'un utilisateur, on utilise la commande usermod qui est similaire à useradd et supporte les mêmes options :
root@localhost # usermod -G toto,users,fileshare,dev toto
Ceci permet d'ajouter l'utilisateur "toto" dans les groupes "toto", "users", "fileshare" et "dev".
Attention : lors de l'utilisation de la commande usermod -G il est nécessaire de rappeler l'ensemble de groupes secondaires auxquels appartient l'utilisateur.
On peut aussi ajouter et enlever des utilisateurs d'un groupe grâce à la commande gpasswd
Options de gpasswd
Option | Explication |
-a | Ajout d'un utilisateur |
-d | Suppression d'un utilisateur |
1.4.4 Afficher des informations sur les groupes
Pour connaître les groupes auxquels appartient un utilisateur, on utilise la commande groups. Sans argument, elle affiche les groupes de l'utilisateur courant. Pour connaître less groupes d'un utilisateur particulier, il suffit de passer son login en argument de la commande :
root@localhost # groups
root wheel disk adm sys daemon bin
luser@localhost $ groups toto
toto users fileshare
Sur de très anciens SystemV, il n'était pas possible d'activer plusieurs groupes simultanément pour le même utilisateur. La commande id permet de connaître les groupes actifs :
root@localhost # id
uid=0(root) gid=0(root) groupes=0(root), 10(wheel),6(disk),4(adm),3(sys),2(daemon),1(bin)
Pour changer le groupe actif sur un tel système, on utilise la commande newgrp. Lorsqu'elle est utilisée sans argument, elle active le groupe principal de l'utilisateur (le groupp e qui figure dans "/etc/passwd").
1.5 Changer d'identité
Il se peut qu'un utilisateur soit obligé d'effectuer des tâches avec une identité différente. La situation la plus courante étant un utilisateur normal voulant effectuer quelques tâches en tant qu'administrateur.
La commande su (switch user), permet de changer d'identité:
Commande | Explication |
su | Sans option, su permet de se connecter en tant qu'administrateur |
su lambda | Agir en tant qu'utilisateur lambda |
su - lambda | Se connecter en tant que lambda. Avec "-" on récupère tout l'environnement de l'utilisateur lambda |
su -c "mount /dev/cdrom /mnt/cdrom" | l'option -c permet simplement d'exécuter la commande entre guillemet en tant que root (pas d'option). Une fois la commande terminée, on reprend son identit |