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

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



답변

기본적으로 장치를 비활성화하지만 벤더 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 잠금” 을 참조하십시오.


답변

(이것은 의견으로 더 좋았을 수도 있지만 포인트가 부족하여 답변으로 확장되었습니다)

여기에 공급 업체 및 제품 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(예를 들어 dmesg에서 찾을 수있는 1-2.2 …)는 0이 올바른 위치에 놓 였음을 보여줍니다.


답변