Linux 환경에서 공급업체 ID를 기반으로 USB 장치를 비활성화하는 방법은 무엇입니까?

Linux 환경에서 공급업체 ID를 기반으로 USB 장치를 비활성화하는 방법은 무엇입니까?

Linux 환경에서 공급업체 ID를 기반으로 USB 장치를 비활성화하고 싶습니다. 공급업체 ID를 기반으로 특정 USB 장치만 허용하고 싶습니다.

답변1

기본적으로 장치를 비활성화하지만 공급업체 ID별로 특정 장치를 활성화하는 udev 규칙을 생성할 수 있습니다. /etc/udev/rules.d/01-usblockdown.rules장치 비활성화 규칙이 포함된 파일을 만듭니다 .

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

그런 다음 허용하려는 장치에 대한 규칙을 활성화합니다. 다음을 ATTR{idVendor}통해 공급업체 ID를 얻을 수 있습니다.

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

바라보다"UDEV로 Linux를 잠그세요"더 많은 정보를 알고 싶습니다.

답변2

(이것은 주석으로 더 잘 작동할 수 있지만 요점이 부족하여 답변으로 확장하고 있습니다)

공급업체 및 제품 ID별로 특정 장치를 비활성화하는 것을 제외하고 모든 USB 장치를 허용하는 방법을 찾기 위해 여기에 왔습니다. udev를 사용하여 USB 사운드 장치를 비활성화하는 방법대답 0d8c:000c 예.

만들다 /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'"

답변과 아래 설명에 차이가 있습니다 RUN=. RUN+=전자를 시도했는데 훌륭하게 작동했습니다.

dmesg 또는 lusb가 다르게 보고할 것으로 예상했지만 둘 다 이전과 같이 승인되지 않은 장치가 열거되는 것으로 표시되지만 자동 시작되는 다른 프로세스/모듈은 실행되지 않는 것 같습니다. 이는 예상된 효과입니다. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(예: 1-2.2...는 dmesg에서 찾을 수 있음) 0이 올바른 위치에 배치되었음을 나타냅니다.

답변3

이것은 Ubuntu 20.04에서 저에게 효과적이었습니다.

$ cat /etc/udev/rules.d/81-elan-fingerprint.rules
# ID 04f3:0c28 Elan Microelectronics Corp. ELAN:Fingerprint should be disabled
ACTION=="add", ATTR{idVendor}=="04f3", ATTR{idProduct}=="0c28", RUN="/bin/sh -c 'echo 1 >/sys/\$devpath/remove'"

이렇게 하면 USB 장치를 연결하자마자 제거되므로 사용할 수 없게 됩니다. "ATTR {idProduct} == "0c28""을 제거하면 해당 공급업체의 모든 장치에 대해 동일한 작업을 수행해야 합니다.

관련 정보