Auto-montaje de USB con udev rules

Auto-montaje de USB con udev rules

En entornos Linux, la automatización del montaje de dispositivos USB resulta esencial para mejorar la eficiencia y experiencia de uso. En este artículo exploraremos en detalle cómo aprovechar udev para detectar la inserción de una unidad USB y ejecutar un script de montaje automáticamente, sin intervención manual.

1. Fundamentos de udev

  • udev es el gestor de dispositivos dinámico en Linux crea y elimina nodos en /dev en tiempo real.
  • Está compuesto por reglas legibles que describen acciones a tomar cuando cambian condiciones en el sistema (add, remove, change).
  • Las reglas se ubican generalmente en /etc/udev/rules.d/ (locales) o /lib/udev/rules.d/ (paquete del sistema).

2. Identificación de la unidad USB

Antes de escribir la regla, es necesario conocer atributos únicos del dispositivo (vendor, product, serial o UUID). Utilizamos lsusb y blkid:

 lsusb
Bus 002 Device 005: ID 0781:5581 SanDisk Corp. Ultra Flair USB 3.0
 sudo blkid /dev/sdb1
/dev/sdb1: UUID=1234-ABCD TYPE=vfat PARTUUID=00000000-01
  

3. Estructura de una regla udev

Una línea de regla udev tiene la forma básica:

SUBSYSTEM==block, ACTION==add, KERNEL==sd1, ATTRS{idVendor}==0781, ATTRS{idProduct}==5581, RUN =/usr/local/bin/usb-mount.sh
  

Explicación de campos:

Campo Descripción
SUBSYSTEM Categoría del dispositivo (block para bloques).
ACTION Evento: add, remove, etc.
ATTRS{idVendor} ID del fabricante en hexadecimal.
RUN Script o comando a ejecutar.

4. Creación del script de montaje

El script debe encargarse de:


G2A Referral Badge
  • Recoger variables de entorno (DEVNAME, ID_FS_UUID, ID_FS_TYPE).
  • Crear el punto de montaje.
  • Montar con opciones adecuadas.
  • Actualizar /etc/fstab o limpiar al desmontar.
#!/bin/bash
MOUNT_DIR=/media/usb-{ID_FS_UUID}
DEV={DEVNAME}

# Crear directorio
[ ! -d {MOUNT_DIR} ] ampamp mkdir -p {MOUNT_DIR}

# Montar con permisos de usuario
mount -o uid=1000,gid=1000,umask=0022 {DEV} {MOUNT_DIR} ampamp 
logger USB montado en {MOUNT_DIR}
  

Guardar en /usr/local/bin/usb-mount.sh y otorgar permisos:

 sudo chmod  x /usr/local/bin/usb-mount.sh
  

5. Integración con udev

Crear archivo de regla, por ejemplo /etc/udev/rules.d/99-usb-mount.rules:

SUBSYSTEM==block, ACTION==add, KERNEL==sd1, ATTRS{idVendor}==0781, ATTRS{idProduct}==5581, ENV{ID_FS_UUID}!=, RUN =/usr/local/bin/usb-mount.sh
  

Recargar reglas:

 sudo udevadm control --reload
 sudo udevadm trigger
  

6. Pruebas y diagnóstico

  • Utilizar udevadm monitor para observar eventos:
 sudo udevadm monitor --environment --udev
    
  • Revisar logs en /var/log/syslog o mediante journalctl -f.
  • 7. Gestión de permisos y seguridad

    Al montar con uid/gid, se evita otorgar permisos de root a usuarios estándar. Además:

    • Validar ID_SERIAL si la unidad es privada.
    • Deshabilitar autoexec en sistemas sensibles.
    • Limitar ejecución del script a root.

    8. Ejemplos avanzados

    Integración con notify-send para notificaciones gráficas:

    # Dentro de usb-mount.sh
    if mount ... then
      sudo -u usuario DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus 
      notify-send USB montado Punto: {MOUNT_DIR}
    fi
      

    Uso de systemd.mount para mayor control:

    • Crear unidad media-usb-1234ABCD.mount en /etc/systemd/system/.
    • Configurar [Mount] y [Install] según systemd.mount.

    9. Consideraciones finales

    Este método basado en udev ofrece:

    • Montaje inmediato tras la conexión.
    • Control granular de dispositivos por atributos.
    • Opciones de personalización según necesidades de usuario o seguridad.

    Recursos recomendados

    Publicado el copy 2024 Autor: Especialista Linux Artículo íntegramente escrito en HTML con estilo minimalista.


    G2A Referral Badge

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *