Lista bianca per flash USB con udev


3

Voglio creare qualcosa di simile alla "lista bianca" per le unità flash USB. Intendo "negare tutto ciò che non è permesso".

So che dovrei usare le udevregole:

  1. Aggiungi a /etc/udev/rules.d/una regola per negare ogni unità flash USB
  2. Aggiungi un'altra regola con un numero più alto per consentire ciò che voglio

Voglio occuparmi solo di unità flash USB. Le regole possono essere basate su qualsiasi informazione dall'unità USB. Intendo ID fornitore, numero di serie. Voglio dire, non ho alcun desiderio in questo caso. Qualsiasi soluzione

Ma non so cosa dovrei scrivere nei file delle regole. Puoi fare un esempio?

UPD. Creo un file con il seguente contenuto:

deck@crunch /etc/udev/rules.d $ cat 90-deny-usbflash.rules 
BUS=="usb", OPTIONS+="ignore_device"

Come so questa cartella viene guardata udevusando inotifyquindi le modifiche dovrebbero avere effetto in un lampo. Ma non sono state apportate modifiche.

Risposte:


3

Non hai detto se avevi installato un altro software che sta montando automaticamente tutte le unità. La mia soluzione di seguito presuppone che non lo faccia. Se lo fai, allora il tuo problema è diverso: dovresti specificare di cosa si tratta in modo che qualcuno possa suggerire come disinstallarlo o controllarlo.

Ecco un esempio di regole udev per montare solo le unità consentite (non testate ma basate su regole simili che uso):

#-- Skip if not an appropriate "sd" device
KERNEL!="sd[b-z]*", GOTO="99_exit"
SUBSYSTEM!="block", GOTO="99_exit"

#-- Handle 'remove' and 'change' events
SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/usr/bin/pumount /dev/%k", GOTO="99_exit"
ACTION=="remove|change", GOTO="99_exit"

#-- Create useful environment variables
SUBSYSTEMS=="usb", ENV{ID_SERIAL}!="?*", IMPORT{builtin}="usb_id"
SUBSYSTEMS=="usb", ENV{ID_FS_LABEL}!="?*", IMPORT{program}="/sbin/blkid -o udev -p %N"

#-- Skip if this is not a filesystem (e.g. if this is the whole drive, not a formatted partition)
ENV{ID_FS_USAGE}!="filesystem", GOTO="99_exit"

#-- Mount only allowed drives:
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="something_allowed", RUN+="/usr/bin/sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/some_name"
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="other_allowed", RUN+="/usr/bin/sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/other_name"

#-- Exit
LABEL="99_exit"

Il comando di montaggio che usi è, ovviamente, secondo le tue preferenze. Quello che ho mostrato è solo un esempio.

AGGIORNAMENTO: dai tuoi commenti desidero che hai installato qualcosa che esegue il montaggio automatico. Sul mio sistema (Debian Wheezy), non lo faccio. Ho provato il grep che mi hai suggerito e ho ottenuto un risultato diverso. In /lib/udev/rules.d/80-udisks.rules, ho trovato questa sezione di codice:

# Mark devices that shouldn't be automounted / autoassembled etc.
#
# Deny all, then punch holes for what looks like physical drives
# (TODO: this heuristic might need some work)
#

ENV{UDISKS_PRESENTATION_NOPOLICY}="1"
KERNEL=="sd*|hd*|sr*|mmcblk*|mspblk*", ENV{DISKS_PRESENTATION_NOPOLICY}="0"

Ciò suggerisce che, se avessi installato il software di montaggio automatico, potrebbe essere controllato dalla variabile d'ambiente UDISKS_PRESENTATION_NOPOLICY. Non hai specificato la tua distribuzione ma è apparentemente diversa.


Capisco la tua soluzione. Pensavo solo di poter semplicemente ignorare il dispositivo collegato e le mie regole sovrascrivono gli altri in modo che non montino nulla
Deck

A proposito cat /lib/udev/rules.d/* | grep mount, non stampa nulla
Deck

@Deck, ho aggiornato la risposta con le informazioni dal mio sistema (Debian) che è apparentemente diversa dalla tua. Inoltre, come da man udev, potresti voler scorrere grep mountle directory /etc/udev/rules.d/e /run/udev/rules.d/.
Giovanni 1024,

1

Puoi provare USBGuard . Implementa una lista nera / lista bianca di dispositivi USB sopra UDev e il framework di autorizzazione USB del kernel Linux. È possibile ottenere lo stesso risultato utilizzando UDev come già proposto, ma USBGuard è uno strumento dedicato per quel lavoro e ha un linguaggio delle regole e un'applet GUI (opzionale).

Poiché i dischi flash USB di solito hanno un numero di serie, quindi inserire nella whitelist VID: PID e un numero di serie in usbguard:

allow 1234:5678 serial "123456" with-interface equals { 08:*:* }
allow 1234:5678 serial "abcdef" with-interface equals { 08:*:* }
block

Ciò consentirebbe (autorizza) di collegare due dispositivi USB con solo un'interfaccia di archiviazione di massa, VID: PID o 1234: 5678 e un valore iSerial di "123456" o "abcdef". Tutto il resto sarebbe bloccato.

Disclaimer: sono l'autore di quel progetto.

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.