← Toutes les règles
SOCLE-CLD-IAM-002// Accountscritiqueétat d’inventaire

Vérifier que tous les hachages de mots de passe sont dans shadow

Garantit qu'aucun vrai hachage de mot de passe n'est stocké dans /etc/passwd (lisible par tous) ; tous les hachages doivent être dans /etc/shadow.

Vérifié sur ce qui est installé ou enregistré, paquets présents/absents, bases de comptes.

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 3 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

Les hachages de mots de passe doivent résider dans /etc/shadow, lisible uniquement par root, et jamais dans /etc/passwd qui est lisible par tous. Le deuxième champ de chaque entrée de /etc/passwd doit donc être un marqueur (x, * ou !). Un vrai hachage stocké à cet endroit expose les identifiants de chaque utilisateur à un cassage hors ligne par force brute ou dictionnaire depuis n'importe quel compte local.

Ce que vérifie Pavois

Pavois utilise awk pour lister toute entrée de /etc/passwd dont le champ mot de passe n'est pas un marqueur (x, *, !). Le contrôle réussit uniquement si la liste est vide. Inspecter directement la base de comptes résolue est le seul moyen fiable de confirmer que les identifiants ont bien été migrés vers /etc/shadow et non laissés exposés.

describe command('awk -F: \'($2!="x" && $2!="*" && $2!="!"){print $1}\' /etc/passwd') do
  its('stdout.strip') { should eq '' }
end

Comment vérifier qu’elle est appliquée

Exécutez awk -F: '($2!="x" && $2!="*" && $2!="!"){print $1}' /etc/passwd. Sortie attendue : rien. Tout nom affiché possède un champ mot de passe non transféré dans shadow, à migrer avec pwconv.

Inspecter et investiguer

  • Vérifier une migration propre : pwck -r puis recontrôler /etc/passwd.
  • Comparer les entrées : getent passwd <nom> vs getent shadow <nom>.
  • Événements d'authentification : /var/log/auth.log (Debian/Ubuntu) ou /var/log/secure (famille RHEL).

Remédiation

Aucune remédiation automatique n'est fournie. Corrigez manuellement en exécutant pwconv, qui déplace tout hachage présent dans /etc/passwd vers /etc/shadow et le remplace par le marqueur x, puis relancez le scan pour confirmer.

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

commandgrep -E '^[^:]+:[^:!*x]' /etc/passwd # accounts with a hash still in /etc/passwd pwconv # migrate them to /etc/shadow
reasonmoving passwords to /etc/shadow with pwconv is safe but verify no app reads /etc/passwd hashes
resourcemanual
pavois harden plan local

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

Impact & précautions

Un hachage laissé dans /etc/passwd (lisible par tous) permet à n'importe quel utilisateur local de le copier et de le casser hors ligne, menant au vol d'identifiants et à l'élévation de privilèges. Le correctif (pwconv) est peu risqué et standard, mais sauvegardez d'abord /etc/passwd et /etc/shadow et vérifiez ensuite que les connexions fonctionnent toujours.

Mapping des normes

NormeRéférenceTypeVersionConfiance
CIS7.2.1, 8.3.2directper OS, see the benchmark tablehaute
NIST3.5.10, CM-6(a), IA-5(h)support800-53 Rev 5 · 800-171 Rev 2 (pinned)moyenne
PCI DSS8.3.2support4.0.1moyenne

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