Aller au contenu

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 ":" :

  1. 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.

  2. 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

  3. 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.

  4. le GID (Group ID) : numéro du groupe principal de l'utilisateur

    Les groupes sont définis dans /etc/group.

  5. le nom complet, et d'autres informations séparées par ","

  6. le home directory, sur lequel il aura tous les droits

    Peut être inexistant (/nonexistent)

  7. 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 ":"

  1. Le nom du groupe

  2. Le mot de passe crypté du groupe, "x" pour indiquer qu'il est dans /etc/gshadow

    RQ : un mot de passe de groupe est très rarement utilisé.

  3. Le GID (Group ID) : numéro unique du groupe

  4. 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 CD
  • sudo : peut utiliser la commande sudo
  • 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

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 scripts
  • adduser   commande interactive (script perl) qui appelle adduser

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 utilisateur
  • deluser   commande plus conviviale (script perl) qui appelle userdel

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 groupe
  • addgroup   commande plus conviviale (script perl) qui appelle groupadd

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 group
  • delgroup   commande plus conviviale (script perl) qui appelle groupedel

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 utilisateur
    • gpasswd   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 options
    • groupmod   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 et vigr   édite /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow avec vi, 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 connexions
    • lastb   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