Modèle de compte de base (1 minute de théorie)
- Utilisateur : /etc/passwd (UID, GID, shell, $HOME).
- Hachages de mots de passe : /etc/shadow (root uniquement).
- Groupes : /etc/group (GID et membres).
- Répertoires d’accueil – généralement /home/<utilisateur>, modèle pour le contenu initial – /etc/skel.
Créer un utilisateur
1. Assistant Adduser pratique (Debian/Ubuntu)
sudo adduser alice
# The wizard will ask for a password and profile, create /home/alice, and copy files from /etc/skel.
2. « Low-Level » via useradd (universel)
# стандартний home і bash
sudo useradd -m -s /bin/bash alice
sudo passwd alice
Logement individuel + droits :
sudo mkdir -p /srv/users/alice
sudo cp -rT /etc/skel /srv/users/alice
sudo useradd -d /srv/users/alice -s /bin/bash alice
sudo chown -R alice:alice /srv/users/alice
sudo passwd alice
Vérification :
getent passwd alice
sudo -u alice -H bash -lc 'whoami && pwd'
Groupes et rôles
Ajouter à d’autres groupes
sudo usermod -aG sudo,adm alice
id alice
groups alice
Supprimer d’un groupe
sudo gpasswd -d alice adm
Groupe de rôles pour le projet/la prestation de service
sudo groupadd deploy
sudo usermod -aG deploy alice
Sécurisez sudo (via visudo et /etc/sudoers.d)
Modifiez les règles uniquement via visudo – cela valide la syntaxe et vous évite de « bloquer » le panneau d’administration.
# preferably — a separate user file
sudo visudo -f /etc/sudoers.d/alice
sudo complet (comme dans le groupe sudo) :
alice ALL=(ALL:ALL) ALL
Autorisations minimales (exemple pour nginx) :
Cmnd_Alias NGINX_CMDS = /bin/systemctl restart nginx, /bin/systemctl status nginx, /bin/journalctl -u nginx
alice ALL=(root) NOPASSWD: NGINX_CMDS
Conseils
- Attribuez des autorisations via un groupe chaque fois que cela est possible :
- %webadmins ALL=(root) NOPASSWD: NGINX_CMDS → Ajouter des utilisateurs à webadmins.
- NOPASSWD – uniquement lorsque l’automatisation est nécessaire.
Politique en matière de mots de passe (vieillissement des mots de passe) et complexité
Conditions individuelles via chage
# current status
sudo chage -l alice
# maximum 90 days, warn 7 days in advance, do not change more often than once a day
sudo chage -M 90 -W 7 -m 1 alice
# deactivate by date
sudo chage -E 2025-12-31 alice
Paramètres par défaut pour les nouveaux utilisateurs (login.defs)
/etc/login.defs:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_WARN_AGE 7
Complexité des mots de passe (PAM, Ubuntu/Debian)
Installez libpam-pwquality et configurez /etc/pam.d/common-password, par exemple :
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
Clés SSH et restrictions SSH
Ajouter une clé publique à un utilisateur
sudo -u alice -H bash -lc “mkdir -p ~/.ssh && chmod 700 ~/.ssh”
sudo -u alice -H bash -lc “cat >> ~/.ssh/authorized_keys” # paste the contents of *.pub, then Ctrl+D
sudo -u alice -H bash -lc “chmod 600 ~/.ssh/authorized_keys”
Restriction de l’accès dans sshd_config
# when keys are configured — disable passwords
PasswordAuthentication no
PubkeyAuthentication yes
# prohibit direct root login (after issuing sudo to administrators)
PermitRootLogin no
# restrict access by group
AllowGroups sshusers
sudo groupadd sshusers
sudo usermod -aG sshusers alice
sudo systemctl restart sshd
Utilisateur « technique » sans shell
sudo useradd -m -s /usr/sbin/nologin backupbot
Collaboration dans un répertoire (groupe + ACL)
setgid dans le répertoire du projet (héritage du groupe)
sudo mkdir -p /srv/project
sudo chgrp project /srv/project
sudo chmod 2775 /srv/project
ACL par point (lorsque des droits supplémentaires sont nécessaires)
sudo setfacl -m u:bob:rwx /srv/project
sudo getfacl /srv/project
Vérification et correction des erreurs de saisie
# successful logins
last -n 10
# who is in the system
w
who
# failed attempts (if faillog is active)
faillog -a
# SSH logs for today
sudo journalctl -u ssh --since “today”
sudo journalctl -u ssh --grep “Failed password”
Verrouillage et suppression de comptes
# lock password (key login can remain)
sudo usermod -L alice
# unlock
sudo usermod -U alice
# immediate deactivation (expired)
sudo chage -E 0 alice
# terminate processes and delete account from home
sudo pkill -KILL -u alice
sudo userdel -r alice
# (Debian/Ubuntu is convenient:)
sudo deluser --remove-home alice
Liste de contrôle pour la mise en production
- Utilisateur créé, $HOME et shell corrects, clé SSH ajoutée.
- Groupes basés sur les rôles attribués (sudo/adm/www-data/docker/…).
- sudo émis via /etc/sudoers.d avec des autorisations minimales.
- Politique de mot de passe : chage/login.defs/PAM configuré.
- Les mots de passe et la connexion root sont désactivés dans SSH ; la restriction AllowGroups sshusers est activée.
- Setgid et, si nécessaire, setfacl sont configurés pour les projets.
- Les connexions sont vérifiées ; il existe une procédure de désinscription (verrouiller → supprimer → sauvegarder → supprimer).