← Toutes les règles
SOCLE-CLD-IAM-038// Accounts (PAM modules)moyenneconfig persistante

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 PASS prouve? actif maintenant✓ sur disque✓ survit au rebootle verdict qualifié →
Debian 12CIS 1.1.0Debian 13CIS 1.0.0FedoraRHEL 10 / Rocky 10 / AlmaLinux 10RHEL 8 / Rocky 8 / AlmaLinux 8CIS 4.0.0RHEL 9 / Rocky 9 / AlmaLinux 9CIS 2.0.0Ubuntu 22.04CIS 3.0.0Ubuntu 24.04CIS 1.0.0Ubuntu 26.04
Un seul check, mappé sur 2 normes

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' }
end

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

commandsed -ri "s/(pam_unix\.so[^#]*yescrypt)( rounds=[0-9]+)?/\1 rounds=65536/" /etc/pam.d/common-password
namepam-unix-rounds
not_ifgrep -qE "pam_unix\.so.*rounds=" /etc/pam.d/common-password
resourceexec
pavois harden plan local

où 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

NormeRéférenceTypeVersionConfiance
ANSSI BP-028R68direct2.0haute
DISA STIGUBTU-22-611055, UBTU-24-400220directper OS STIG releasehaute

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.

Sources & références