come disabilitare i dispositivi USB basati sull'ID fornitore in ambiente Linux?


Risposte:


10

È possibile creare una regola udev che disabilita i dispositivi per impostazione predefinita, ma ne abilita alcuni in base all'ID fornitore. Crea un file /etc/udev/rules.d/01-usblockdown.rulesche contiene una regola per disabilitare i dispositivi:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"

E quindi le regole per abilitare i dispositivi che si desidera consentire (è possibile utilizzare ATTR{idVendor}per accedere all'ID fornitore):

ACTION=="add", ATTR{idVendor}=="0000" RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"

Vedi "Bloccare Linux usando UDEV" per maggiori informazioni.


è sufficiente il comando sopra o dobbiamo fare qualsiasi trigger udevadm per ottenere questo effetto.
subbarao,

ciao Stephane, dobbiamo aggiungere entrambe le regole per consentire pendrive specifici?
subbarao,

@subbarao Sì, devi aggiungere entrambe le regole, il primo blocca tutto per impostazione predefinita, il secondo consente determinati dispositivi.
DBX12,

Questo funziona quando si collega, ad esempio una tastiera, una volta avviato il sistema. Ma se la tastiera è connessa e si riavvia, la tastiera funziona al riavvio del sistema operativo. Scollegando la tastiera e ricollegandola, la tastiera non funziona come previsto. C'è qualche area di livello più basso che questa regola può essere eseguita prima dell'attivazione dei dispositivi di avvio?
ScottN,

3

(questo potrebbe essere stato un commento migliore, ma mi mancano i punti, quindi l'ho espanso in una risposta)

Sono venuto qui alla ricerca di come consentire tutti i dispositivi USB tranne disabilitare uno specifico per fornitore e ID prodotto. Come disabilitare un dispositivo audio USB con udev risponde per l'esempio 0d8c: 000c.

Creare /etc/udev/rules.d/disable-usb-device.rules:

ACTION=="add", ATTR{idVendor}=="0d8c", ATTR{idProduct}=="000c", RUN="/bin/sh -c 'echo 0 >/sys/\$devpath/authorized'"

C'è una discrepanza tra la risposta e un commento qui sotto con RUN=vs. RUN+=, ho provato il primo e ha funzionato bene.

Mi aspettavo che dmesg o lusb riferissero in modo diverso, ma entrambi mostrano che il dispositivo non autorizzato viene enumerato come prima, ma altri processi / moduli che si sarebbero avviati automaticamente sembrano non essere in esecuzione, il che era l'effetto desiderato. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(1-2.2 ... per esempio che si trova in dmesg) mostra che lo 0 è stato messo nel posto giusto.


Non so se ci siano stati dei cambiamenti tra udev, ma al giorno d'oggi gli attributi sono nominati ATTRS(plurale) e non ATTRquando interrogo i dispositivi udevadm.
Baptiste Mille-Mathias
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.