Tôi muốn tắt các thiết bị usb dựa trên id nhà cung cấp trong môi trường Linux. Tôi muốn chỉ cho phép các thiết bị USB cụ thể, dựa trên id nhà cung cấp.
Tôi muốn tắt các thiết bị usb dựa trên id nhà cung cấp trong môi trường Linux. Tôi muốn chỉ cho phép các thiết bị USB cụ thể, dựa trên id nhà cung cấp.
Câu trả lời:
Bạn có thể tạo quy tắc udev để tắt thiết bị theo mặc định, nhưng cho phép một số quy tắc nhất định theo ID nhà cung cấp. Tạo một tệp /etc/udev/rules.d/01-usblockdown.rules
chứa quy tắc để vô hiệu hóa thiết bị:
ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh -c 'for host in /sys/bus/usb/devices/usb*; do echo 0 > $host/authorized_default; done'"
Và sau đó là các quy tắc để kích hoạt các thiết bị bạn muốn cho phép (bạn có thể sử dụng ATTR{idVendor}
để lấy tại ID nhà cung cấp):
ACTION=="add", ATTR{idVendor}=="0000" RUN+="/bin/sh -c 'echo 1 >/sys$DEVPATH/authorized'"
Xem "Khóa Linux bằng UDEV" để biết thêm thông tin.
(điều này có thể tốt hơn khi bình luận nhưng tôi thiếu điểm nên đã mở rộng nó thành câu trả lời)
Tôi đến đây để tìm cách cho phép tất cả các thiết bị usb ngoại trừ việc vô hiệu hóa một thiết bị cụ thể của nhà cung cấp và id sản phẩm. Cách vô hiệu hóa thiết bị âm thanh usb với udev trả lời nó cho ví dụ 0d8c: 000c.
Tạo /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'"
Có một sự khác biệt giữa câu trả lời và một bình luận bên dưới RUN=
so với RUN+=
, tôi đã thử cái trước và nó hoạt động tốt.
Tôi đã mong đợi dmesg hoặc lusb báo cáo khác nhau nhưng cả hai đều cho thấy thiết bị không được ủy quyền được liệt kê như trước đây, nhưng các quy trình / mô-đun khác sẽ tự động xuất hiện không chạy được, đó là hiệu ứng mong muốn. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized
(ví dụ 1-2.2 ... ví dụ có thể tìm thấy trong dmesg) cho thấy số 0 được đặt đúng chỗ.
ATTRS
(số nhiều) và không phải ATTR
khi tôi truy vấn các thiết bị udevadm
.