Làm cách nào để tắt thiết bị USB dựa trên id nhà cung cấp trong môi trường Linux?


11

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.


Làm thế nào để Khối USB / Pen Drive trong Linux (kali linux) grprajapat.blogspot.in/2014/09/...

Tôi có một nhà cung cấp cụ thể: ID thiết bị Tôi muốn tắt cdc_acm cho. Tôi đã làm điều này thành một câu hỏi riêng biệt .
mirabilos

Câu trả lời:


10

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.ruleschứ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.


Là lệnh trên là đủ hoặc chúng ta phải thực hiện bất kỳ kích hoạt udevadm nào để có hiệu lực của việc này.
subbarao

chào Stephane, chúng ta phải thêm cả hai quy tắc để cho phép Pendrive cụ thể?
subbarao

@subbarao Có, bạn phải thêm cả hai quy tắc, khối thứ nhất chặn mọi thứ mặc định, thứ hai cho phép một số thiết bị nhất định.
DBX12

3

(đ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ỗ.


Tôi không biết liệu có một số thay đổi ở giữa udev hay không, nhưng ngày nay các thuộc tính được đặt tên ATTRS(số nhiều) và không phải ATTRkhi tôi truy vấn các thiết bị udevadm.
Baptiste Mille-Mathias
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.