jak wyłączyć urządzenia USB na podstawie identyfikatora dostawcy w środowisku Linux?

11

Chcę wyłączyć urządzenia USB w oparciu o identyfikator dostawcy w środowisku Linux. Chcę zezwolić tylko na określone urządzenia USB, w oparciu o identyfikator dostawcy.

subbarao
źródło
Jak zablokować USB / PEN DRIVE w Linuksie (Kali Linux) grprajapat.blogspot.in/2014/09/…
Mam jednego konkretnego dostawcę: identyfikator urządzenia, dla którego chcę wyłączyć cdc_acm. Od tego czasu uczyniłem z tego osobne pytanie .
mirabilos

Odpowiedzi:

10

Możesz utworzyć regułę udev, która domyślnie wyłącza urządzenia, ale włącza niektóre według identyfikatora dostawcy. Utwórz plik /etc/udev/rules.d/01-usblockdown.ruleszawierający regułę, aby wyłączyć urządzenia:

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

A następnie reguły, aby włączyć urządzenia, na które chcesz zezwolić (możesz użyć, ATTR{idVendor}aby uzyskać identyfikator dostawcy):

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

Aby uzyskać więcej informacji, zobacz „Blokowanie systemu Linux za pomocą UDEV” .

Michał Mrożek
źródło
czy powyższe polecenie jest wystarczające, czy musimy wykonać jakikolwiek wyzwalacz udevadm, aby uzyskać efekt.
subbarao
cześć Stephane, musimy dodać obie reguły, aby umożliwić określony pendrive?
subbarao
@subbarao Tak, musisz dodać obie reguły, pierwsza domyślnie blokuje wszystko, druga zezwala na określone urządzenia.
DBX12
Działa to po podłączeniu, powiedzmy klawiatury, po uruchomieniu systemu. Ale jeśli klawiatura jest podłączona i nastąpi ponowne uruchomienie, klawiatura działa po ponownym uruchomieniu systemu operacyjnego. Po odłączeniu klawiatury i ponownym podłączeniu klawiatura nie działa zgodnie z oczekiwaniami. Czy istnieje jakiś obszar niższego poziomu, na którym można uruchomić tę regułę przed aktywacją urządzeń rozruchowych?
ScottN
3

(mogłoby to być lepsze jako komentarz, ale brakuje mi punktów, więc rozwinąłem go w odpowiedź)

Przybyłem tutaj, szukając sposobu na zezwolenie na wszystkie urządzenia USB oprócz wyłączenia określonego przez producenta i identyfikator produktu. Jak wyłączyć urządzenie dźwiękowe USB z udev, odpowiada na to w przykładzie 0d8c: 000c.

Utwórz /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'"

Występuje rozbieżność między odpowiedzią a komentarzem poniżej w RUN=porównaniu z RUN+=, wypróbowałem tę pierwszą i działała dobrze.

Spodziewałem się, że dmesg lub lusb będą raportować inaczej, ale oba pokazują, że nieautoryzowane urządzenie jest wyliczane tak jak poprzednio, ale inne procesy / moduły, które uruchomiłyby się automatycznie, wydają się nie działać, co było pożądanym efektem. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(1-2.2 ... na przykład, które można znaleźć w dmesg) pokazuje, że 0 zostało umieszczone we właściwym miejscu.

Lucas W.
źródło
Nie wiem, czy w udev wystąpiły jakieś zmiany, ale w dzisiejszych czasach atrybuty są nazywane ATTRS(w liczbie mnogiej), a nie ATTRpodczas zapytania urządzeń udevadm.
Baptiste Mille-Mathias,