Tutoriel Linux

Chage sous Linux : vérifier l’expiration d’un compte avant son blocage

Débutant6 min de lecture

Un utilisateur vous appelle parce que son accès Linux ne fonctionne plus, alors que son mot de passe était encore accepté la veille. Avant de réinitialiser le secret ou de déverrouiller le compte, vérifiez sa politique d’expiration avec chage. La commande distingue la durée de validité du mot de passe, la période d’avertissement, l’inactivité après expiration et la date de fin du compte.

Je commence toujours par lire l’état existant. Une mauvaise valeur sur un compte d’administration ou de service peut couper une intervention, un script ou une application au prochain contrôle PAM. Testez les changements sur un compte non critique et gardez une seconde session administrateur ouverte.

Tux vérifie l’expiration d’un compte utilisateur Linux avec une loupe et un sablier
Chage distingue l’âge du mot de passe, l’inactivité et la date d’expiration du compte.

Lire la politique d’expiration avant de la modifier

Confirmez d’abord que vous travaillez sur le bon utilisateur :

id alice
getent passwd alice
grep '^alice:' /etc/passwd

Si getent trouve le compte mais que /etc/passwd ne contient aucune ligne correspondante, l’utilisateur peut venir de LDAP, SSSD, NIS ou Active Directory. Dans ce cas, ne modifiez pas sa politique locale avec chage : intervenez dans l’annuaire qui gère réellement le compte.

Pour un compte local, affichez les dates et les délais :

sudo chage -l alice
sudo passwd -S alice
date -Is

chage -l donne la dernière modification du mot de passe, son expiration, le délai d’inactivité et la date d’expiration du compte. L’utilisateur connecté peut consulter ses propres informations avec chage -l "$USER", mais les modifications demandent les droits root.

passwd -S complète la lecture avec l’état du mot de passe. Selon la distribution, P indique généralement un mot de passe utilisable, L un mot de passe verrouillé et NP l’absence de mot de passe. Le guide sur passwd sous Linux détaille la rotation et le verrouillage du mot de passe.

Distinguer mot de passe expiré et compte expiré

Les champs lus par chage ne produisent pas tous le même effet :

  • Maximum number of days fixe la durée maximale du mot de passe. Une fois ce délai atteint, l’utilisateur doit le changer ;
  • Number of days of warning détermine combien de jours avant l’expiration l’avertissement commence ;
  • Password inactive définit le délai laissé après l’expiration du mot de passe. Une fois ce délai dépassé, la connexion est bloquée jusqu’à l’intervention d’un administrateur ;
  • Account expires porte sur le compte lui-même, indépendamment de l’âge du mot de passe.

Cette différence compte pour les accès temporaires. Un prestataire peut avoir un mot de passe encore valide, mais un compte arrivé à sa date de fin. À l’inverse, un compte sans date d’expiration peut exiger un changement de mot de passe au prochain login.

Une expiration ne termine pas automatiquement les sessions déjà ouvertes et n’arrête pas les processus lancés par l’utilisateur. Elle ne remplace donc pas une procédure de départ. Pour supprimer réellement un compte après sauvegarde et inventaire, utilisez la méthode décrite dans le guide userdel sous Linux.

Appliquer une politique mesurée avec chage

Cette commande impose un mot de passe valable au maximum 90 jours, autorise son changement après un jour, avertit 14 jours avant l’échéance et bloque la connexion 7 jours après l’expiration :

sudo chage -m 1 -M 90 -W 14 -I 7 alice
sudo chage -l alice

Ces nombres sont un exemple, pas une politique universelle. Alignez-les sur vos règles internes, votre méthode d’authentification et la capacité réelle des utilisateurs à renouveler leur mot de passe. N’appliquez pas une rotation périodique à un compte technique sans vérifier les services, tâches planifiées et scripts qui utilisent encore son secret.

Pour donner une date de fin précise à un compte temporaire :

sudo chage -E 2026-12-31 alice
sudo chage -l alice

Utilisez le format ISO AAAA-MM-JJ et contrôlez l’horloge du serveur avec date -Is. Une date correcte sur un serveur dont l’heure est fausse peut quand même provoquer un blocage inattendu.

Les valeurs par défaut de /etc/login.defs concernent généralement les comptes créés ensuite. Elles ne corrigent pas automatiquement tous les utilisateurs existants. Faites un inventaire ciblé au lieu de supposer que le fichier représente l’état actuel de chaque compte. L’article pour lister les utilisateurs Linux aide à distinguer comptes humains et comptes système.

Forcer un changement ou retirer une expiration

Après une réinitialisation administrative, vous pouvez imposer un nouveau mot de passe à la prochaine connexion :

sudo chage -d 0 alice
sudo chage -l alice

Ne lancez pas cette commande sur le compte avec lequel vous administrez actuellement un serveur distant sans accès de secours. Testez aussi le parcours réel de connexion : certains outils non interactifs ne savent pas gérer la demande de changement de mot de passe.

Pour retirer des limites, utilisez -1 uniquement sur le champ concerné :

sudo chage -M -1 alice
sudo chage -I -1 alice
sudo chage -E -1 alice
sudo chage -l alice

La première ligne retire l’âge maximal du mot de passe, la deuxième supprime le délai d’inactivité et la troisième enlève la date d’expiration du compte. Évitez de les exécuter ensemble par réflexe : vous supprimeriez trois protections différentes.

Tester avant de fermer la session administrateur

Relisez l’état, puis contrôlez les sessions et processus encore actifs :

sudo chage -l alice
sudo passwd -S alice
who
w
pgrep -a -u alice

Sur un compte de test, ouvrez une nouvelle connexion avec le même mécanisme que celui utilisé en production : SSH, console, PAM applicatif ou session locale. Ne vous contentez pas d’un sudo su - alice, car root peut contourner une partie du parcours d’authentification que vous cherchez à valider.

Si la connexion échoue, consultez les journaux avant de modifier d’autres valeurs :

sudo journalctl -u ssh -n 100 --no-pager
sudo tail -n 100 /var/log/auth.log

Le nom du service et le fichier de log varient selon la distribution. Cherchez un message d’expiration, d’échec PAM ou de compte verrouillé, puis comparez-le à la sortie de chage -l. La page de manuel de chage documente chaque option, tandis que shadow(5) explique les champs utilisés. Lisez-les avec les commandes prévues, sans éditer /etc/shadow à la main.