Usuarios temporales en bash
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 comocron
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 (ono
si no querés) -
yes
: borrás el home cuando expire (ono
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:
- Genera un script de limpieza único
-
Lo programa con
at
para la fecha exacta de expiración - El script se auto-elimina después de ejecutarse
- 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