Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Общий обзор доступных параметров идентификации
Command | |||||||
---|---|---|---|---|---|---|---|
В данный обзор не включены параметры устройств, относящиеся к их подключению к ОС. Такие параметры нежелательно применять для идентификации устройств, так как они:
Все При желании все параметры подключенного устройства можно получить командой:
Выполнить мониторинг событий, происходящих при операциях с устройствами, можно командой:
|
Операции назначения мандатных атрибутов выполняются при подключении дискового или сменного носителя:
для всех носителей применяется операция "добавление носителя":
Блок кода ACTION=="add"
при этом операции подключения выполняются раздельно для самого носителя и для всех находящихся на этом носителе дисковых разделов.
Для приводов компакт-дисков при смене CD/DVD-диска и для адаптеров SD-карт может применяться операция "смена носителя":
Блок кода ACTION=="change"
Съемные и сменные Сменные носители всегда являются блочными устройствами:
Блок кода ENV{SUBSYSTEM}=="block"
Сменные Съемные и сменные носители всегда являются устройствами типа "диск" (disk) или типа "дисковый раздел" (partition):
Блок кода ENV{DEVTYPE}=="disk" ENV{DEVTYPE}=="partition"
при этом правила МРД Parsec, применяемые для реализации учета съемных носителей, работают с дисковыми разделами.
Атрибуты, теоретически применимые для идентификации сменных носителей:носителей:
Информация Для идентификации сменных носителей типа CD/DVD-диск и SD-карта применимы только параметры "ID_FS_LABEL" и "ID_FS_LABEL_ENC". Для съемных Для устройств типа "диск" (также применимы к устройствам типа "дисковый раздел", которыми наследуются от устройства "диск"):
- ENV{ID_VENDOR}=="SanDisk"
- ENV{ID_VENDOR_ID}=="0781"
- ENV{ID_VENDOR_ENC}=="SanDisk\\x20"
- ENV{ID_MODEL}=="Cruzer_Glide"
- ENV{ID_MODEL_ID}=="5575"
- ENV{ID_MODEL_ENC}=="Cruzer\\x20Glide\\x20\\x20\\x20\\x20"
- ENV{ID_SERIAL}=="SanDisk_Cruzer_Glide_XXXXXXXXXXXXXXXXXX-0:0"
- ENV{ID_SERIAL_SHORT}=="XXXXXXXXXXXXXXXXXX"
- Дополнительные атрибуты, применимые к устройствам типа "дисковый раздел":
- "ENV{ID_FS_LABEL}=="FLASH128G2"
- "ENV{ID_FS_LABEL_ENC}=="FLASH128G2"
- "ENV{ID_PART_ENTRY_NUMBER}=1"
- "ENV{ID_FS_TYPE}=="vfat"
- "ENV{ID_FS_USAGE}=="filesystem"
- "ENV{ID_FS_UUID}=="0047-C44D"
- "ENV{ID_FS_UUID_ENC}=="0047-C44D"
- "ENV{ID_FS_VERSION}=="FAT32"
- "ENV{ID_PART_ENTRY_NUMBER}=1"
Рекомендации по выбору параметров идентификации
- Основным минимальным параметром идентификации съемного носителя является его серийный номер (ID_SERIAL или ID_SERIAL_SHORT). Для сменных носителей идентифицирующими являются только параметры ID_FS_LABEL и ID_FS_LABEL_ENC;
- Для гарантированной уникальности идентификации съемных носителей при использовании оборудования разных моделей и разных производителей можно использовать набор параметров "Производитель" - "Модель" - "Серийный номер" (например, ID_VENDOR, ID_MODEL, ID_SERIAL или ID_VENDOR_ID, ID_MODEL_ID, ID_SERIAL и т.д.);
С учетом того, что на одном устройстве может располагаться несколько дисковых разделов в дополнение к параметрам идентификации носителя для идентификации дисковых разделов можно использовать:
Предупреждение Следует помнить, что все параметры файловой системы подделать гораздо проще, чем параметры физического носителя, поэтому предпочтительно придерживаться политики "один носитель - один дисковый раздел". - Метку файловой системы (ID_FS_LABEL);
- Универсальный идентификатор файловой системы UUID (ID_FS_UUID);
- Номер раздела на носителе (ID_PART_ENTRY_NUMBER}.
Информация |
---|
Параметры дисковых разделов, описывающие файловую систему (ID_FS_TYPE и ID_FS_VERSION) могут быть использованы для создания правил монтирования с учетом кодировок (известная проблема: правило монтирования, по умолчанию заданное в файле etc/fstab.pdac для устройства /dev/sd* несовместимо с устройствами с файловой системой ext4). |
Ограничение портов подключения устройств
Для программного запрета подключать учтенные устройства к незарегистрированныи незарегистрированным портам можно использовать параметр DEVPATH в правилах вида:
Блок кода |
---|
ENV{DEVPATH}!="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/*", GOTO="END" |
где в качестве аргумента указывается префикс пути к подключенному устройству. Обратите внимание на последний символ - '*', обеспечивающий возможность сравнения неполных строк.
Предупреждение |
---|
Следует помнить, что на разных машинах пути подключения могут быть разными, а при изменении аппаратной конфигурации пути подключения могут изменяться. В самом деле даже Также нельзя гарантировать, что пути подключения останутся неизменными после перезагрузки, так как устройства при загрузке ОС могут определяться в разном порядке. |
Примерный шаблон правила udev
Информация |
---|
Автоматически создаваемые локальные правила Parsec находятся в каталоге /etc/udev/rules.d/. |
Идентификация дискового раздела по серийному номеру устройств и UUID:
Блок кода |
---|
# отсекаются ненужные устройства - вероятность несовпадения серийника выше, правило сработает чаще ENV{ID_SERIAL}!="SanDisk_Cruzer_Glide_ХХХХХХХХХХХХХ-0:0", GOTO="END" ENV{ID_FS_UUID}!="0047-C44D", GOTO="END" # отсекаются ненужные события ACTION!="add", GOTO="END" ENV{SUBSYSTEM}!="block", GOTO="END" ENV{DEVTYPE}!="partition", GOTO="END" # настройка правил Parsec OWNER="luser", GROUP="root", MODE="740", PDPL="0:0:0x0:0x0!:", AUDIT="o:0x0:0x0" ENV{ID_FS_TYPE}=="?*", SYMLINK+="%k_$env{ID_FS_TYPE}", RUN+="/bin/ln -f /dev/%k /dev/%k_$env{ID_FS_TYPE}" LABEL="END" |
Запрет подключения USB-устройств
Автоматическое удаление всех USB-устройств
Для полного запрета подключения USB-устройств создать правило udev, например, в файле /etc/udev/rules.d/99-local.rules:
Блок кода |
---|
ACTION!="add", GOTO="DONE"
ENV{ID_BUS}!="usb", GOTO="DONE"
ENV{DEVTYPE}!="disk|partition", GOTO="DONE"
RUN="/bin/sh -c 'echo 1 >/sys$devpath/remove'", RUN="/usr/bin/logger -s 'Astra mount: remove device %E{DEVNAME} %E{ID_VENDOR} %E{ID_SERIAL}'"
LABEL="DONE" |
Это правило отключает все дисковые USB-устройства (диски и дисковые разделы) немедленно после их подключения.
Автоматическая деавторизация всех USB-устройств
Для запрета использования USB-устройств создать правило udev, например, в файле /etc/udev/rules.d/99-local.rules:
Блок кода |
---|
ACTION!="add", GOTO="DONE"
ENV{ID_BUS}!="usb", GOTO="DONE"
ENV{DEVTYPE}!="disk|partition", GOTO="DONE"
RUN="/bin/sh -c 'echo 0 >/sys$devpath/authorized'", RUN="/usr/bin/logger -s 'Astra mount: deauth device %E{DEVNAME} %E{ID_VENDOR} %E{ID_SERIAL}'"
LABEL="DONE" |
Это правило запрещает использовать все дисковые USB-устройства немедленно после их подключения.
Селективное удаление USB-устройств
- Создать сценарий для удаления устройства, например:
Создать файл /usr/sbin/astra-mount со следующим содержимым:
Блок кода #!/bin/bash l="/usr/bin/logger -s -t \"Astra-mount:\"" path="/sys$1" while true ; do if [[ "$path" == "/sys/devices" ]] ; then $l "Remove option not found" exit 1 fi if [ -f "$path/remove" ] ; then $l "Removing $path/remove" echo 1 > "$path/remove" || $l "Can not remove $path/remove" break fi path=`dirname "$path"` done
Данный сценарий:
Получает в качестве единственного аргумента путь к устройству;
Последовательно ищет по полученному пути к устройству родительское устройство, поддерживающее операцию удаления;
- Выполняет операцию удаления;
Ограничить доступ к созданному файлу и сделать созданный файл исполняемым:
Command sudo chmod +x,go-w /usr/sbin/astra-mount
Создать udev-правило проверки параметров устройств для вызова сценария удаления устройства, например, в файле /etc/udev/rules.d/99-local.rules:
Блок кода ACTION=="add", ENV{ID_BUS}=="usb", ENV{DEVTYPE}=="disk", RUN+="/usr/sbin/astra-mount $devpath"
Данное правило при добавлении (ACTION=="add") устройств USB (ENV{ID_BUS}=="usb") типа disk (ENV{DEVTYPE}=="disk") вызывает сценарий удаления (/usr/sbin/astra-mount), передавая вызываемому сценарию путь к устройству ($devpath).