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.