Définir le nombre de tours de hachage des mots de passe - password-auth
Définit une valeur rounds= explicite sur pam_unix.so dans la pile password, afin que les condensats de mots de passe utilisent un grand nombre d'itérations.
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
L'argument rounds= de pam_unix.so définit le nombre d'itérations de la fonction de hachage du mot de passe (yescrypt/SHA-512). Un nombre de tours plus élevé augmente le coût CPU de chaque essai : les attaques par force brute et par dictionnaire hors ligne contre un /etc/shadow volé deviennent nettement plus lentes et plus coûteuses pour un attaquant.
Ce que vérifie Pavois
Pavois recherche dans l'arborescence PAM effective sous /etc/pam.d/ une ligne pam_unix.so non commentée portant rounds= suivi d'un chiffre. Lire la pile résolue (y compris common-password/password-auth/system-auth inclus via @include) confirme que l'option est sur la ligne qui hache réellement les mots de passe, ce qu'un contrôle mono-fichier pourrait rater.
describe command('grep -RqE \'^[^#]*\bpam_unix\\.so\b[^#]*\brounds=[0-9]\' /etc/pam.d/ 2>/dev/null && echo ok || echo ko') do
its('stdout.strip') { should eq 'ok' }
endComment vérifier qu’elle est appliquée
Exécutez :
grep -rE '^[^#]*\bpam_unix\.so\b[^#]*\brounds=[0-9]' /etc/pam.d/
Attendu : une ligne password montre pam_unix.so avec par exemple rounds=65536 (ou la valeur imposée par votre politique). Aucune correspondance signifie qu'aucun nombre de tours explicite n'est défini.
Inspecter et investiguer
Les changements de mot de passe sont journalisés dans /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (RHEL/Fedora) ; suivez journalctl -t passwd -f. L'effet est visible dans /etc/shadow : un condensat yescrypt commence par $y$ et SHA-512 par $6$rounds=...$, confirmant le coût configuré.
Remédiation
Aucun plan de durcissement automatisé n'est fourni pour cette règle : elle doit être appliquée manuellement. Ajoutez rounds=<N> (par ex. rounds=65536) à la ligne pam_unix.so de la pile password (/etc/pam.d/common-password, ou password-auth/system-auth sous RHEL/Fedora). Les condensats existants ne sont rehachés qu'au prochain changement de mot de passe.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| command | sed -ri "s/(pam_unix\.so[^#]*yescrypt)( rounds=[0-9]+)?/\1 rounds=65536/" /etc/pam.d/common-password |
|---|---|
| name | pam-unix-rounds |
| not_if | grep -qE "pam_unix\.so.*rounds=" /etc/pam.d/common-password |
| resource | exec |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Définir rounds= est sans danger mais ne protège que les mots de passe changés après l'édition ; les condensats existants conservent leur ancien coût jusqu'au prochain changement. Une valeur exagérée ajoute une latence sensible à chaque connexion et changement de mot de passe. Précautions : choisissez une valeur raisonnable (65536 est une cible courante), gardez un shell root ouvert pendant l'édition de PAM via pam-auth-update/authselect, et vérifiez que les connexions fonctionnent toujours depuis une seconde session.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R68 | direct | 2.0 | haute |
| DISA STIG | UBTU-22-611055, UBTU-24-400220 | direct | per OS STIG release | haute |
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.