← Toutes les règles
SOCLE-CLD-IAM-022// Accounts (login.defs)moyenneconfig persistante

Définir le nombre minimal de tours SHA_CRYPT dans login.defs

Porte SHA_CRYPT_MIN_ROUNDS dans /etc/login.defs à au moins 10000 (Pavois écrit 65536), afin que les empreintes de mot de passe SHA-256/SHA-512 soient calculées avec bien plus d'itérations que le défaut glibc de 5000. Chaque tour supplémentaire multiplie le coût d'une attaque par force brute hors ligne sur un /etc/shadow volé.

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 24.04CIS 1.0.0Ubuntu 26.04

Ce que vérifie Pavois

Pavois s'appuie sur la ressource InSpec login_defs et exige SHA_CRYPT_MIN_ROUNDS >= 10000. La ressource interprète les directives comme le fait la suite shadow (la dernière affectation non commentée l'emporte) : une valeur laissée en commentaire est donc considérée comme absente et échoue. La preuve effective du réglage ne se trouve pas dans le fichier mais dans l'empreinte produite : un mot de passe défini après la modification est stocké dans /etc/shadow sous la forme $6$rounds=65536$..., alors que le défaut produit une empreinte $6$ sans préfixe rounds=.

describe login_defs do
  its('SHA_CRYPT_MIN_ROUNDS') { should cmp >= 10000 }
end

Comment vérifier qu’elle est appliquée

Contrôlez la directive, puis l'empreinte qu'elle produit réellement :

grep -i '^SHA_CRYPT_MIN_ROUNDS' /etc/login.defs
SHA_CRYPT_MIN_ROUNDS 65536

Changez le mot de passe d'un utilisateur de test, puis vérifiez que l'empreinte stockée porte bien le nombre de tours :

sudo getent shadow testuser | cut -d: -f2 | cut -c1-16
$6$rounds=65536$

Inspecter et investiguer

Le réglage lui-même n'est pas journalisé, pas plus que le nombre de tours utilisé pour une empreinte donnée. Un changement de mot de passe est enregistré par PAM dans /var/log/auth.log (Debian/Ubuntu) ou via journalctl (famille RHEL), sans aucun détail de hachage :

passwd[3210]: pam_unix(passwd:chauthtok): password changed for alice

La seule preuve fiable du facteur de coût appliqué reste le préfixe $6$rounds= dans l'entrée shadow.

Remédiation

Le plan de durcissement Pavois applique une remédiation conf_line sur /etc/login.defs avec la clé SHA_CRYPT_MIN_ROUNDS, la valeur 65536 et un séparateur espace (sep: space), car login.defs utilise la syntaxe CLÉ VALEUR et non clé = valeur. L'étape générée réécrit la ligne existante sur place avec sed et l'ajoute si elle est absente ; une garde not_if sur la ligne déjà correcte rend l'application idempotente.

Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :

file/etc/login.defs
keySHA_CRYPT_MIN_ROUNDS
resourceconf_line
sepspace
value65536
pavois harden plan local

où la cible est local, un alias SSH user@hôte, ou un conteneur , Docs

Impact & précautions

Avec le défaut glibc de 5000 tours, un /etc/shadow divulgué est cassé un ordre de grandeur plus vite. Deux réserves avant d'appliquer. D'abord, SHA_CRYPT_MIN_ROUNDS ne s'applique que si ENCRYPT_METHOD vaut SHA512 ou SHA256 : sur Debian 12+ et Ubuntu 24.04, dont le défaut est YESCRYPT, la directive reste inerte tant que la méthode n'est pas repassée en SHA-512, et le contrôle relève alors de la défense en profondeur. Ensuite, elle ne concerne que les mots de passe hachés après la modification ; les empreintes existantes conservent leur coût d'origine jusqu'au prochain renouvellement de chaque utilisateur. Un nombre de tours très élevé allonge par ailleurs chaque authentification (quelques dizaines de millisecondes à 65536), ce qui est négligeable pour des connexions interactives mais mesurable sur un hôte réalisant des milliers d'authentifications PAM par seconde. Il n'y a aucun risque de verrouillage : les mots de passe existants restent valides.

Sources & références

Pages de manuel