¿Cómo ejecutar un script de shell cuando se detecta un nuevo dispositivo de almacenamiento USB?

17

Quiero un script que descargue el registro y comience a iniciar sesión tan pronto como se conecte un almacenamiento masivo USB (con el archivo 'OKdump'). Y si se detecta algo anormal (como un error que está presente visualmente), quiero para tomar una captura de pantalla y guardarla en la misma unidad.

Amith KK
fuente

Respuestas:

13

Usa Udev. Udev es un demonio administrador de dispositivos. Entre otras cosas, es responsable de nombrar sus dispositivos. Puede definir udev-rules poniendo archivos con una sintaxis determinada en el directorio de reglas. Las reglas pueden hacer muchas cosas, en particular pueden ejecutar scripts, cuando un determinado dispositivo está conectado.

Cómo resolver tu problema:

Primero debe recopilar información en su dispositivo. Digamos que lo conectó y sabe que lleva el nombre /dev/sdb1. Si es así, corre:

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

El comando generará información sobre su dispositivo. Es bastante largo. Debe encontrar algo que identifique el dispositivo de forma exclusiva. Eso podría ser un serial como ATTRS{serial}=="UA04FLGC"o una combinación de otros atributos como ATTRS{idVendor}y ATTRS{idProduct}. La mayoría de los nombres se explican más o menos por sí mismos. Elija uno o una combinación de algunos que parezcan razonables; si no funcionan, intente con otra cosa.

Una vez que haya encontrado un identificador único, cree un archivo /etc/udev/rules.dque comience con dos dígitos y termine con .rules. Los dos dígitos especifican el orden de procesamiento de estos archivos .rules; 70-usb-log-custom.rulesdebería ser una buena opción para usted. La sintaxis de este archivo de reglas puede ser muy compleja. Si estás interesado, google udev. Si no, simplemente abra el archivo recién creado y edítelo para que se vea así:

# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

Este es un archivo udev real que estoy usando. Tiene tres reglas en el mismo. Cada línea es una regla propia. La primera línea ejecuta un script para crear un dispositivo descifrado cada vez que se conecta un disco cifrado. La segunda línea invoca el mismo script con diferentes opciones en caso de que se elimine el dispositivo descifrado. La tercera línea establece permisos para otro dispositivo relacionado.

Lo más probable es que solo necesite la primera línea. Elimine el resto e inserte la serie correcta (o la combinación de parámetros que seleccionó para identificar su dispositivo).

Explicación de mi archivo:

KERNEL=="sd?1"dice que el dispositivo que estamos buscando en esta regla es nombrado en la línea de /dev/sda1, /dev/sdc1o algo por el estilo. El signo de interrogación es un comodín para cualquier letra. ATTRS{serial}=="UA04FLGC"es el identificador único aquí. Para el otro dispositivo del que estaba hablando (tercera línea), no estoy usando el número de serie, sino una combinación de SYSFS{idVendor}=="1781"e SYSFS{idProduct}=="0c9f"para identificarlo.

ACTION=="add"le dice a la regla que solo debe actuar cuando se agrega el dispositivo; no cuando se quita.

SYMLINK+="cusb1"crea un enlace simbólico en el disco para encontrarlo debajo /dev/cusb1.

RUN+="/home/confus/bin/usb-encrypt.sh add %k" ejecuta el script y le pasa 'agregar' y '% k' (el nombre del dispositivo).

No daré más detalles, ya que hay excelentes tutoriales sobre las reglas de udev. Sin embargo, lo que lees aquí debería ser suficiente para que te miren.

confundir
fuente
Excelente respuesta, pero ahora quiero un script que haga el registro
Amith KK
44
Entonces TÚ tendrás que escribirlo o ser más específico sobre qué es exactamente lo que quieres. Por ejemplo, no veo qué le diría una captura de pantalla. También 'vuelca el registro del sistema' ¿hacia dónde? 'Cualquier cosa anormal' es un término bastante amplio también. No somos tu ejército personal: si sabes una o dos cosas sobre bash-scripting, entonces ahora tienes todas las herramientas que necesitas para escribir el script tú mismo.
con-f-use
: D sorry @ con-f-use
Amith KK