Come eseguire uno script di shell quando viene rilevato un nuovo dispositivo di archiviazione USB?


17

Voglio uno script che scarica il registro e inizia ad accedervi non appena viene inserita una memoria di massa USB (con il file 'OKdump' su di esso). E se viene rilevato qualcosa di anormale (come un errore che è visivamente presente) voglio per fare uno screenshot e salvarlo sulla stessa unità.

Risposte:


13

Usa Udev. Udev è un demone di gestione dispositivi. Tra le altre cose, è responsabile della denominazione dei dispositivi. È possibile definire le regole udev inserendo i file con una certa sintassi nella directory delle regole. Le regole possono fare molte cose - in particolare possono eseguire script quando è collegato un determinato dispositivo.

Come risolvere il tuo problema:

Per prima cosa devi raccogliere informazioni sul tuo dispositivo. Diciamo che lo hai collegato e sappiamo che va sotto il nome /dev/sdb1. In tal caso:

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

Il comando genererà informazioni sul tuo dispositivo. È piuttosto lungo. Devi trovare qualcosa che identifichi il dispositivo in modo univoco. Potrebbe essere un serial like ATTRS{serial}=="UA04FLGC"o una combinazione di altri attributi comeATTRS{idVendor} e ATTRS{idProduct}. La maggior parte dei nomi sono più o meno autoesplicativi. Scegli uno o una combinazione di alcuni che sembrano ragionevoli - se non funzionano, prova qualcos'altro.

Una volta trovato un identificatore univoco, crea un file /etc/udev/rules.dche inizia con due cifre e termina con .rules. Le due cifre specificano l'ordine di elaborazione di questi .rules-files - 70-usb-log-custom.rulesdovrebbe essere una buona scelta per te. La sintassi di questo file di regole può essere molto complessa. Se sei interessato, google udev. Se non semplicemente apri il file appena creato e modificalo per assomigliare a questo:

# /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"

Questo è un vero file udev che sto usando. Ci sono tre regole. Ogni riga è una regola a sé stante. La prima riga esegue uno script per creare un dispositivo decrittografato ogni volta che viene collegato un disco crittografato. La seconda riga richiama lo stesso script con diverse opzioni nel caso in cui il dispositivo decrittografato venga rimosso. La terza riga imposta le autorizzazioni per un altro dispositivo correlato.

Molto probabilmente avrai bisogno solo della prima riga. Elimina il resto e inserisci il seriale corretto (o la combinazione di parametri che hai scelto per identificare il tuo dispositivo).

Spiegazione del mio file:

KERNEL=="sd?1"dice che il dispositivo che stiamo cercando in questa regola si chiama lungo le linee di /dev/sda1, /dev/sdc1o qualcosa di simile. Il punto interrogativo è un carattere jolly per qualsiasi lettera. ATTRS{serial}=="UA04FLGC"è l'identificatore univoco qui. Per l'altro dispositivo di cui parlavo (terza riga) non sto usando il numero seriale ma una combinazione di SYSFS{idVendor}=="1781"e SYSFS{idProduct}=="0c9f"per identificarlo.

ACTION=="add"dice alla regola che dovrebbe agire solo quando viene aggiunto il dispositivo; non quando viene rimosso.

SYMLINK+="cusb1"crea un collegamento simbolico al disco in modo da trovarlo sotto /dev/cusb1.

RUN+="/home/confus/bin/usb-encrypt.sh add %k" esegue lo script e gli passa "add" e "% k" (il nome del dispositivo).

Non fornirò maggiori dettagli, in quanto esistono eccellenti tutorial sulle regole di udev. Quello che leggi qui dovrebbe essere sufficiente per essere fissato però.


Risposta eccellente ma ora voglio uno script che
esegua

4
Quindi dovrai scriverlo o essere più specifico su ciò che esattamente vuoi. Ad esempio, non vedo cosa ti direbbe uno screenshot. Inoltre 'scarica il registro di sistema' dove? "Qualunque cosa anomala" è anche un termine piuttosto ampio. Non siamo il tuo esercito personale - se conosci una o due cose sul bash-scripting allora ora hai tutti gli strumenti di cui hai bisogno per scrivere la sceneggiatura da solo.
con-f-use il

: D sorry @ con-f-use
Amith KK
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.