Disparadores Linux: Ejemplo práctico
Perfecto, hemos visto en los artículos anteriores que en Linux, al conectar o desconectar un dispositivo puedo realizar varias acciones, que puedo usar servicios propios para un usuario, o incluso realizar ciertas tareas directamente en los procesos de login usando los módulo PAM.
Quizás sería util hacer un ejemplo práctico y crear nuestra propia llave USB.
Esta llave me permitiría que una vez me haya logado en mi equipo, si lo dejo bloqueado y vuelvo al cabo de un rato pueda desbloquearlo además de con mi usuario/clave, realizar el desbloqueo mediente ese USB.
Para lograr que un USB funcione como una llave física (Token de autenticación) para desbloquear el equipo (junto a tu contraseña o incluso sin ella), el "disparador" que se utiliza es PAM (Pluggable Authentication Modules), que explicamos en articulos anteriores.
Para el uso de una llave de tipo USB, en Linux existe un módulo oficial diseñado específicamente para esto llamado pam_usb.
¿Cómo funciona el USB Llave?
Cuando la pantalla se bloquea y vuelves a tu equipo, el gestor de sesiones (GDM, LightDM, etc.) consulta a los módulos PAM para verificar tu identidad.
Si tienes pam_usb configurado, PAM no solo te pide la contraseña, sino que va a buscar el USB.
Lo brillante de pam_usb es que no busca un simple archivo de texto (lo cual sería peligroso porque cualquiera podría copiarlo a otro USB). El sistema verifica:
- El ID de Vendedor y Producto del USB.
- El Número de serie único del hardware del USB.
- Un sistema de claves criptográficas mutables (One-Time Pads) que cambian cada vez que usas la llave. Si alguien clona tu USB, las claves no coincidirán y no podrá entrar.
Pasos generales para configurarlo
El proceso para configurarlo es el siguiente:
Instalar las herramientas necesarias:
sudo apt update
sudo apt -y install pam-usb-tools libpam-usbRegistrar nuestro USB como llave:
sudo pamusb-check --add-device llaveUSBEl sistema te mostrará una lista de todos los USB conectados, de esta forma puedes elegir el correcto.
Ahora hay que asociar esa "llave" a tu usuario de Linux, para ello hay que decirle al sistema que tu usuario "luisgulo" (en mi caso) es el dueño de esa llave (tu debes de poner tu nombre de usuario):
sudo pamusb-check --add-user luisgulo llaveUSBEl disparador: Configurar cómo queremos que actúe
Aquí es donde decidimos las reglas del juego, para ello editarmos el archivo /etc/pamusb.conf o modificando los archivos de PAM en /etc/pam.d/common-auth
Tenemos dos opciones principales:
- Opción A (Doble factor - Máxima Seguridad): Requiere introducir la contraseña y tener el USB conectado. Si falta uno de los dos, el equipo no se desbloquea.
- Opción B (Comodidad - Estilo Llave de coche): Si el USB está conectado, presionas Enter (o pones cualquier clave) y se desbloquea automáticamente. Si el USB no está, entonces es necesario escribir la contraseña de forma normal para desbloquear el equipo.
Opción Extra: Bloqueo automático al quitarlo

Si te gusta el concepto de disparadores, pam_usb incluye un demonio en segundo plano llamado pamusb-agent.
Se puede configurar para que haga el truco inverso y en el momento en que desconecta el USB de tu equipo, el disparador se activa y bloquee la pantalla inmediatamente.
De esta forma, cuando te levantas de tu asiento, te llevas tu USB en el bolsillo y tu computadora queda protegida al instante.
Para configurar el bloqueo automático al desconectar tu llave USB, en Debian mediante pamusb-agent, tendremos que configurar el demonio para que escuche el evento de desconexión (pamusb-agent corre en segundo plano) y ejecute el comando de bloqueo específico de tu entorno de escritorio.
El proceso para ello sería el siguiente:
1. Configurar los eventos en /etc/pamusb.conf
El archivo de configuración de pam_usb permite definir acciones concretas para cuando el dispositivo se conecta o se desconecta.
Abre el archivo /etc/pamusb.conf con permisos de root
Buscamo la sección de nuestro usuario (estará declarada dentro de <users>) y nos aseguramos de añadir los eventos de paki o pamusb-agent.
Debe quedar con una estructura similar a la que te muestro y además tienes que poner el comando de bloqueo del entorno gráfico que uses:
<users>
<user id="luisgulo">
<device>llaveUSB</device>
<agent event="lock">loginctl lock-session</agent>
<agent event="unlock">loginctl unlock-session</agent>
</user>
</users>Dependiendo de tu escritorio escritorio los comandos a usar serán:
- GNOME/GDM con systemd: El comando estándar e ideal es
loginctl lock-session. Funciona de forma nativa e invoca al bloqueador del sistema. - Si usas Cinnamon:
cinnamon-screensaver-command --lock - Si usas MATE:
mate-screensaver-command --lock - Si usas XFCE:
xfce4-session-logout --fast o xflock4
2. Probar el agente manualmente
Antes de dejarlo automatizado, es buena idea es verificar que el demonio funciona correctamente y detecta la desconexión.
En tu terminal, ejecuta el agente en modo de depuración:
pamusb-agent --debugVerás que se queda escuchando...
Ahora, simplemente desconecta tu USB. En la terminal deberías ver una salida que indica que el dispositivo fue desconectado (pamusb-agent[XXXX]: REMOVAL) y acto seguido tu pantalla debería bloquearse instantáneamente.
3. Automatizar el agente al iniciar sesión
Para que no tengas que arrancar pamusb-agent a mano cada vez que enciendes el equipo, debes hacer que se ejecute en segundo plano automáticamente al iniciar tu sesión gráfica.
Dado que este comando necesita interactuar con tu entorno de escritorio para bloquear la pantalla, debe ejecutarse con tu usuario habitual, no como root.
Opción A: Aplicaciones al inicio (La más fácil)
- Abre el menú de aplicaciones de Debian y busca "Aplicaciones al inicio" (Startup Applications).
- Haz clic en Añadir.
- Rellena los campos:
- Nombre: Agente pam_usb
- Comando:
pamusb-agent - Comentario: Bloqueo automático al quitar el USB
- Guarda los cambios.
Opción B: Mediante archivo .desktop (Por terminal)
Si prefieres hacerlo por consola, tal y como vimos en los artículos anteriores, crea un lanzador en tu carpeta local de autostart:
~/.config/autostart/pamusb-agent.desktop
Dentro del fichero pega el siguiente contenido:
[Desktop Entry]
Type=Application
Name=PAM USB Agent
Comment=Bloqueo automatico por USB
Exec=pamusb-agent
X-GNOME-Autostart-enabled=true
Hidden=false
NoDisplay=false¡Listo!
A partir de tu próximo inicio de sesión, el demonio estará vigilando silenciosamente en segundo plano.
En cuanto desconectes la llave USB de tu puerto, la sesión se bloqueará al instante y podrás marcharte con el pendrive en el bolsillo con total tranquilidad.
