GoRiX blog

A blog about things

Usuarios temporales en bash

June 02, 2025 — n4ch0m4n

Cuantas veces te tocó crear un usuario temporal para que alguien acceda al servidor, probar algo con otro usuario recién creado, vino tu primito a navegar en internet y mirar videitos y le creaste un usuario nuevo…etc… y después te olvidaste de borrarlo? ….o peor, le creaste un acceso a alguien y se quedó con acceso cuando ya no lo necesitaba?

Bueno, acá tenés la solución que te va a hacer la vida más fácil: un script en bash que maneja usuarios temporales.


Que hace el script?

Este script está hecho para esos momentos donde necesitás darle acceso temporal a alguien sin que se te quede colgado para siempre.

Funcionalidades:

  • Crear usuarios que se autodestruyen: Le das vida útil a los usuarios
  • Listar todo lo que tenés: Ves todos los usuarios temporales, cuánto les queda de vida y si ya se fueron a la mierda.
  • Limpieza manual: Por si necesitás rajar a alguien antes de tiempo.
  • Programación automática: Usa at que es la herramienta posta para este laburo (después te explico bien)

Si at y No cron?

Acá viene la explicación técnica porque si uno y no el otro:

at es lo mejor para tareas únicas

  • at nació para ejecutar comandos una sola vez, no como cron que es para cosas repetitivas
  • Cuando se ejecuta, se borra automáticamente. No tenés que andar limpiando basura
  • Le podés decir "borrá este usuario el 15 de junio a las 14:30" y te olvidas
  • No te deja el crontab lleno de porquerías que después ni te acordás que hacen

cron?

cron es orgásmico, lo uso mucho pero….

  • Es para tareas que se repiten (backups, limpieza de logs, etc.)
  • No puede manejar fechas específicas tan fácil

Requerimientos

# Listado de requerimientos

    at

# Fin del listado

Instalación

Primero, asegurate de tener at instalado.

Después, agarrá el script, dale permisos y listo:

$ curl blog.gorix.xyz/tempusers.sh > tempusers
$ chmod +x temp_users

COMO USARLO

Ayudaaaaa

// Veamos como se usa primero
# temp_users help
Uso: ./tempusers.sh [OPCIÓN] [ARGUMENTOS]
OPCIONES:
   create <usuario> <sudo> <borrar_home> <horas>
       Crear usuario temporal
       - usuario: nombre del usuario a crear
       - sudo: 'yes' para agregar a sudo, 'no' para usuario normal
       - borrar_home: 'yes' para borrar home al expirar, 'no' para mantenerlo
       - horas: número de horas hasta la expiración
   list
       Listar usuarios temporales activos y sus fechas de expiración
   history
       Mostrar historial completo de usuarios temporales creados
   cleanup <usuario>
       Eliminar usuario temporal manualmente
   help
       Mostrar esta ayuda
EJEMPLOS:
   ./tempusers.sh create testuser yes yes 24
   ./tempusers.sh create tempuser no no 8
   ./tempusers.sh list
   ./tempusers.sh history

Crear un Usuario Temporal

// Crear usuario 'juan' con sudo, que se borre el home, por 24 horas
# temp_users create juan yes yes 24
// Crear usuario 'testing' sin sudo, conservar home, por 8 horas
# temp_users create testing no no 8

Traducción:

  • nombreusuario: el nombre que querés (obvio)
  • yes: le das sudo (o no si no querés)
  • yes: borrás el home cuando expire (o no si lo querés conservar)
  • 24: se muere en 24 horas

El script te escupe:

Usuario temporal creado: juan
Contraseña temporal: A3k#9mP2$xY1
Acceso sudo: yes
Fecha de expiración: 2025-06-03 14:30:00
IMPORTANTE: Guarde esta contraseña, no se mostrará nuevamente.

Eso….copia el pass sino te tocará luego hacer:

// resetear pass
# passwd juan

Ver usuarios activos

# temp_users list

Esto te muestra algo así:

Usuarios temporales registrados:
=================================
USUARIO         SUDO     BORRAR_HOME  FECHA_EXPIRACION     ESTADO    
-------------------------------------------------------------------------------
juan            yes      yes          2025-06-03 14:30:00  ACTIVO (18h)
testing         no       no           2025-06-03 06:30:00  ACTIVO (10h)

Rajar a alguien antes de tiempo

# temp_users cleanup testuser

Por si el tipo se portó mal o ya no lo necesitás.

Usuario testuser y su directorio home eliminados exitosamente.
[2025-06-02 22:43:35] Usuario temporal testuser eliminado manualmente
Usuario testuser eliminado del registro.

Ver un historial de usuarios

# temp_users history

Y te va a mostrar algo así:

Historial de usuarios temporales:
==================================
USUARIO    SUDO  BORRAR_HOME  FECHA_CREACION       FECHA_EXPIRACION     ESTADO    ULTIMA_ACTUALIZACION
----------------------------------------------------------------------------------------------------------------------------
juan       yes   yes          2025-06-02 14:30:00  2025-06-03 14:30:00  ACTIVO    2025-06-02 14:30:00
testing    no    no           2025-06-02 06:30:00  2025-06-03 06:30:00  ACTIVO    2025-06-02 06:30:00
olduser    yes   yes          2025-06-01 10:00:00  2025-06-02 10:00:00  ELIMINADO 2025-06-02 10:00:15

Estados rastreados:

  • ACTIVO: Usuario existe y no ha expirado
  • EXPIRADO: Usuario existe pero ya expiró
  • ELIMINADO: Usuario fue eliminado del sistema

El historial mantiene un registro permanente de todos los usuarios temporales creados, incluso después de ser eliminados, proporcionando una auditoría completa por si te cae el ARCA (ex AFIP)

Algunas cuestiones

Generación de Contraseñas

Usa /dev/urandom para generar contraseñas verdaderamente aleatorias y llena de chirimbolos:

tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c 12

Detecta grupo para sudo

El script detecta automáticamente si tu distro usa sudo o wheel para privilegios de administrador.

Sistema de Archivos

/etc/temp_users.conf: Usuarios activos

usuario|sudo|borrar_home|fecha_expiracion|timestamp

/etc/temp_users_history.conf: Historial completo

usuario|sudo|borrar_home|fecha_creacion|fecha_expiracion|estado|ultima_actualizacion

/var/log/temp_users.log: Logs de todas las operaciones

Eliminación Automática

Cada vez que creás un usuario, el script:

  1. Genera un script de limpieza único
  2. Lo programa con at para la fecha exacta de expiración
  3. El script se auto-elimina después de ejecutarse
  4. Actualiza el historial automáticamente

Posibles mejoras

Si quisieran meter mano en el script, cosas que se me fueron ocurriendo y que no tengo más ganas…

  • Notificaciones: Mandar mail cuando expira un usuario
  • Usuarios con múltiples grupos: Más granularidad en permisos
  • Extensión automática: Renovar usuarios antes de que expiren
  • Usuarios enjaulados: usando chroot por ej

Bueno espero les haya parecido útil, vuelvo a pegar el link del script por si lo perdieron en tanta cháchara

Tags: Seguridad, Scripts

Comments: