Gérer une expiration automatique des comptes sous Linux

I. Introduction

Dans cet article, nous allons voir comment mettre en place une expiration automatique des comptes locaux sur les systèmes Linux.

Cette fonctionnalité, très souvent utilisée dans les systèmes Active Directory est plus méconnue et moins utilisée sur les OS Linux. Pourtant, son utilité est toute aussi aussi importante. Par exemple pour les comptes temporaires (intervenants externes, stagiaires, etc.). Il est en effet courant de trouver des comptes historiques, non utilisés depuis longtemps, sur des infrastructures vieillissantes.

Pour mettre en place une expirations des comptes, nous n'utiliserons que les commandes natives du système. Et oui, celles-ci prévoient déjà la possibilité d'une expiration du compte. Techniquement, après avoir expiré, un compte sera toujours existant sur le système (dans le fichier /etc/passwd), mais il ne sera plus utilisable.

Il est à noter que la procédure permettant de mettre en place un expiration d'un compte à une date donnée n'est pas la même pour un compte à créer que pour un compte existant.

II. Mettre en place l'expiration lors de la création d'un compte

Pour mettre en place l'expiration d'un compte lors de sa création (à l'aide de la commande "useradd"), nous utiliserons l'option "-e" de cette même commande :

-e, --expiredate DATE_EXPIR   fixer la date de fin de validité du
                                compte à DATE_EXPIR

Rien de plus simple donc, voici un exemple de commande qui va créer l'utilisateur "test01" qui va expirer à la date du 30 novembre 2016 :

useradd -e 2016-11-30 test01

Il est également possible de variabiliser cela à l'aide de la commande "date". Par exemple, si nous voulons une expiration dans 30 jours :

useradd -e `date -d "30 days" +"%Y-%m-%d"` test01

Avec la commande "date", native sous Linux, nous pouvons générer une date au format attendu par la commande "useradd".

Une fois qu'un compte aura passé sa date d'expiration, il sera techniquement toujours disponible, mais l'authentification et l'utilisation de ce compte sera impossible. Si une tentative d'authentification est faite, le message d'erreur suivant apparaîtra dans le fichier de log /var/log/auth.log :

Sep  2 21:37:22 debian login[936]: pam_unix(login:account): account test01 has expired (account expired)
Sep  2 21:37:22 debian login[936]: Authentication failure
Sep  2 21:37:27 debian login[943]: pam_unix(login:account): account test01 has expired (account expired)
Sep  2 21:37:27 debian login[943]: Authentication failure

Le message est ici clair, le compte "test01" a tenté de s’authentifier sans succés car son compte est expiré. La mise en log de cette information est intéressante car elle peut alors facilement faire partie d'un système de monitoring des logs.

III. Mettre en place l'expiration pour un compte existant

Comme je vous l'ai dit précédemment, la procédure à suivre pour un compte existant est différente que celle pour un compte pas encore créé. Nous allons maintenant voir comment ajouter une date d'expiration pour un compte déjà créé. Notez que cela fonctionnera également si vous souhaitez modifier la date d'expiration d'un compte qui en possède déjà une(pour repousser/raccourcir cette date d'expiration).

Bien, pour cela, nous allons utiliser la commande "chage" qui permet, selon sa manpage, de modifier les informations de validité d'un mot de passe. Plus précisément, nous utiliserons l'option "-E" :

-E, --expiredate DATE_FIN_VALIDITÉ
 Configurer la date, ou le nombre de jours à compter du 1er janvier 1970, à partir de laquelle le compte de l'utilisateur ne sera plus accessible. La date peut aussi être exprimée dans le format AAAA-MM-JJ (ou le format plus communément utilisé dans votre région). Un utilisateur dont le compte est bloqué doit contacter l'administrateur système pour pouvoir utiliser à nouveau
 le système.

Comme indiqué dans la manpage de la commande "chage", nous utilisons donc l'option "-E" exactement de la même manière qu'avec la commande "useradd", par exemple :

chage -E 2016-11-30 test01

De la même manière qu'avec useradd, la commande "date" peut être utilisée pour variabiliser la date.

III. Afficher l'état et la date d'expiration d'un compte

Bien, maintenant que nous avons ajouté une date d'expiration à nos comptes, nous souhaiterons sûrement dans quelques jours savoir quelle était cette date. En utilisant à nouveau la commande "chage", nous pourrons récupérer plusieurs informations à propos d'un compte, et notamment son état et sa date d'expiration.

root@debian:~# chage -l test01  
Dernier changement de mot de passe : sept. 02, 2016 Nombre minimum de jours entre les changements de mot de passe        : 0
Fin de validité du mot de passe    : jamais         Nombre maximum de jours entre les changements de mot de passe        : 99999
Mot de passe désactivé             : jamais         Nombre de jours d'avertissement avant la fin de validité du mot de passe    : 7
Fin de validité du compte          : déc. 12, 2015

Ici, nous voyons donc que la date de validité du compte était le 12 décembre 2015, il suffit donc de savoir la date du jour pour savoir si le compte est expiré ou non 🙂

IV. Réactiver un compte expiré

Afin réactiver un compte expiré, deux options s'offrent à nous :

Nous pouvons réactiver un compte en souhaitant lui affecter une date d'expiration prochaine, auquel cas il faut utiliser la même commande que dans le point II., c'est à dire la commande "chage" :

chage -E 2016-11-30 test01

Deuxième choix qui s'offre à nous, réactiver un compte définitivement, sans avoir à lui réaffecter une date d'expiration ultérieure, il faut pour cela utiliser la commande "chage" en mettant la valeur "-1" à l'option "-E" :

chage -E -1 test01

Ainsi, l'utilisateur redeviendra actif indéfiniment.

Ce tutoriel nous a permis de voir qu'il est possible de gérer la date de désactivation d'un compte avec les commandes natives au systèmes Linux. Cette aspect de la sécurité est souvent géré sous Windows car son intégration au système est visible dans la gestion de l'AD. Sous Linux, il est nécessaire d'être curieux afin de "détecter" cette option d'expiration.

N'hésitez pas à donner vos avis et à poser vos question dans les commentaires ou sur notre forum.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d’IT-Connect.fr et d’Information-security.fr.
Auditeur sécurité chez Amossys.

    mickael a publié 478 articles sur IT-Connect.See all posts by mickael

    Une réaction sur “Gérer une expiration automatique des comptes sous Linux

    • 23/10/2016 à 20:12
      Permalink

      ce tutoriel est plus que formidable, mes félicitations!

      Répondre

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *