Limiter la réutilisation des mots de passe
Exige une profondeur d'historique des mots de passe d'au moins 2 (remember>=2) afin que les utilisateurs ne puissent pas immédiatement redéfinir un mot de passe sur sa valeur précédente.
Vérifié sur le contenu d’un fichier de configuration persistant, la source de vérité qui survit aux redémarrages.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
Empêcher la réutilisation d'anciens mots de passe garantit qu'un mot de passe compromis n'est pas réinstauré par un utilisateur. Même un historique minimal (2) empêche l'astuce classique consistant à changer un mot de passe puis à le remettre aussitôt pour satisfaire l'expiration tout en conservant l'ancien secret. À noter qu'il s'agit d'un plancher de base ; un historique plus profond (par ex. 24, selon CIS) est plus robuste.
Ce que vérifie Pavois
Pavois lit la valeur effective en parcourant à la fois /etc/pam.d/ et /etc/security/pwhistory.conf pour chaque remember=N, en gardant le N le plus élevé et en exigeant au moins 2. Évaluer la configuration résolue (ligne PAM plus valeur par défaut de pwhistory.conf) reflète ce qui est réellement appliqué, ce qu'une lecture mono-fichier pourrait fausser si une source en remplace une autre.
describe command('v=$(grep -RhoE \'remember[[:space:]]*=[[:space:]]*[0-9]+\' /etc/pam.d/ /etc/security/pwhistory.conf 2>/dev/null | grep -oE \'[0-9]+\' | sort -n | tail -1); { [ -n "$v" ] && [ "$v" -ge 2 ] && echo ok; } || echo ko') do
its('stdout.strip') { should eq 'ok' }
endComment vérifier qu’elle est appliquée
Exécutez grep -rhoE 'remember=[0-9]+' /etc/pam.d/ /etc/security/pwhistory.conf et vérifiez que la valeur effective (la plus élevée) est >= 2. Fonctionnellement, changez un mot de passe puis essayez de le remettre directement à la valeur précédente, cela doit être rejeté.
Inspecter et investiguer
Les rejets pour réutilisation sont consignés dans /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (RHEL). Les condensats conservés sont stockés dans /etc/security/opasswd.
Remédiation
Aucune remédiation automatisée n'est câblée pour cette règle, elle doit donc être appliquée manuellement : ajoutez remember=N (>= 2, idéalement 24) à la ligne pam_unix.so ou pam_pwhistory.so de la pile password, ou définissez remember = N dans /etc/security/pwhistory.conf, puis régénérez PAM (pam-auth-update / authselect).
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| command | # Either enable pam_pwhistory (preferred, see pam-remember-pwhistory-remember) OR add 'remember=5' # to the pam_unix.so line in /etc/pam.d/common-password via pam-auth-update. |
|---|---|
| reason | prefer pam_pwhistory for history; if using pam_unix remember, set it deliberately |
| resource | manual |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Définir une faible profondeur d'historique n'affecte que les changements de mot de passe et ne peut pas verrouiller une session en cours. La principale réserve est de s'assurer que l'option figure sur un module qui stocke réellement l'historique (pam_pwhistory.so, ou pam_unix.so correctement configuré) pour que la valeur soit prise en compte. Précautions : gardez une session root ouverte pendant l'édition de PAM et testez passwd sur un compte jetable avant application.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R31 | direct | 2.0 | haute |
| CIS | 8.3.7 | direct | per OS, see the benchmark table | haute |
| NIST | 3.5.8, IA-5(1)(e), IA-5(f) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| PCI DSS | 8.3.7 | support | 4.0.1 | moyenne |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.