Comptes à moindre privilège et sudo sous Linux
Imposez mots de passe robustes, verrouillage de compte, expiration, drop-ins sudo restreints et umask sécurisé pour appliquer le moindre privilège sous Linux.
La plupart des compromissions Linux s'appuient sur des comptes faibles ou sur-privilégiés : mots de passe d'administration partagés, comptes système dormants dotés d'un shell de connexion, ou règles sudo NOPASSWD: ALL. Appliquer le moindre privilège, c'est donner à chaque compte exactement l'accès dont il a besoin, ni plus ni moins. Ce guide traite de la qualité des mots de passe, du verrouillage, de l'expiration, de l'audit des comptes, du sudo restreint et d'un umask sûr. Il complète le durcissement de l'accès et de l'authentification.
Imposer des mots de passe robustes avec pam_pwquality
La complexité des mots de passe est appliquée par pam_pwquality. Configurez-la dans /etc/security/pwquality.conf :
# /etc/security/pwquality.conf
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
retry = 3
minlen fixe la longueur minimale. Les valeurs *credit, lorsqu'elles sont négatives, exigent au moins ce nombre de chiffres (dcredit), de majuscules (ucredit), de minuscules (lcredit) et de caractères spéciaux (ocredit). retry limite le nombre d'essais par appel à passwd. Vérifiez que le module est bien référencé dans la pile PAM (/etc/pam.d/common-password sous Debian/Ubuntu, /etc/pam.d/system-auth sous RHEL/Fedora).
Verrouiller les comptes après des échecs avec pam_faillock
Freinez les attaques par force brute avec pam_faillock. Configurez-le dans /etc/security/faillock.conf :
# /etc/security/faillock.conf
deny = 5
unlock_time = 900
fail_interval = 900
Après cinq échecs dans l'intervalle, le compte est verrouillé pendant 900 secondes. Consultez et réinitialisez les compteurs avec :
faillock --user alice
faillock --user alice --reset
Définir l'expiration des mots de passe
Définissez les valeurs par défaut du système dans /etc/login.defs :
# /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_WARN_AGE 7
Elles s'appliquent aux nouveaux utilisateurs. Appliquez et auditez l'expiration sur les comptes existants avec chage :
chage -M 90 -m 1 -W 7 alice
chage -l alice
Auditer et désactiver les comptes inutilisés
Repérez les comptes à risque. Tout compte d'UID 0 autre que root est une porte dérobée, et un champ de mot de passe vide est critique :
awk -F: '($3==0){print}' /etc/passwd
awk -F: '($2==""){print $1}' /etc/shadow
Verrouillez et désactivez la connexion interactive des comptes de service ou dormants :
usermod -L backupsvc
usermod -s /usr/sbin/nologin backupsvc
Sous RHEL/Fedora, le shell nologin est /sbin/nologin. Le verrouillage place un ! dans /etc/shadow ; le combiner avec un shell nologin bloque à la fois la connexion par mot de passe et par clé.
Appliquer le moindre privilège avec sudo
N'éditez jamais /etc/sudoers directement. Utilisez des fichiers drop-in restreints sous /etc/sudoers.d/ et validez toujours avant d'enregistrer :
visudo -f /etc/sudoers.d/web-deploy
visudo -c
N'accordez que les commandes précises dont un opérateur a besoin, et évitez NOPASSWD et ALL=(ALL) ALL :
# /etc/sudoers.d/web-deploy
deploy ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
Defaults logfile="/var/log/sudo.log"
Limitez le groupe d'administration à un ensemble connu de personnes. Sous Debian/Ubuntu, c'est sudo ; sous RHEL/Fedora, c'est wheel :
getent group sudo
getent group wheel
Méfiez-vous de Defaults requiretty, qui peut casser l'automatisation, et préférez la journalisation de chaque appel. Voir aussi le contrôle d'accès obligatoire pour confiner les processus privilégiés.
Définir un umask sécurisé par défaut
Un umask 027 refuse l'écriture au groupe et tout accès aux autres sur les nouveaux fichiers. Définissez-le dans /etc/login.defs et un drop-in de profil :
# /etc/login.defs
UMASK 027
# /etc/profile.d/secure-umask.sh
umask 027
Vérifier votre configuration
Confirmez chaque contrôle rapidement :
grep -E 'minlen|credit|retry' /etc/security/pwquality.conf
grep -E 'deny|unlock_time' /etc/security/faillock.conf
awk -F: '($3==0){print}' /etc/passwd
sudo -l -U deploy
umask
Si sudo -l n'affiche que les commandes restreintes, qu'aucun compte d'UID 0 hormis root n'apparaît et que vos politiques de mot de passe et de verrouillage sont en place, vos comptes respectent le moindre privilège. Confrontez régulièrement ces réglages à vos référentiels de conformité.