Wie deaktiviere ich USB-Geräte basierend auf der Hersteller-ID in einer Linux-Umgebung?

11

Ich möchte USB-Geräte basierend auf der Hersteller-ID in einer Linux-Umgebung deaktivieren. Ich möchte nur bestimmte USB-Geräte zulassen, basierend auf der Hersteller-ID.

Subbarao
quelle
Ich habe einen bestimmten Anbieter: Geräte-ID, für die ich cdc_acm deaktivieren möchte. Ich habe dies seitdem zu einer separaten Frage gemacht .
Mirabilos

Antworten:

10

Sie können eine udev-Regel erstellen, die Geräte standardmäßig deaktiviert, bestimmte jedoch nach Hersteller-ID aktiviert. Erstellen Sie eine Datei /etc/udev/rules.d/01-usblockdown.rules, die eine Regel zum Deaktivieren von Geräten enthält:

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

Und dann Regeln zum Aktivieren der Geräte, die Sie zulassen möchten (Sie können sie verwenden ATTR{idVendor}, um die Hersteller-ID abzurufen):

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

Siehe „Sperren von Linux mit UDEV“ für weitere Informationen.

Michael Mrozek
quelle
Ist der obige Befehl ausreichend oder müssen wir einen udevadm-Trigger ausführen, um dies zu bewirken.
Subbarao
Hallo Stephane, müssen wir beide Regeln hinzufügen, um ein bestimmtes Pendrive zu ermöglichen?
Subbarao
@subbarao Ja, Sie müssen beide Regeln hinzufügen, der erste blockiert standardmäßig alles, der zweite erlaubt bestimmte Geräte.
DBX12
3

(Dies wäre vielleicht besser als Kommentar gewesen, aber mir fehlen die Punkte, also habe ich es zu einer Antwort erweitert.)

Ich bin hierher gekommen, um zu suchen, wie alle USB-Geräte zugelassen werden können, mit Ausnahme der Deaktivierung eines bestimmten Geräts nach Hersteller und Produkt-ID. So deaktivieren Sie ein USB- Soundgerät mit udev beantwortet es für das Beispiel 0d8c: 000c.

Erstellen /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'"

Es gibt eine Diskrepanz zwischen der Antwort und einem Kommentar unten mit RUN=vs. RUN+=, ich habe das erstere ausprobiert und es hat gut funktioniert.

Ich hatte erwartet, dass dmesg oder lusb unterschiedlich berichten, aber beide zeigen, dass das nicht autorisierte Gerät wie zuvor aufgelistet wird, aber andere Prozesse / Module, die automatisch gestartet wurden, scheinen nicht ausgeführt zu werden, was der gewünschte Effekt war. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(die 1-2.2 ... zum Beispiel, die in dmesg zu finden ist) zeigt, dass die 0 an der richtigen Stelle platziert wurde.

Lucas W.
quelle
Ich weiß nicht, ob es dazwischen einige Änderungen in udev gab, aber heutzutage werden Attribute benannt ATTRS(Plural) und nicht, ATTRwenn ich Geräte mit abfrage udevadm.
Baptiste Mille-Mathias