LINUX.ORG.RU

udev контроль usb флэх

 


0

2

Доброгов времени суток!

Задача такая - контролировать подключаемых флэх по серийным номерам, т.е. подюключаются только разрешённые. Вопрос - как это лучше сделать ?

Система RHEL 6.4

В udev можно поймать новые подключамые устройства, отсеить только флэхи, но заблокировать невозможно. Правда можно написать правила. К примеру:

BUS=="usb", SUBSYSTEM=="block", PROGRAM="/usr/local/sbin/usbhandler $attr{serial}", RESULT!="ok", OPTIONS+="ignore_device" 
но логи показали, что параметр с серийником пустой. Другой вариант, попробовать поймать куда флэха примонтировалась и выполнить umount для неё. Правило для этого:
BUS=="usb", SUBSYSTEM=="block", RUN="/usr/local/sbin/usbhandler %k %r %n"
но и в этом случае часть параметров пустая - в частности %n. В общем пока больше нет идей.

но логи показали, что параметр с серийником пустой

То вам нужно опознать флешку, для которой ″udevadm info -q all -n /dev/sd?″ не показывает серийник?

mky ★★★★★ ()
Ответ на: комментарий от mky

немного не так. ″udevadm info -q all -n /dev/sd?″ - после монтирования покажет серийник. И даже если заблокировать монтирование, то через API udev можно вытащить серийник, но в момент обработки моего первого правила:

BUS=="usb", SUBSYSTEM=="block", PROGRAM="/usr/local/sbin/usbhandler $attr{serial}", RESULT!="ok", OPTIONS+="ignore_device" 
серийник ещё пустой ($attr{serial}). Доки по udev вроде как говорят что это нормально, так как PROGRAM вызывается до распознования характеристик устройства.

Spartan ()

Ещё хотел уточнить, что udev 147 (RHEL 6.4), так что параметр ignore_device ещё используется

Spartan ()
Ответ на: комментарий от Spartan

Неправильно ты, дядя Федор, бутерброды ешь!

Правило udev должно распознавать флешки и создавать запись в fstab и директорию в /media только для разрешенных накопителей. Вот как это делается для всех:

# монтирование съемных накопителей
KERNEL=="sd[b-z]", GOTO="do-disk-rules"
KERNEL!="sd[b-z][0-9]", GOTO="end-of-file"
LABEL="do-disk-rules"
ACTION=="add", ENV{ID_USB_DRIVER}="usb-storage", GROUP="storage"
IMPORT{program}="/sbin/blkid -o udev -p %N"
ACTION=="remove", ENV{ID_FS_TYPE}!="", RUN+="/bin/sed -i '/\/dev\/%k /d' /etc/fstab"
ACTION=="remove", ENV{ID_FS_TYPE}!="", RUN+="/bin/rmdir /media/$env{ID_FS_TYPE}-%k"
ACTION=="add", ENV{ID_FS_TYPE}!="", RUN+="/bin/mkdir -p /media/$env{ID_FS_TYPE}-%k"
# монтирование раздела fat32
ACTION=="add", ENV{ID_FS_TYPE}=="vfat", RUN+="/bin/sed -i '$a\/dev/%k /media/$env{ID_FS_TYPE}-%k vfat rw,noatime,noauto,noatime,dmask=022,user,fmask=133,iocharset=koi8-r 0 0' /etc/fstab"
# монтирование раздела ntfs
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/sed -i '$a\/dev/%k /media/$env{ID_FS_TYPE}-%k ntfs-3g rw,noatime,noauto,dmask=000,fmask=111,user,locale=ru_RU.koi8-r,allow_other 0 0' /etc/fstab"
# монтирование прочих ФС
ACTION=="add", ENV{ID_FS_TYPE}!="", ENV{ID_FS_TYPE}!="ntfs|vfat", RUN+="/bin/sed -i '$a\/dev/%k /media/$env{ID_FS_TYPE}-%k $env{ID_FS_TYPE}  defaults,noatime,user,exec,suid,dev 0 0' /etc/fstab"
LABEL="end-of-file"
тебе остается в ACTION=="add" ввести проверку идентификатора, если не совпадает — GOTO="end-of-file"

anonymous ()
Ответ на: комментарий от anonymous

Спасибо! ОЧень полезная инфа. Но у меня как раз проблема в том, чтобы определить разрешённую флэху. Причём список серийников хранится в файле и он может меняться (его пишет другая служба)

Spartan ()
Ответ на: комментарий от false

Да, такое тоже встречал. Но у нас принято решение - нет серийника - нет разрешения работать с такой флешкой.

Spartan ()
Ответ на: комментарий от Spartan

Странно. Но ведь народ как-то делает монтирование заданных накопителей в заданный каталог.

Ещё есть usbguard, правда он под fc20-fc23, но может под RHEL 6 скомпилируется.

mky ★★★★★ ()

Можно еще сделать echo 1> /sys/block/sd(шо надо)/device/delete

false ★★★★★ ()
Ответ на: комментарий от mky

Да, про usbguard знаю. Его вроде собрать можно, но даставить пакеты по новее надо, что в моём случае не желательно. И если не ошибаюсь, они заточены под более новый udev, а udev после 147 поменялся слегка. Ну а в RHEL 6.4 как раз стоит 147

Spartan ()
Ответ на: комментарий от mky

Да, скрипт монтирования сверху уже написали. Можно в самом правиле udev задать серийник. А мне надо серийник передать в собственную софтину, чтобы сверить со списком разрешённых, а потом, если серийник не корректный, отказать системе в обработке сообщения (ignore_device)

Spartan ()
Ответ на: комментарий от imatveev13

Спасибо за направление, попробую разобраться. Тему тогда не буду пока закрывать, если разберусь, отпишусь как это вообще можно сделать. Ну или может кто ещё что-нибудь напишет. Всем спасибо

Spartan ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.