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

Définir l'expiration du compte après une période d'inactivité

Fixe la valeur INACTIVE par défaut dans /etc/default/useradd entre 0 et 30 jours, afin qu'un compte dont le mot de passe a expiré soit automatiquement désactivé après 30 jours d'inactivité au maximum, au lieu de rester ouvert indéfiniment.

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
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 identifiants inactifs représentent un risque pour les systèmes et les applications : un attaquant peut exploiter un identifiant dormant et obtenir un accès durable sans être détecté. Désactiver les comptes inactifs garantit que les comptes qui n'ont pas été supprimés dans les règles ne restent pas à la disposition d'un attaquant ayant compromis leurs identifiants. Le titulaire d'un compte inactif, par définition, ne remarquera pas qu'un accès non autorisé a été obtenu.

Ce que vérifie Pavois

Pavois exécute awk -F= '/^INACTIVE=/{v=$2} ...' /etc/default/useradd et retient la dernière affectation INACTIVE= du fichier, exactement comme le ferait useradd : la valeur doit être un entier positif compris entre 0 et 30. Une valeur commentée, dupliquée ou fixée à -1 (jamais de désactivation) échoue donc. Ce défaut est ce que useradd inscrit dans le champ inactive de /etc/shadow pour chaque compte créé : il gouverne les comptes futurs, pas ceux déjà présents.

describe command('awk -F= \'/^INACTIVE=/{v=$2} END{print (v ~ /^[0-9]+$/ && v>=0 && v<=30)?"ok":"ko"}\' /etc/default/useradd') do
  its('stdout.strip') { should eq 'ok' }
end

Comment vérifier qu’elle est appliquée

Exécutez useradd -D | grep INACTIVE (qui affiche le défaut résolu, et non le fichier brut) et attendez :

INACTIVE=30

Pour un compte existant, contrôlez la valeur réellement inscrite dans la base shadow avec chage -l <utilisateur> et regardez les lignes Password inactive et Account expires.

Inspecter et investiguer

Poser ce défaut ne produit aucun log : c'est une valeur statique de /etc/default/useradd. Son effet n'apparaît qu'au moment où un compte dormant est refusé à la connexion, dans /var/log/auth.log (Debian/Ubuntu) ou via journalctl -u sshd (famille RHEL) :

sshd[1234]: pam_unix(sshd:account): account alice has expired (inactive password)

Si la surveillance de fichier sur /etc/default/useradd est active, toute modification lève aussi un évènement auditd : grep 'key="usergroup_modification"' /var/log/audit/audit.log.

Remédiation

Le plan de durcissement Pavois exécute la commande useradd -D -f 30, qui réécrit la ligne INACTIVE= de /etc/default/useradd via l'outillage shadow lui-même (aucune édition manuelle du fichier). Elle est protégée par un not_if rejouant le même test awk : la commande ne se déclenche que si la valeur est hors plage, et l'application reste idempotente. Elle fixe le défaut pour les nouveaux comptes ; les utilisateurs existants conservent leur réglage tant que vous ne leur appliquez pas chage --inactive 30 <utilisateur>.

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

commanduseradd -D -f 30
nameset-default-inactive
not_ifawk -F= '/^INACTIVE=/{v=$2} END{exit !(v ~ /^[0-9]+$/ && v>=0 && v<=30)}' /etc/default/useradd
resourceexec
pavois harden plan local

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

Impact & précautions

Laisser INACTIVE=-1 signifie qu'un compte dont le mot de passe a expiré reste utilisable indéfiniment : c'est exactement le point d'appui dormant que recherchent les attaquants. À l'inverse, c'est la propagation d'une fenêtre courte aux comptes existants qui est dangereuse : un compte de service ou d'administration inutilisé depuis plus de 30 jours après l'expiration de son mot de passe sera verrouillé immédiatement. Avant d'appliquer, listez les comptes concernés (chage -l sur chacun) et assurez-vous que votre accès de secours ne dépend pas d'un compte rarement utilisé ; le plan de durcissement, lui, ne modifie que le défaut et ne peut pas vous enfermer dehors.

Mapping des normes

NormeRéférenceTypeVersionConfiance
CIS5.4.1.5directper OS, see the benchmark tablehaute
NISTIA-4(e), AC-2(3), CM-6(a)support800-53 Rev 5 · 800-171 Rev 2 (pinned)moyenne
PCI DSS8.2.6support4.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