Comment puis-je créer des comptes d'utilisateurs expirant automatiquement?

20

Voici ce que j'aimerais pouvoir faire:

Une fois le compte d'un utilisateur créé, il doit pouvoir effectuer un sshtunnel, mais son compte est automatiquement supprimé après 30 jours, sauf si le compte à rebours est réinitialisé par l'utilisateur root.

Comment puis-je automatiser cela? Je vais devoir gérer une quinzaine d'utilisateurs.

Yusufmm
la source

Réponses:

29

useradd

Vous pouvez contrôler la durée de validité du compte d'un utilisateur en utilisant l' --expiredateoption to useradd.

extrait de la useraddpage de manuel

-e, --expiredate EXPIRE_DATE
     The date on which the user account will be disabled. The date is
     specified in the format YYYY-MM-DD.

     If not specified, useradd will use the default expiry date specified
     by the EXPIRE variable in /etc/default/useradd, or an empty string 
     (no expiry) by default.

Ainsi, lors de la configuration du compte de l'utilisateur, vous pouvez spécifier une date +30 jours dans le futur à partir de maintenant, et l'ajouter à votre useraddcommande lors de la configuration de leurs comptes.

$ useradd -e 2013-07-30 someuser

chage

Vous pouvez également modifier la date d'un compte existant à l'aide de la chagecommande. Pour modifier la date d'expiration d'un compte, procédez comme suit:

$ chage -E 2013-08-30 someuser

calcul de la date dans +30 jours

Pour ce faire, il est en fait assez trivial d'utiliser la datecommande. Par exemple:

$ date -d "30 days"
Sun Jul 28 01:03:05 EDT 2013

Vous pouvez formater en utilisant les +FORMAToptions de la datecommande, ce qui finit par vous donner les éléments suivants:

$ date -d "30 days" +"%Y-%m-%d"
2013-05-28

Mettre tous ensemble

Donc, connaissant les pièces ci-dessus, voici une façon de les assembler. Tout d'abord, lorsque vous créez un compte, vous exécutez cette commande:

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

Ensuite, lorsque vous souhaitez ajuster leurs dates d'expiration, vous exécutez régulièrement cette commande:

$ chage -E `date -d "30 days" +"%Y-%m-%d"` someuser

Spécification de périodes inférieures à 24h

Si vous souhaitez qu'un utilisateur ne soit actif que pendant quelques minutes, vous ne pouvez pas utiliser les options ci-dessus car elles nécessitent de spécifier une date. Dans ce cas, vous pouvez soit configurer un crontabpour supprimer / verrouiller l'utilisateur créé après l'heure spécifiée (par exemple, 10 minutes), soit effectuer l'une des actions suivantes:

adduser someuser && sleep 600 && usermod --lock someuser

ou

$ adduser someuser
$ echo usermod --lock someuser | at now + 10 minutes

Les références

slm
la source
3
J'ai pris la liberté de changer le% M (minutes) en% m (mois)
Anthon
5

Si vous êtes sur Debian / Ubuntu, vous devez utiliser adduseret usermod. Sur les systèmes basés sur Debian useraddest considéré comme de bas niveau et (selon les pages de manuel):administrators should usually use adduser(8) instead

adduser n'a pas d'option d'expiration, il vous suffit donc de l'utiliser pour créer le compte.

usermoda l' option -e/ --expiredatepour définir la date d'expiration.

Vous calculez le paramètre à dateavec: date -d "30 days" "+%Y-%m-%d"pour obtenir:

usermod --expiredate $(date -d "30 days" "+%Y-%m-%d") username
Anthon
la source
1

Une autre façon (si votre système d'exploitation ne prend pas en charge l'expiration du compte ou si cette fonctionnalité ne fonctionne pas pour une raison quelconque): configurez une tâche cron pour qu'elle s'exécute dans 30 jours et verrouille ce compte.

Habituellement, le compte est verrouillé en définissant son mot de passe crypté sur une valeur non valide; sur FreeBSD, la pw lock Xcommande verrouille le compte X.

sendmoreinfo
la source
1
Expliquez comment vous pouvez verrouiller un compte.
slm
Cela dépend vraiment du système d'exploitation.
sendmoreinfo
4
Il serait toujours utile de donner un exemple le montrant.
slm