Administration Unix - CM séance 12
Important : pour travailler ce cours, faites tous les essais dans la VM créée en TP, afin de ne pas risquer "d'abîmer" votre système hôte.
11. Gestion des utilisateurs et des groupes
11.1. Fichiers systèmes
Les utilisateurs et les groupes sont stockés dans des fichiers texte dans /etc
:
(etc signifie "editable text configuration" ; mais c'est un backronym).
Il s'agit des fichiers :
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
Le fichier /etc/passwd
Dans ce fichier, chaque ligne décrit un utilisateur : (man 5 passwd
)
root:x:0:0:root:/root:/bin/bash
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
thiel:x:1000:1000:Edouard Thiel,,,:/home/thiel:/bin/bash
vboxadd:x:998:1::/var/run/vboxadd:/bin/false
...
Une ligne est sous la forme de 7 champs séparés par ":"
:
-
login
Identifie un utilisateur ; chaque login doit être différent. Il y a des "vrais utilisateurs" (
root
,thiel
,...), et des utilisateurs système "factices" (lp
,nobody
,vboxadd
, ...) correspondant en général à des services installés. -
le mot de passe crypté
""
s'il n'y a pas besoin de mot de passe,
"x"
pour indiquer qu'il est dans/etc/shadow
-
le UID (User ID) : numéro de l'utilisateur
Les UID sont tous différents, sauf pour 0 : chaque utilisateur dont l'UID est 0 a les privilèges administrateur.
Les UID < 1000 sont en général réservés aux utilisateurs système. -
le GID (Group ID) : numéro du groupe principal de l'utilisateur
Les groupes sont définis dans
/etc/group
. -
le nom complet, et d'autres informations séparées par
","
-
le home directory, sur lequel il aura tous les droits
Peut être inexistant (/nonexistent)
-
le shell de l'utilisateur
parmi
/etc/shells
/usr/sbin/nologin
ou/bin/false
pour interdire la connexion
Le fichier /etc/passwd
doit être accessible en lecture :
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2021 Janv. 15 11:01 /etc/passwd
Le fichier /etc/shadow
Dans des version plus anciennes d'Unix, les mots de passe étant cryptés dans
le champ n°2, il était possible de les casser par force brute.
C'est pourquoi est apparu un nouveau mécanisme : un x
indique que les
mots de passe sont stockés dans /etc/shadow
, qui n'est pas accessible en
lecture pour les utilisateurs (man 5 shadow
) :
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1491 janv. 17 10:54 /etc/shadow
$ cat /etc/shadow
cat: /etc/shadow: Permission non accordée
$ sudo cat /etc/shadow
[sudo] Mot de passe de thiel :
root:!:18640:0:99999:7:::
lp:*:18474:0:99999:7:::
nobody:*:18474:0:99999:7:::
thiel:$6$YYlfRcnJ21ulniMw$bH7vHbIwM2uqCmhVEcJwzh482Kquv:18640:0:99999:7:::
vboxadd:!:18642::::::
...
Chaque ligne décrit un utilisateur, avec des champs séparés par ":"
:
-
1) Le login
-
2) Le mot de passe crypté
- si le champ est vide, il n'y a pas besoin de mot de passe
- un
"*"
ou"!"
signifie que le mot de passe est bloqué - sinon, le résultat de la commande
crypt(3)
-
3 à 8) Périodes et expirations du mot de passe, en jours depuis l'Epoch (1/1/1970).
-
9) Réservé pour un usage futur
On voit ici (caractéristique des systèmes Ubuntu) qu'il n'y a pas possible de se connecter directement comme root.
On peut avoir des informations provenant de ce fichier sans être root :
$ passwd -S thiel
thiel P 01/13/2021 0 99999 7 -1
Le fichier /etc/group
Ce fichier décrit les groupes (man 5 group
).
Chaque ligne décrit un groupe, les champs sont séparés par des ":"
-
Le nom du groupe
-
Le mot de passe crypté du groupe,
"x"
pour indiquer qu'il est dans /etc/gshadowRQ : un mot de passe de groupe est très rarement utilisé.
-
Le GID (Group ID) : numéro unique du groupe
-
Liste des utilisateurs membres, séparée par des
","
(en plus de leur groupe principal dans/etc/passwd
).
Exemple :
$ ls -l /etc/group
-rw-r--r-- 1 root root 1082 janv. 17 10:52 /etc/group
$ cat /etc/group
root:x:0:
adm:x:4:syslog,thiel
lp:x:7:
cdrom:x:24:thiel
sudo:x:27:thiel
thiel:x:1000:
vboxsf:x:998:thiel
...
Sur certains systèmes Unix (dont Ubuntu), lorsqu'on crée un utilisateur, un
groupe est automatiquement créé avec le même login (et le même ID).
Exemples : root
, lp
, thiel
, ...
Ici on voit que le user thiel
est dans plusieurs groupes.
Les commandes suivantes synthétisent ces informations :
$ id
gid=1000(thiel) groupes=1000(thiel),4(adm),24(cdrom),27(sudo),...,
998(vboxsf) ...
$ groups
thiel adm cdrom sudo vboxsf ...
L'appartenance à ces groupes permet d'accorder des droits :
adm
: peut lire les logs système dans/var/log
cdrom
: peut accéder au lecteur de CDsudo
: peut utiliser la commandesudo
vboxsf
: (vu en TP) accès aux répertoires partagés par VirtualBox- ...
cf la liste des groupes systèmes usuel pour les systèmes basés sur Debian.
Lorsqu'on rajoute ou supprime un utilisateur à un groupe, si l'utilisateur est déjà logué, il devra se déloguer/reloguer pour que les changements prennent effet.
11.2. Gestion par l'interface graphique
Les environnement de bureau graphique proposent en général un utilitaire pour gérer les utilisateurs et les groupes ; cet utilitaire vous demandera un mot de passe administrateur.
Par exemple dans XUbuntu, c'est dans [Logo XUbuntu en haut à gauche] / Paramètres / (en bas) Utilisateurs et Groupes.
-
Ajouter un Utilisateur :
- Nom complet : le nom et prénom (ex : Jean Tanrien)
- Utilisateur : son login (ex : jeant)
- Mot de passe : ... (ex : toto123)
La création d'un utilisateur entraîne la création automatique de son home directory (et en général d'un groupe à son nom).
Après la création, vous pouvez changer les paramètres :
- Nom et Prénom
- Type de compte : utilisateur, administrateur, ...
- Paramètres avancés / Privilèges utilisateur
- Paramètres avancés / Avancé : home, shell, groupe, uid
-
Gérer les groupes :
Affiche la liste des groupes disponibles :
- les groupes systèmes :
adm
,audio
,avahi
, ... - les groupes utilisateur :
thiel
,jeant
, ...
Affiche également les membres des groupes
- les groupes systèmes :
Pratique mais
- "non scriptable", donc non automatisable ;
- ne donne pas accès à tous les réglages ;
- nécessite une interface graphique (problème d'accès à distance).
11.3. Gestion en ligne de commande
Commandes utiles pour voir les uid et gid :
id
(voir plus haut)groups
(voir plus haut)
Gestion des user
Pour créer des user :
useradd
créer ou modifier un utilisateur via des arguments ; pour scriptsadduser
commande interactive (script perl) qui appelleadduser
Exemple :
$ sudo adduser peuplu
Ajout de l'utilisateur « peuplu » ...
Ajout du nouveau groupe « peuplu » (1003) ...
Ajout du nouvel utilisateur « peuplu » (1003) avec le groupe « peuplu » ...
Création du répertoire personnel « /home/peuplu »...
Copie des fichiers depuis « /etc/skel »...
Nouveau mot de passe :
Retapez le nouveau mot de passe :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur peuplu
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []: Jean Peuplu
N° de bureau []:
Téléphone professionnel []:
Téléphone personnel []:
Autre []:
Ces informations sont-elles correctes ? [O/n] O
$ id peuplu
uid=1003(peuplu) gid=1003(peuplu) groupes=1003(peuplu)
$ ls -l /home | grep peuplu
drwxr-xr-x 3 peuplu peuplu 4096 janv. 17 17:26 peuplu
Pour supprimer des user :
userdel
supprimer un utilisateurdeluser
commande plus conviviale (script perl) qui appelleuserdel
Exemple :
$ sudo deluser --remove-home peuplu
Recherche des fichiers à sauvegarder ou à supprimer...
Suppression des fichiers...
Suppression de l'utilisateur « peuplu »...
Attention ! Le groupe « peuplu » ne contient plus aucun membre.
Fait.
Gestion des groupes
Pour créer des groupes :
groupadd
créer un groupeaddgroup
commande plus conviviale (script perl) qui appellegroupadd
Exemple :
$ sudo addgroup fan_de_abba
Ajout du groupe « fan_de_abba » (GID 1003)...
Fait.
$ sudo adduser thiel fan_de_abba
Ajout de l'utilisateur « thiel » au groupe « fan_de_abba »...
Ajout de l'utilisateur thiel au groupe fan_de_abba
Fait.
$ groups # pas encore pris en compte, se reconnecter
thiel ... vboxsf
$ groups thiel
thiel : thiel ... vboxsf fan_de_abba
$ sudo deluser thiel fan_de_abba
Suppression de l'utilisateur « thiel » du groupe « fan_de_abba »...
Fait.
Autre commande pour rajouter un utilisateur dans un groupe (RHEL) :
$ sudo usermod -a -G fan_de_abba thiel
Pour supprimer des groupes :
groupdel
supprimer un groupdelgroup
commande plus conviviale (script perl) qui appellegroupedel
Exemple :
$ sudo delgroup --only-if-empty fan_de_abba
Suppression du groupe « fan_de_abba »...
Fait.
Modifications
-
Pour gérer les mots de passe :
passwd
mot de passe d'un utilisateurgpasswd
mot de passe d'un groupe
Exemple :
$ sudo adduser auchon
...
Nom complet []: Paul Auchon
...
$ sudo passwd auchon
Nouveau mot de passe : ...
Retapez le nouveau mot de passe : ...
passwd : le mot de passe a été mis à jour avec succès
$ su auchon
Mot de passe : ...
$ id
uid=1003(auchon) gid=1003(auchon) groupes=1003(auchon)
$ exit
-
Pour modifier des user et groupes :
usermod
modifie un user ; nombreuses optionsgroupmod
modifie un groupe du système
Exemple :
$ sudo usermod -L auchon # lock le password en rajoutant ! dans /etc/shadow
$ sudo passwd -S auchon
auchon L 01/21/2022 0 99999 7 -1
$ sudo grep auchon /etc/shadow 2>/dev/null
auchon:!......:19013:0:99999:7:::
$ su auchon
Mot de passe : ...
su: Échec d'authentification
$ sudo usermod -U auchon # unlock le password en enlevant !
$ sudo passwd -S auchon
auchon P 01/21/2022 0 99999 7 -1
-
Divers :
vipw
etvigr
édite/etc/passwd
,/etc/group
,/etc/shadow
,/etc/gshadow
avecvi
, en plaçant un verrou pour éviter des conflits.chfn
change le fullname dans/etc/passwd
chsh
change le login shell dans/etc/passwd
last
affiche les dernières connexionslastb
idem + échecs
Exemple :
$ sudo vipw # le faire dans 2 terminaux ; le 2e sera bloqué
$ sudo apt install finger
$ finger auchon
Login: auchon Name: Paul Auchon
Directory: /home/auchon Shell: /bin/bash
...
$ sudo chfn -f "Cab Auchon" auchon # Change le fullname
$ sudo chsh -s /bin/sh auchon # Change le shell
$ last
$ last -5 reboot
$ sudo login -f auchon
...
$ exit
$ last -5
$ sudo lastb
$ sudo login
xubu1 login: auchon
Mot de passe: *mauvais-mot*
Identifiant de connexion incorrect
$ sudo lastb
11.4. Configuration
Il y a 2 fichiers de configurations un peu redondants, l'un pour les
commandes addxxx
et l'autre pour yyyadd
; il faut donc configurer les deux.
/etc/adduser.conf
: fichier de configuration de adduser
et addgroup
$ more /etc/adduser.conf
# /etc/adduser.conf: `adduser' configuration.
# See adduser(8) and adduser.conf(5) for full documentation.
# The DSHELL variable specifies the default login shell on your system.
DSHELL=/bin/bash
# The DHOME variable specifies the directory containing users' home-dirs.
DHOME=/home
...
FIRST_UID=1000
LAST_UID=59999
FIRST_GID=1000
LAST_GID=59999
# The USERGROUPS variable can be either "yes" or "no". If "yes" each
# created user will be given their own group to use as a default. If
# "no", each created user will be placed in the group whose gid is
# USERS_GID (see below).
USERGROUPS=yes
# If USERGROUPS is "no", then USERS_GID should be the GID of the group
# `users' (or the equivalent group) on your system.
USERS_GID=100
...
/etc/login.defs
: fichier de configuration de useradd
, groupadd
,
et pour la connexion
$ more /etc/login.defs
...
# If defined, login failures will be logged here in a utmp format
# last, when invoked as lastb, will read /var/log/btmp, so...
FTMP_FILE /var/log/btmp
# *REQUIRED* The default PATH settings, for superuser and normal users.
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# Password aging controls:
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
# Min/max values for automatic uid selection in useradd
UID_MIN 1000
UID_MAX 60000
# System accounts
#SYS_UID_MIN 100
#SYS_UID_MAX 999
# Min/max values for automatic gid selection in groupadd
GID_MIN 1000
GID_MAX 60000
# System accounts
#SYS_GID_MIN 100
#SYS_GID_MAX 999
# Max number of login retries if password is bad.
LOGIN_RETRIES 5
...
Pour la politique générale d'authentification : man pam
(Pluggable Authentication Modules for Linux).
11.5. Propriétaires et groupes des fichiers
Les fichiers créés par un utilisateur lui appartiennent ainsi qu'à son groupe principal.
Un admin peut modifier après coup le propriétaire et le groupe
(rajouter sudo
avant) :
$ chown proprio fichier... # change le propriétaire des fichiers
$ chown proprio: fichier... # idem, avec de plus son groupe principal
$ chown proprio:groupe fichier... # idem en précisant le groupe
$ chown -R proprio répertoire... # opération récursive
$ chgrp groupe fichier... # change le groupe des fichiers
$ chgrp -R groupe répertoire... # opération récursive