cara menonaktifkan perangkat USB berdasarkan id vendor di lingkungan Linux?


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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.