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.
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):
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.
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.
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.
Odpowiedzi:
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.rules
zawierający regułę, aby wyłączyć urządzenia: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):Aby uzyskać więcej informacji, zobacz „Blokowanie systemu Linux za pomocą UDEV” .
źródło
(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
:Występuje rozbieżność między odpowiedzią a komentarzem poniżej w
RUN=
porównaniu zRUN+=
, 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.źródło
ATTRS
(w liczbie mnogiej), a nieATTR
podczas zapytania urządzeńudevadm
.