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 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' }
endComment 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 :
| command | useradd -D -f 30 |
|---|---|
| name | set-default-inactive |
| not_if | awk -F= '/^INACTIVE=/{v=$2} END{exit !(v ~ /^[0-9]+$/ && v>=0 && v<=30)}' /etc/default/useradd |
| resource | exec |
pavois harden plan localoù 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
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| CIS | 5.4.1.5 | direct | per OS, see the benchmark table | haute |
| NIST | IA-4(e), AC-2(3), CM-6(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| PCI DSS | 8.2.6 | support | 4.0.1 | moyenne |
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.