Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)


Общий обзор доступных параметров идентификации

Command

В данный обзор не включены параметры устройств, относящиеся к их подключению к ОС. Такие параметры нежелательно применять для идентификации устройств, так как они:

  • могут повторяться для разных устройств  (присвоение имени sdX);
  • могут зависеть от порядка подключения устройств (присвоение имен sdX);
  • могут изменяться при изменении аппаратной конфигурации;
  • с высокой вероятностью будут отличаться на разных доменных компьютерах, имеющих разную аппаратную конфигурацию.
Информация
Далее под термином "носитель" ("съемный носитель", "дисковый носитель") по умолчанию подразумевается носитель информации типа накопитель на жестких магнитных дисках, накопитель SSD, USB-flash. Особенности применения иных носителей (сменных носителей, таких, как CD, DVD, SD-карты) оговорены в тексте.

Все параметры подключенного устройства можно получить командой:

Command
sudo udevadm info --query=property --name=/dev/<имя_устройства>

Выполнить мониторинг событий, происходящих при операциях с устройствами, можно командой:

Command
udevadm monitor


  1. Операции назначения мандатных атрибутов выполняются при подключении дикового или сменного носителя:

    1. для всех носителей применяется операция "добавление носителя":

      Блок кода
      ACTION=="add"

      при этом операции подключения выполняются раздельно для самого носителя и для всех находящихся на этом носителе дисковых разделов.

    2. Для приводов компакт-дисков при смене CD/DVD-диска и для адаптеров SD-карт может применяться операция "смена носителя":

      Блок кода
      ACTION=="change"


  2. Съемные и сменные носители всегда являются блочными устройствами:

    Блок кода
    ENV{SUBSYSTEM}=="block"


  3. Съемные и сменные носители всегда являются устройствами типа "диск" (disk) или типа "дисковый раздел" (partition):

    Блок кода
    ENV{DEVTYPE}=="disk"
    ENV{DEVTYPE}=="partition"

    при этом правила МРД Parsec, применяемые для реализации учета съемных носителей, работают с дисковыми разделами.

  4. Атрибуты, теоретически применимые для идентификации носителей:

    Информация
    Для идентификации сменных носителей типа CD/DVD-диск и SD-карта применимы только параметры "ID_FS_LABEL" и "ID_FS_LABEL_ENC".


    1. Для съемных устройств типа "диск" (также применимы к устройствам типа "дисковый раздел", которыми наследуются от устройства "диск"):

      1. ENV{ID_VENDOR}=="SanDisk"
      2. ENV{ID_VENDOR_ID}=="0781"
      3. ENV{ID_VENDOR_ENC}=="SanDisk\\x20"
      4. ENV{ID_MODEL}=="Cruzer_Glide"
      5. ENV{ID_MODEL_ID}=="5575"
      6. ENV{ID_MODEL_ENC}=="Cruzer\\x20Glide\\x20\\x20\\x20\\x20"
      7. ENV{ID_SERIAL}=="SanDisk_Cruzer_Glide_XXXXXXXXXXXXXXXXXX-0:0"
      8. ENV{ID_SERIAL_SHORT}=="XXXXXXXXXXXXXXXXXX"
    2. Дополнительные атрибуты, применимые к устройствам типа "дисковый раздел":
      1. "ENV{ID_FS_LABEL}=="FLASH128G2"
      2. "ENV{ID_FS_LABEL_ENC}=="FLASH128G2"
      3. "ENV{ID_PART_ENTRY_NUMBER}=1"
      4. "ENV{ID_FS_TYPE}=="vfat"
      5. "ENV{ID_FS_USAGE}=="filesystem"
      6. "ENV{ID_FS_UUID}=="0047-C44D"
      7. "ENV{ID_FS_UUID_ENC}=="0047-C44D"
      8. "ENV{ID_FS_VERSION}=="FAT32" 
      9. "ENV{ID_PART_ENTRY_NUMBER}=1"

Рекомендации по выбору параметров идентификации

  1. Основным минимальным параметром идентификации съемного носителя является его серийный номер (ID_SERIAL или ID_SERIAL_SHORT). Для сменных носителей идентифицирующими являются только параметры ID_FS_LABEL и ID_FS_LABEL_ENC;

  2. Для гарантированной уникальности идентификации съемных носителей при использовании оборудования разных моделей и разных производителей можно использовать набор параметров "Производитель" - "Модель" - "Серийный номер" (например, ID_VENDOR, ID_MODEL, ID_SERIAL или ID_VENDOR_ID, ID_MODEL_ID, ID_SERIAL и т.д.);

  3.  С учетом того, что на одном устройстве может располагаться несколько дисковых разделов в дополнение к параметрам идентификации носителя для идентификации дисковых разделов можно использовать:

    Предупреждение
    Следует помнить, что все параметры файловой системы подделать гораздо проще, чем параметры физического носителя, поэтому предпочтительно придерживаться политики "один носитель - один дисковый раздел".
    1. Метку файловой системы (ID_FS_LABEL);
    2. Универсальный идентификатор файловой системы UUID (ID_FS_UUID);
    3. Номер раздела на носителе (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/.
Автоматически создаваемые доменные правила 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-устройств

  1. Создать сценарий для удаления устройства, например:
    1. Создать файл /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

      Данный сценарий:

      1. Получает в качестве единственного аргумента путь к устройству;

      2. Последовательно ищет по полученному пути к устройству родительское устройство, поддерживающее операцию удаления;

      3. Выполняет операцию удаления;

    2. Ограничить доступ к созданному файлу и сделать созданный файл исполняемым:

      Command

      sudo chmod +x,go-w /usr/sbin/astra-mount


  2. Создать 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).