¿Cómo puedo crear cuentas de usuario que caduquen automáticamente?

20

Esto es lo que me gustaría poder hacer:

Una vez que se crea la cuenta de un usuario, deben poder hacer un sshtúnel, pero su cuenta se elimina automáticamente después de 30 días a menos que el usuario root restablezca la cuenta regresiva.

¿Cómo puedo automatizar esto? Tendré que manejar alrededor de 15 usuarios.

Yusufmm
fuente

Respuestas:

29

useradd

Puede controlar cuánto tiempo es válida la cuenta de un usuario mediante el uso de la --expiredateopción useradd.

extracto de la useraddpágina man

-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.

Entonces, al configurar la cuenta del usuario, puede especificar una fecha +30 días en el futuro a partir de ahora, y agregarla a su useraddcomando al configurar sus cuentas.

$ useradd -e 2013-07-30 someuser

chage

También puede cambiar la fecha de una cuenta existente con el chagecomando. Para cambiar la fecha de vencimiento de una cuenta, debe hacer lo siguiente:

$ chage -E 2013-08-30 someuser

calcular la fecha +30 días a partir de ahora

Hacer esto es bastante trivial usando el datecomando. Por ejemplo:

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

Puede formatear usando las +FORMATopciones del datecomando, que termina dándole lo siguiente:

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

Poniendolo todo junto

Entonces, conociendo las piezas anteriores, aquí hay una manera de armarlo. Primero, al crear una cuenta, ejecutarías este comando:

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

Luego, cuando desee ajustar sus fechas de vencimiento, ejecute periódicamente este comando:

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

Especificando períodos de tiempo de menos de 24h

Si desea que un usuario solo esté activo durante algunos minutos, no puede usar las opciones anteriores, ya que requieren especificar una fecha. En ese caso, puede configurar a crontabpara eliminar / bloquear el usuario creado después del tiempo especificado (por ejemplo, 10 minutos), o puede hacer una de:

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

o

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

Referencias

slm
fuente
3
Me tomé la libertad de cambiar el% M (minutos) a% m (mes)
Anthon
5

Si está en Debian / Ubuntu, debe usar addusery usermod. En los sistemas basados ​​en Debian useraddse considera de bajo nivel y (según las páginas del manual):administrators should usually use adduser(8) instead

adduser no tiene una opción de vencimiento, por lo que solo debe usarla para crear la cuenta.

usermodtiene la opción -e/ --expiredatepara establecer la fecha de vencimiento.

Calcula el parámetro datecon: date -d "30 days" "+%Y-%m-%d"para obtener:

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

Otra forma (si su sistema operativo no admite el vencimiento de la cuenta o si esta característica no funciona por cualquier razón): configure un trabajo cron para que se ejecute dentro de 30 días y que bloqueará esta cuenta.

Por lo general, la cuenta se bloquea al establecer su contraseña cifrada en un valor no válido; en FreeBSD, el pw lock Xcomando bloqueará la cuenta X.

sendmoreinfo
fuente
1
Explica cómo puedes bloquear una cuenta.
slm
Eso depende del sistema operativo, de verdad.
sendmoreinfo
44
Todavía sería útil si le dieras un ejemplo que lo muestre.
slm