Dans ce chapitre, vous aller apprendre à gérer les utilisateurs.
Objectifs : Dans ce chapitre, les futurs administrateurs Linux apprendront à :
ajouter, supprimer ou modifier un groupe ; ajouter, supprimer ou modifier un utilisateur ; comprendre les fichiers associés aux utilisateurs et aux groupes et apprendre à les gérer ; modifiez le propriétaire ou le groupe propriétaire d'un fichier ; sécuriser les comptes utilisateur ; changer d'identité.
Chaque utilisateur est membre d'au moins un groupe, qui est appelé le groupe principal de l'utilisateur.
Plusieurs utilisateurs peuvent faire partie d’un même groupe.
Les autres groupes que le groupe principal sont appelés groupes secondaires de l'utilisateur.
Note
Chaque utilisateur a un groupe principal et peut être invité dans un ou plusieurs groupes secondaires.
Les groupes et utilisateurs se gèrent par leur identifiant numérique unique GID et UID.
UID : User IDentifier. Identifiant unique d’utilisateur.
GID : Group IDentifier. Identifiant unique de groupe.
L'UID et le GID sont reconnus par le noyau, ce qui signifie que le Super Admin n'est pas nécessairement l'utilisateur root , tant que l'utilisateur ayant pour uid=0 est le Super Admin.
Les fichiers liés aux utilisateurs/groupes sont:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/skel/
/etc/default/useradd
/etc/login.defs
Danger
Il est recommandé d’utiliser les commandes d’administration au lieu de modifier manuellement les fichiers.
La commande groupadd permet d’ajouter un groupe au système.
groupadd [-f] [-g GID] groupe
Exemple :
$ sudo groupadd -g 1012 GroupeB
Option
Description
-g GID
GID du groupe à créer.
-f
Le système choisit un GID si celui précisé par l’option -g existe déjà.
-r
Crée un groupe système avec un GID compris entre SYS_GID_MIN et SYS_GID_MAX. Ces deux variables sont définies dans /etc/login.defs.
Règles de nommage des groupes :
Pas d’accents, ni caractères spéciaux ;
Différents du nom d’un utilisateur ou fichier système existant.
Note
Sous Debian, l'administrateur devrait utiliser, sauf dans les scripts destinés à être portables sur toutes les distributions Linux, les commandes addgroup et delgroup spécifiées dans le man :
$ man addgroup
DESCRIPTION
adduser et addgroup ajoutent des utilisateurs ou des groupes au système en fonction des options fournies en ligne de commande et des informations contenues dans le fichier de configuration /etc/adduser.conf. Ce sont des interfaces plus conviviales que les programmes useradd et groupadd. Elles permettent de choisir par défaut des UID ou des GID conformes à la charte Debian, de créer un répertoire personnel configuré suivant un modèle (squelette), d'utiliser un script sur mesure, et d'autres fonctionnalités encore.
La commande groupdel permet de supprimer un groupe existant sur le système.
groupdel groupe
Exemple :
$ sudo groupdel GroupeC
Astuce
Lors de la suppression d'un groupe, il y a deux conditions :
Si un utilisateur a un groupe principal unique et que vous exécutez la commande groupdel sur ce groupe, vous serez informés qu'il y a un utilisateur spécifique dans le groupe et qu'il ne peut pas être supprimé.
Si un utilisateur appartient à un groupe secondaire (ce n'est pas le groupe principal de l'utilisateur) et que ce groupe n'est pas le groupe principal d'un autre utilisateur du système, alors la commande groupdel supprimera le groupe sans notification supplémentaire.
Lorsque vous supprimez un utilisateur en utilisant la commande userdel -r, le groupe principal correspondant est également supprimé. Le nom du groupe principal est généralement le même que celui de l'utilisateur.
Astuce
Chaque groupe a un GID unique. Un groupe peut être utilisé par plusieurs utilisateurs comme groupe secondaire. Par convention, le GID du super administrateur est 0. Les GID réservés à certains services ou processus vont de 201à 999, ils sont appelés groupes système ou groupes de pseudo-utilisateurs. Le GID pour les utilisateurs est généralement supérieur ou égal à 1000. Ils sont liés à /etc/login.defs, dont nous reparlerons plus tard.
Un utilisateur faisant obligatoirement partie d’un groupe, il est préférable de créer les groupes avant d’ajouter les utilisateurs. Par conséquent, un groupe peut ne pas avoir de membres.
4 : Utilisateurs supplémentaires du groupe (à l'exclusion des utilisateurs dont c'est le groupe principal).
Warning
Les noms des groupes dans /etc/group et /etc/gshadow doivent correspondre ligne par ligne, c'est-à-dire chaque ligne du fichier /etc/group doit avoir une ligne correspondante dans le fichier /etc/gshadow.
Un ! au niveau du mot de passe indique que celui-ci est verrouillé. Ainsi aucun utilisateur ne peut utiliser le mot de passe pour accéder au groupe (sachant que les membres du groupe n’en ont pas besoin).
Un utilisateur se définit comme suit dans le fichier /etc/passwd :
1 : Nom de connexion ;
2 : Identification du mot de passe, x indique que l'utilisateur a un mot de passe, ce mot de passe encrypté est enregistré dans le second champ du fichier /etc/shadow ;
3 : UID ;
4 : GID du groupe primaire ;
5 : Commentaires ;
6 : Répertoire de connexion ;
7 : Shell (/bin/bash, /bin/nologin, ...).
Il existe trois types d’utilisateurs :
root(uid=0) : l'administrateur système ;
utilisateurs système (uid entre 201 et 999) : utilisé par le système pour gérer les droits d'accès aux applications ;
utilisateur standard (uid>=1000) : autre compte pour se connecter au système.
GID du groupe principal. Le GID ici peut également être un nom de groupe ``.
-G GID1,[GID2]...
GID des groupes supplémentaires. Le GID ici peut également être un nom de groupe. Plusieurs groupes supplémentaires peuvent être spécifiés, séparés par des virgules.
-d repertoire
Répertoire de connexion.
-s shell
Interpréteur de commandes.
-c COMMENTAIRES
Ajoute un commentaire.
-U
Ajoute l’utilisateur à un groupe portant le même nom créé simultanément. Si cette option n'est pas écrite par défaut, un groupe avec le même nom sera créé lorsque l'utilisateur sera créé.
-M
Ne pas créer le répertoire personnel de l'utilisateur.
-r
Créer un compte système.
À la création, le compte ne possède pas de mot de passe et est verrouillé.
Il faut assigner un mot de passe pour déverrouiller le compte.
Lorsque la commande useradd n'a pas d'options, elle apparaît :
Créer un répertoire personnel avec le même nom ;
Créer un groupe primaire avec le même nom ;
Le shell par défaut est bash ;
L'UID de l'utilisateur et le GID du groupe primaire sont automatiquement enregistrés à partir de 1000, et généralement les UID et GID sont les mêmes.
Pas d’accents, de majuscules ni caractères spéciaux ;
Différents du nom d’un groupe ou fichier système existant ;
Facultatif : spécifier les options -u, -g, -d et -s lors de la création.
Warning
L’arborescence du répertoire de connexion doit être créée à l’exception du dernier répertoire.
Le dernier répertoire est créé par la commande useradd qui en profite pour y copier les fichiers de /etc/skel.
Un utilisateur peut appartenir à plusieurs groupes en plus de son groupe principal.
Exemple :
$ sudo useradd -u 1000 -g GroupeA -G GroupeP,GroupeC albert
Note
Sous Debian, il faudra spécifier l’option -m pour forcer la création du répertoire de connexion ou positionner la variable CREATE_HOME du fichier /etc/login.defs. Dans tous les cas, l’administrateur devrait privilégier, sauf dans des scripts ayant la vocation d’être portables sur toutes les distributions Linux, les commandes adduser et deluser comme précisé dans le man :
$ man useradd
DESCRIPTION
**useradd** est un utilitaire de bas niveau pour ajouter des utilisateurs. Sur Debian, les administrateurs devraient généralement utiliser **adduser(8)**
à la place.
Associé à l'option -d , déplace le contenu de l'ancien répertoire de connexion vers le nouveau. Si l'ancien répertoire personnel n'existe pas, le nouveau répertoire personnel ne sera pas créé ; Si le nouveau répertoire personnel n'existe pas, il est créé.
-l login
Nouveau nom de connexion. Une fois que vous avez modifié le nom de connexion, vous devez également modifier le nom du répertoire personnel pour le correspondre.
-e AAAA-MM-JJ
Date d’expiration du compte.
-L
Verrouiller définitivement le compte. C'est-à-dire, un ! est ajouté au début du champ de mot de passe /etc/shadow
-U
Déverrouille le compte.
-a
Ajoute les groupes supplémentaires de l'utilisateur, qui doivent être utilisés avec l'option -G.
-G
Modifier les groupes secondaires de l'utilisateur pour écraser les groupes secondaires précédents.
Astuce
Pour être modifié, un utilisateur doit être déconnecté et ne pas avoir de processus en cours.
Après modification de l’identifiant, les fichiers appartenant à l’utilisateur ont un UID inconnu. Il faut leur réattribuer le nouvel UID.
Où 1000 est l’ancien UID et 1044 le nouveau. En voici quelques exemples :
$ sudo find / -uid 1000 -exec chown 1044: {} \;
Verrouillage et déverrouillage du compte d'utilisateur. En voici quelques exemples :
La commande userdel permet de supprimer le compte d’un utilisateur.
$ sudo userdel -r carine
Option
Observation
-r
Supprime le répertoire de connexion de l'utilisateur et les fichiers de messagerie situés dans le répertoire /var/spool/mail/
Astuce
Pour être modifié, un utilisateur doit être déconnecté et ne pas avoir de processus en cours.
La commande userdel supprime les lignes correspondantes dans /etc/passwd, / <unk> shadow, /etc/group, /etc/gshadow. Comme mentionné ci-dessus, userdel -r supprimera également le groupe principal correspondant de l'utilisateur.
Ce fichier contient les informations des utilisateurs (séparées par :).
$ sudo head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
(1)(2)(3)(4)(5) (6) (7)
1: Login ;
2 : Identification du mot de passe, x indique que l'utilisateur a un mot de passe, ce mot de passe encrypté est enregistré dans le second champ du fichier /etc/shadow ;
3: UID ;
4: GID du groupe primaire ;
5: Commentaires ;
6: Répertoire de connexion ;
7: Interpréteur de commandes (/bin/bash, /bin/nologin, ...).
2: Mot de passe chiffré. Utilise l'algorithme de chiffrement SHA512, défini par l' ENCRYPT_METHOD de /etc/login.defs.
3: La date à laquelle le mot de passe a été modifié pour la dernière fois, au format de l'horodatage, en jours. L'horodatage est basé sur le 1er janvier 1970 comme heure standard. Chaque fois qu'un jour se passe, l'horodatage est +1.
4: Durée de vie minimale du mot de passe. C'est-à-dire L'intervalle de temps entre deux changements de mot de passe (liés au troisième champ), en jours. Défini par le PASS_MIN_DAYS de /etc/login.defs, la valeur par défaut est 0, c'est-à-dire lorsque vous changez le mot de passe pour la deuxième fois, il n'y a pas de restriction. Cependant, s'il est de 5, cela signifie qu'il n'est pas autorisé à changer le mot de passe dans les 5 jours, et seulement après 5 jours.
5: Durée de vie maximale du mot de passe. C'est-à-dire la période de validité du mot de passe (lié au troisième champ). Défini par le PASS_MAX_DAYS de /etc/login.defs.
6: Le nombre de jours d'avertissement avant l'expiration du mot de passe (lié au cinquième champ). La valeur par défaut est de 7 jours, définie par le PASS_WARN_AGE de /etc/login.defs.
7: Le nombre de jours de grâce après l'expiration du mot de passe (lié au 5ème champ).
8: Heure d'expiration du compte, le format de l'horodatage, en jours. Notez que l'expiration d'un compte diffère de l'expiration d'un mot de passe. En cas d'expiration d'un compte, l'utilisateur ne sera pas autorisé à se connecter. En cas d'expiration du mot de passe, l'utilisateur n'est pas autorisé à se connecter en utilisant son mot de passe.
9: Réservé pour une utilisation future.
Danger
Pour chaque ligne du fichier /etc/passwd doit correspondre une ligne du fichier /etc/shadow.
Pour la conversion de l'horodatage et de la date, veuillez vous référer au format de commande suivant :
# L'horodatage est converti en date, "17718" indique l'horodatage à remplir.
Shell>date-d"1970-01-01 17718 days"# La date est convertie en un horodatage, "2018-07-06" indique la date à remplir.
Shell>echo$(($(date--date="2018-07-06"+%s)/86400+1))
$ sudo gpasswd -A alain GroupeA
[alain]$ gpasswd -a patrick GroupeA
Option
Observation
-a login
Ajoute l’utilisateur au groupe. Pour l'utilisateur ajouté, ce groupe est un groupe supplémentaire.
-A login, ...
Définit la liste des administrateurs du groupe.
-d login
Retire l’utilisateur du groupe.
-M login,...
Définit la liste exhaustive des invités.
La commande gpasswd -M agit en modification et non en ajout.
# gpasswd GroupeA
New Password :
Re-enter new password :
Note
En plus de l'utilisation de gpasswd -a pour ajouter des utilisateurs à un groupe, vous pouvez également utiliser le usermod -G ou le usermod -AG mentionné précédemment.
La commande newgrp peut sélectionner un groupe parmi les groupes supplémentaires de l'utilisateur comme le nouveau groupe principaltemporaire de l'utilisateur. La commande newgrp à chaque fois que vous basculez le groupe principal d'un utilisateur, créera un nouveau shell enfant (processus fils). Attention ! le shell enfant et sous shell sont différents.
La commande passwd permet de gérer un mot de passe.
passwd [-d] [-l] [-S] [-u] [login]
Exemples :
Shell > passwd -l albert
Shell > passwd -n 60 -x 90 -w 80 -i 10 patrick
Option
Observation
-d
Supprime définitivement le mot de passe. Réservé à l'utilisateur root (uid=0) uniquement.
-l
Verrouiller définitivement le compte utilisateur. Réservé à l'utilisateur root (uid=0) uniquement.
-S
Affiche le statut du compte. Réservé à l'utilisateur root (uid=0) uniquement.
- u
Déverrouille définitivement le compte utilisateur. Réservé à l'utilisateur root (uid=0) uniquement.
-e
Expiration permanente du mot de passe. Réservé à l'utilisateur root (uid=0) uniquement.
-n jours
Durée de vie minimale du mot de passe. Changement permanent. Réservé à l'utilisateur root (uid=0) uniquement.
-x jours
Durée de vie maximale du mot de passe. Changement permanent. Réservé à l'utilisateur root (uid=0) uniquement.
-w jours
Délai d’avertissement avant expiration. Changement permanent. Réservé à l'utilisateur root (uid=0) uniquement.
-i jours
Délai avant désactivation lorsque le mot de passe expire. Changement permanent. Réservé à l'utilisateur root (uid=0) uniquement.
Utiliser password -l ajoute "!!" devant le mot de passe de l'utilisateur correspondant qui est contenu dans le fichier /etc/shadow.
Exemple :
Alain change son mot de passe :
[alain]$ passwd
root change le mot de passe d’Alain :
$ sudo passwd alain
Note
La commande passwd est accessible aux utilisateurs pour modifier leur mot de passe (l’ancien mot de passe est demandé). L’administrateur peut modifier les mots de passe de tous les utilisateurs sans restriction.
Ils devront se soumettre aux restrictions de sécurité.
Lors d’une gestion des comptes utilisateurs par script shell, il peut être utile de définir un mot de passe par défaut après avoir créé l’utilisateur.
Ceci peut se faire en passant le mot de passe à la commande passwd.
Exemple :
$ sudo echo "azerty,1" | passwd --stdin philippe
Warning
Le mot de passe est saisi en clair, passwd se charge de le chiffrer.
Délai avant désactivation, mot de passe expiré (i majuscule). Changement permanent.
-l
Affiche le détail de la stratégie (l minuscule).
-m jours
Durée de vie minimale du mot de passe. Changement permanent.
-M jours
Durée de vie maximale du mot de passe. Changement permanent.
-d LAST_DAY
Dernière modification du mot de passe. Vous pouvez utiliser le style de l'horodatage des jours ou le style AAAA-MM-JJ. Changement permanent.
-E DATE_EXPIRATION
Date d’expiration du compte. Vous pouvez utiliser le style de l'horodatage des jours ou le style AAAA-MM-JJ. Changement permanent.
-W jours
Délai d’avertissement avant expiration. Changement permanent.
Exemples :
# La commande `chage` offre également un mode interactif.
$ sudo chage philippe
# L'option `-d` force le mot de passe à changer à la connexion.
$ sudo chage -d 0 philippe
Ce fichier contient le paramétrage des données par défaut.
Astuce
Lors de la création d’un utilisateur, si les options ne sont pas précisées, le système utilise les valeurs par défaut définies dans /etc/default/useradd.
Ce fichier est modifié par la commande useradd -D (useradd -D saisie sans autre option affiche le contenu du fichier /etc/default/useradd).
Définir le chemin du répertoire du niveau supérieur au répertoire de connexion d'un l'utilisateur standard.
INACTIVE
Nombre de jours de grâce après l'expiration du mot de passe. Correspond au 7ème champ du fichier /etc/shadow. La valeur -1 signifie que la fonctionnalité de période de grâce est désactivée.
EXPIRE
Date d’expiration du compte. Correspond au 8ème champ du fichier /etc/shadow.
SHELL
Interpréteur de commandes.
SKEL
Répertoire squelette du répertoire de connexion.
CREATE_MAIL_SPOOL
Création de la boîte aux lettres dans /var/spool/mail.
Si vous n'avez pas besoin d'un groupe primaire portant le même nom lors de la création d'utilisateurs, vous pouvez faire :
UMASK 022: Cela signifie que la permission de créer un fichier est 755 (rwxr-xr-x). Cependant, pour des raisons de sécurité, GNU/Linux n'a pas l'autorisation x pour les fichiers nouvellement créés, cette restriction s'applique à root(uid=0) et aux utilisateurs ordinaires (uid>=1000). Par exemple :
HOME_MODE 0700: Les permissions du répertoire personnel d'un utilisateur standard. Ne fonctionne pas pour le répertoire personnel de root.
Shell > ll -d /root
dr-xr-x---. 10 root root 4096 Oct 8 13:12 /root
Shell > ls -ld /home/test1/
drwx------ 2 test1 test1 4096 Oct 8 13:10 /home/test1/
USERGROUPS_ENAB yes: "Quand vous supprimez un utilisateur en utilisant la commande userdel -r , le groupe principal correspondant est également supprimé." Pourquoi ? C'est la raison.
Lors de la création d’un utilisateur, son répertoire personnel et ses fichiers d’environnement sont créés. Vous pouvez considérer les fichiers du répertoire /etc/skel/ comme les modèles de fichiers dont vous avez besoin pour créer des utilisateurs.
Ces fichiers sont copiés automatiquement à partir du répertoire /etc/skel.
.bash_logout
.bash_profile
.bashrc
Tous les fichiers et répertoires placés dans ce répertoire seront copiés dans l’arborescence des utilisateurs lors de leur création.
La commande su permet de modifier l’identité de l’utilisateur connecté.
su [-] [-c command] [login]
Exemples :
$ sudo su - alain
[albert]$ su - root -c "passwd alain"
Option
Observation
-
Charge l’environnement complet de l’utilisateur.
-c command
Exécute la commande sous l’identité de l’utilisateur.
Si le login n’est pas spécifié, ce sera root.
Les utilisateurs standards devront taper le mot de passe de la nouvelle identité.
Astuce
Vous pouvez utiliser la commande exit/logout pour déconnecter les utilisateurs. Il devrait être noté qu'après un changement d'utilisateur, il n'y a pas de nouveau child shell or sub shell, par exemple :
Donc, lorsque vous voulez changer d'utilisateurs, n'oubliez pas le -. Comme les fichiers de variables d'environnement nécessaires ne sont pas chargés, il peut y avoir des problèmes pour exécuter certains programmes.