cara menonaktifkan perangkat USB berdasarkan id vendor di lingkungan Linux?

11

Saya ingin menonaktifkan perangkat usb berdasarkan id vendor di lingkungan Linux. Saya hanya ingin mengizinkan perangkat USB tertentu, berdasarkan id vendor.

subbarao
sumber
Cara Memblokir USB / PEN DRIVE di Linux (kali linux) grprajapat.blogspot.in/2014/09/…
Saya memiliki satu vendor spesifik: ID perangkat yang ingin saya matikan cdc_acm. Sejak itu saya membuat ini menjadi pertanyaan terpisah .
mirabilos

Jawaban:

10

Anda dapat membuat aturan udev yang menonaktifkan perangkat secara default, tetapi mengaktifkan yang tertentu dengan ID vendor. Buat file /etc/udev/rules.d/01-usblockdown.rulesyang berisi aturan untuk menonaktifkan perangkat:

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

Dan kemudian aturan untuk mengaktifkan perangkat yang ingin Anda izinkan (dapat Anda gunakan ATTR{idVendor}untuk mendapatkan ID vendor):

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

Lihat "Mengunci Linux menggunakan UDEV" untuk informasi lebih lanjut.

Michael Mrozek
sumber
apakah perintah di atas sudah cukup atau kita harus melakukan pemicu udevadm apa saja untuk mendapatkan efek ini.
subbarao
Hai Stephane, kita harus menambahkan kedua aturan untuk memungkinkan pendrive tertentu?
subbarao
@ Subbarao Ya, Anda harus menambahkan kedua aturan, yang pertama memblokir apa pun per default, yang kedua memungkinkan perangkat tertentu.
DBX12
Ini berfungsi saat Anda mencolokkan, ucapkan keyboard, setelah sistem di-boot. Tetapi jika keyboard terhubung dan Anda reboot, keyboard berfungsi saat OS booting kembali. Cabut keyboard lalu pasang kembali, keyboard tidak berfungsi seperti yang diharapkan. Apakah ada area yang levelnya lebih rendah sehingga aturan ini dapat dijalankan sebelum perangkat boot diaktifkan?
ScottN
3

(ini mungkin lebih baik sebagai komentar tapi saya kekurangan poin sehingga diperluas menjadi jawaban)

Saya datang ke sini mencari cara mengizinkan semua perangkat usb kecuali menonaktifkan perangkat tertentu oleh vendor dan id produk. Cara menonaktifkan perangkat suara usb dengan udev menjawabnya untuk contoh 0d8c: 000c.

Buat /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'"

Ada perbedaan antara jawaban dan komentar di bawah ini dengan RUN=vs. RUN+=, saya mencoba yang pertama dan itu bekerja dengan baik.

Saya mengharapkan dmesg atau lusb untuk melaporkan secara berbeda tetapi mereka berdua menunjukkan perangkat yang tidak diotorisasi disebutkan seperti sebelumnya, tetapi proses / modul lain yang akan diluncurkan secara otomatis tampaknya tidak berjalan yang merupakan efek yang diinginkan. cat /sys/bus/usb/devices/1-2.2.1.1.4/authorized(1-2.2 ... misalnya yang dapat ditemukan di dmesg) menunjukkan bahwa 0 diletakkan di tempat yang tepat.

Lucas W
sumber
Saya tidak tahu apakah ada beberapa perubahan di antara di udev, tetapi atribut saat ini dinamai ATTRS(jamak) dan tidak ATTRketika saya meminta perangkat dengan udevadm.
Baptiste Mille-Mathias