Правила udev разрешают использование USB-накопителя только одного производителя и модели, но не разрешают другие

Итак, мы работаем над созданием среды, в которой у нас есть безопасная система хранения на наших ноутбуках с Linux, чтобы наши ноутбуки с Linux могли подключать только определенный USB-накопитель: Kingston DataTraveler 2.0. Поставщик: Код модели (из lsusb): Bus 003 Device 003: ID 0951:1665 Kingston Technology

Я пытался заставить эти правила работать, но в среде 12.04 правила не работают. (Обратите внимание, что я прокомментировал # предварительно добавленными строками, но их нет в файлах udev):

# If a device is NOT a Kingston drive, ignore it.
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}!="0951", OPTIONS+="ignore_device"

# If a device is a Kingston drive, but is NOT the model we have, ignore it.
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}!="1665", OPTIONS+="ignore_device"

# If a device is a Kingston drive and is the model we have, then run a script
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1665", RUN+="/lib/udev/syslog-authorized-device-connected.sh"

У меня проблема в том, что ни одно из этих правил не работает, и у меня есть Понятия не имею, если это даже правильный подход для этого.

Мысли?

5
задан 26 May 2015 в 16:59

2 ответа

Я столкнулся перед той же проблемой с не эффективный ignore_device. Я не мог выяснить, почему затем я всегда иду с другими решениями.

  • Ну, ignore_device удаленный с udev выпуском 148. См. информацию о версии или журнал изменений

    Если Вы заметили, все темы, предполагающие, что использование его старо (~ 2009).

  • Быстрая альтернатива должна использовать: ENV{UDISKS_PRESENTATION_HIDE}="1" (Ubuntu 12.04). Для выпусков (> =12.10), которые включают udisks2 использование: ENV{UDISKS_IGNORE}="1".

    Ссылка: Archlinux Wiki: Udisks

Другие решения используют SYSFS. Также device/authorized (как упомянутое солнцестояние), device/remove или driver/unbind. Видеть Только Устройства массового хранения использования на выбранном USB-порте - как?

Трудность входит, как отклонить все устройство хранения данных только кроме одного вида/модели. Таким образом, условие соответствия правила должно отфильтровать узел единого устройства, ни больше, ни меньше (никакие дочерние или родительские устройства). Вот почему я добавил KERNELS=="[1-9]*-[0-9]*"

KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}!="0951", ENV{UDISKS_PRESENTATION_HIDE}="1"
KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}!="1665", ENV{UDISKS_PRESENTATION_HIDE}="1"

Ну, UDisks скрывает только монтирующийся рычаг. Они могут лучше использовать драйвер SYSFS, развязывают.

KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}!="125f", ENV{IF_STORAGE_REMOVE_ME}="1"
KERNELS=="[1-9]*-[0-9]*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="125f", ATTRS{idProduct}!="c96a", ENV{IF_STORAGE_REMOVE_ME}="1"
ENV{IF_STORAGE_REMOVE_ME}=="1", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"

Ссылка: udev управляют с немногими родительскими атрибутами устройств

7
ответ дан 26 May 2015 в 16:59

ПРИМЕЧАНИЕ: Obsoleted ответом Sneetsher. Этот ответ оставляют здесь по причинам прежней версии.

Так, я сортирую решенных это, и это была БОЛЬ, чтобы сделать.

я вновь исследовал ограничения в своих правилах, и я изменил функциональность. По-видимому, 12.04 не соблюдает ignore_device опция. Так, я импровизировал и записал сценарий размонтирования. С тех пор существует только один функциональный USB-порт в этих системах, мы заканчиваем со следующим, которое я ЗНАЮ, может повредить другие вещи:

/etc/udev/rules.d/100-restrict-usb-devices.rules

# If a device is NOT a Kingston drive, ignore it.
ACTION=="add", ATTRS{idVendor}!="0951", OPTIONS+="ignore_device", RUN+="/usr/bin/logger UnauthorizedUSBConnected", RUN+="/lib/udev/unmount.sh"

# If a device is a Kingston drive, but is NOT the model we have, ignore it.
ACTION=="add", ATTRS{idVendor}=="0951", ATTRS{idProduct}!="1665", OPTIONS+="ignore_device", RUN+="/usr/bin/logger UnauthorizedUSBConnected", RUN+="/lib/udev/unmount.sh"

# If a device is a Kingston drive and is the model we have, then run a script
ACTION=="add", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1665", RUN+="/lib/udev/syslog-authorized-device-connected.sh", RUN+="/usr/bin/logger AuthorizedUSBConnected"

/lib/udev/unmount.sh - Просто сценарий, который проверяет сначала на в настоящее время существующие устройства, и затем проверяет все другие дисковые устройства и размонтирования, если и только если сценарий работает. Так как все устройства были бы sdb, sdc, и т.д. существуют способы заставить его работать на все.

<час>

Мораль истории: система игнорирует ignore_device опция в 12,04. Должен написать сценарий всего.: /

0
ответ дан 26 May 2015 в 16:59

Другие вопросы по тегам:

Похожие вопросы: