Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1
- Astra Linux Special Edition РУСБ.10015-16 исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
Общий обзор доступных параметров идентификации
В данный обзор не включены параметры устройств, относящиеся к их подключению к ОС. Такие параметры нежелательно применять для идентификации устройств, так как они:
- могут повторяться для разных устройств (присвоение имени sdX);
- могут зависеть от порядка подключения устройств (присвоение имен sdX);
- могут изменяться при изменении аппаратной конфигурации;
- с высокой вероятностью будут отличаться на разных доменных компьютерах, имеющих разную аппаратную конфигурацию.
Все параметры подключенного устройства можно получить командой:
Выполнить мониторинг событий, происходящих при операциях с устройствами, можно командой:
Операции назначения мандатных атрибутов выполняются при подключении устройства:
для всех обнаруженных носителей применяется операция "добавление":
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}.
Ограничение портов подключения устройств
Для программного запрета подключать учтенные устройства к незарегистрированным портам можно использовать параметр 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/.
Автоматически создаваемые доменные правила Parsec находятся в каталоге /run/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" 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" 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
Данный сценарий:
Получает в качестве единственного аргумента путь к устройству;
Последовательно ищет по полученному пути к устройству родительское устройство, поддерживающее операцию удаления;
- Выполняет операцию удаления;
Ограничить доступ к созданному файлу и сделать созданный файл исполняемым:
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).