- Записки эникейщика
- Как получить серийный номер usb накопителя?
- Настройки usb устройств
- DVI
- Станислав
- Fd1501h
- Станислав
- ulv
- Общий обзор доступных параметров идентификации
- Рекомендации по выбору параметров идентификации
- Ограничение портов подключения устройств
- Примерный шаблон правила udev
- Запрет подключения USB-устройств
- Автоматическое удаление всех USB-устройств
- Автоматическая деавторизация всех USB-устройств
- Селективное удаление USB-устройств
Записки эникейщика
Идея такая: создать в udev правило, которое будет блокировать все флешки, серийник которых не внесён в правило.
1. Идем в /etc/udev/rules.d
2. Создаем файл 99-rem-unauth-usb.rules (имя файла можете и сами придумать, но соблюдайте правила udev)
3. Пишем в файл:
ACTION!="add", GOTO="dont_remove_usb" ENV!="usb", GOTO="dont_remove_usb" ENV!="disk", GOTO="dont_remove_usb" ENV=="008D7DC64", GOTO="dont_remove_usb" ENV=="usb", RUN+="/bin/sh -c 'echo 1 > /sys$DEVPATH/device/delete'" LABEL="dont_remove_usb"
- Если действие не add, то выходим (выходим путем отсылки интерпретатора командой GOTO к метке, расположенной в самом конце файла)
- Если подключается устройство не usb, то выходим
- Если подключенное usb устройство не типа disk, то выходим. Это важный нюанс, т.к. без этой опции отключается вся usb переферия — клавиатуры, мышки и т.д. Во всяком случае, на тестовой реальной машине было так. А вот в VirtualBox этот эффект не проявлялся.
- Собственно проверка на серийник. Как его узнать, напишу ниже. Если параметр ID_SERIAL_SHORT у usb устройства равен указанному, то выходим — эту флешку вставлять в машину можно
- Что же делать, если правило всё еще выполняется? Учитывая все проверки выше, это означает, что к машине подключили usb накопитель, серийник которого не прошел проверку. А это значит, что его нужно отключить. Делается это путем записывания 1 в файл sys/путь к usb устройству/device/delete. После этого флешка отключается. На тестах это выглядело как отключение питания от флешки — на ней гас светодиодный индикатор работы.
- Отметка, куда будет перемещен интерпретатор, если ему передать это командой GOTO
Как получить серийный номер usb накопителя?
Для этого используется команда udevadm info с параметрами -q (запрос какой информации выводить) и -n (имя устройства). В результате команда должна получить вид:
udevadm info -q all -n /dev/sdb
-q all выведет всю информацию об устройстве. В качестве альтернативы вместо all можно использовать property.
-n /dev/sdb задает имя устройства.
Будьте с этим внимательны! У вас вместо sdb может быть sdd, sdc или что-то еще! Проверяйте, какому именно устройству присвоено sd*. Посмотреть это можно командой fdisk -l
Далее в выводе команды вас интересует значение параметра ID_SERIAL_SHORT. Это и есть серийник флешки. Его и надо подставлять в правило. Само собой, разрешенных флешек может быть несколько, просто копируйте строку, где проверяется серийник, и подставляйте в неё нужное значение.
Да, в выводе команды udevadm info присутствует параметр ID_SERIAL, но у меня по нему флеш накопители система фильтровать отказалась.
Настройки usb устройств
Как запретить все usb устройства (сьемные диски, мышь, клавиатура, принтера, устройства чтения смарт-карт, модемы, Wi-Fi, камеры, bluetooth. ) и прописать только нужные (которые будут работать на этом компьютере)?
Должно получиться по типу все запрещено кроме того что разрешено.
И как эту созданную политику можно будет распространять другим компьютерам, только потом прописывая нужные, подключаемые к ним устройства?
DVI
New member
На SE посмотрите в оснастке «Управление политикой безопасности» там есть пункт «Доступ к устройствам», а так по хорошему покрутите службу Astra Linux Directory.
Станислав
New member
На SE посмотрите в оснастке «Управление политикой безопасности» там есть пункт «Доступ к устройствам», а так по хорошему покрутите службу Astra Linux Directory.
Я там лазил, можно только запретить устройство. А мне нужно по системе запрещено все кроме того что разрешено.
Fd1501h
Moderator
Я там лазил, можно только запретить устройство. А мне нужно по системе запрещено все кроме того что разрешено.
Станислав
New member
И там лазил, вывел из группы floppy а вот fuse такого не нашел, все равно все подключается и работает. Может конечно из за fuse, но я её там не увидел в группах, нету её. Так что нужна какая та более подробная инструкция.
ulv
Moderator
В ОС СН входит средство по разграничению доступа к устройствам.
Оно в совей работе использует права на символьные и блочные устройства, создаваемые через систему udev.
Средство разрабатывалось для контроля за отчуждаемыми носителями.
Фактически, если выкинуть пользователя из группы floopy, то он не сможет смонтировать флешку (из cdrom — cd-disk).
Смонтировать сможет он только то устройство, что было добавлено через «управление устройствами» с выставлением этого пользователя в качестве владельца или группы пользователя.
Когда устройство добавляется через «окно добавления устройства», можно выбрать к какому из параметров прикрепится (по-умолчанию id_serial).
Среди этих параметров есть и dev_path который определяет конкретный порт, в который воткнуто устройство.
Идею создания «белого списка устройств» возьмем на проработку.
Общий обзор доступных параметров идентификации
В данный обзор не включены параметры устройств, относящиеся к их подключению к ОС. Такие параметры нежелательно применять для идентификации устройств, так как они:
- могут повторяться для разных устройств (присвоение имени sdX);
- могут зависеть от порядка подключения устройств (присвоение имен sdX);
- могут изменяться при изменении аппаратной конфигурации;
- с высокой вероятностью будут отличаться на разных доменных компьютерах, имеющих разную аппаратную конфигурацию.
Далее под термином «носитель» («съемный носитель», «дисковый носитель») по умолчанию подразумевается носитель информации типа накопитель на жестких магнитных дисках, накопитель SSD, USB-flash. Особенности применения иных носителей (сменных носителей, таких, как CD, DVD, SD-карты) оговорены в тексте.
Все параметры подключенного устройства можно получить командой:
Выполнить мониторинг событий, происходящих при операциях с устройствами , можно командой:
- Операции назначения мандатных атрибутов выполняются при подключении дикового или сменного носителя:
- Для съемных устройств типа «диск» (также применимы к устройствам типа «дисковый раздел», которыми наследуются от устройства «диск»):
- ENV==»SanDisk»
- ENV==»0781″
- ENV==»SanDisk\\x20″
- ENV==»Cruzer_Glide»
- ENV==»5575″
- ENV==»Cruzer\\x20Glide\\x20\\x20\\x20\\x20″
- ENV==»SanDisk_Cruzer_Glide_XXXXXXXXXXXXXXXXXX-0:0″
- ENV==»XXXXXXXXXXXXXXXXXX»
- «ENV==»FLASH128G2»
- «ENV==»FLASH128G2»
- «ENV=1»
- «ENV==»vfat»
- «ENV==»filesystem»
- «ENV==»0047-C44D»
- «ENV==»0047-C44D»
- «ENV==»FAT32»
- «ENV=1»
Рекомендации по выбору параметров идентификации
- Основным минимальным параметром идентификации съемного носителя является его серийный номер (ID_SERIAL или ID_SERIAL_SHORT). Для сменных носителей идентифицирующими являются только параметры ID_FS_LABEL и ID_FS_LABEL_ENC;
Следует помнить, что все параметры файловой системы подделать гораздо проще, чем параметры физического носителя, поэтому предпочтительно придерживаться политики «один носитель — один дисковый раздел».
- Метку файловой системы (ID_FS_LABEL);
- Универсальный идентификатор файловой системы UUID (ID_FS_UUID);
- Номер раздела на носителе (ID_PART_ENTRY_NUMBER>.
Параметры дисковых разделов, описывающие файловую систему (ID_FS_TYPE и ID_FS_VERSION) могут быть использованы для создания правил монтирования с учетом кодировок (известная проблема: правило монтирования, по умолчанию заданное в файле etc/fstab.pdac для устройства /dev/sd* несовместимо с устройствами с файловой системой ext4).
Ограничение портов подключения устройств
Для программного запрета подключать учтенные устройства к незарегистрированным портам можно использовать параметр DE VPATH в правилах вида:
ENV!="/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!="SanDisk_Cruzer_Glide_ХХХХХХХХХХХХХ-0:0", GOTO="END" ENV!="0047-C44D", GOTO="END" # отсекаются ненужные события ACTION!="add", GOTO="END" ENV!="block", GOTO="END" ENV!="partition", GOTO="END" # настройка правил Parsec OWNER="luser", GROUP="root", MODE="740", PDPL="0:0:0x0:0x0!:", AUDIT="o:0x0:0x0" ENV=="?*", SYMLINK+="%k_$env", RUN+="/bin/ln -f /dev/%k /dev/%k_$env" LABEL="END"
Запрет подключения USB-устройств
Автоматическое удаление всех USB-устройств
Для полного запрета подключения USB-устройств создать правило udev, например, в файле /etc/udev/rules.d/99-local.rules:
ACTION!="add", GOTO="DONE" ENV!="usb", GOTO="DONE" RUN="/bin/sh -c 'echo 1 >/sys$devpath/remove'", RUN="/usr/bin/logger -s 'Astra mount: remove device %E %E %E'" LABEL="DONE"
Это правило отключает все USB-устройства (диски и дисковые разделы) немедленно после их подключения.
Автоматическая деавторизация всех USB-устройств
Для запрета использования USB-устройств создать правило udev, например, в файле /etc/udev/rules.d/99-local.rules:
ACTION!="add", GOTO="DONE" ENV!="usb", GOTO="DONE" RUN="/bin/sh -c 'echo 0 >/sys$devpath/authorized'", RUN="/usr/bin/logger -s 'Astra mount: deauth device %E %E %E'" 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
- Получает в качестве единственного аргумента путь к устройству;
- Последовательно ищет по полученному пути к устройству родительское устройство, поддерживающее операцию удаления;
- Выполняет операцию удаления;
ACTION=="add", ENV=="usb", ENV=="disk", RUN+="/usr/sbin/astra-mount $devpath"
- для всех носителей применяется операция «добавление носителя»:
при этом операции подключения выполняются раздельно для самого носителя и для всех находящихся на этом носителе дисковых разделов.
при этом правила МРД Parsec, применяемые для реализации учета съемных носителей, работают с дисковыми разделами.
Для идентификации сменных носителей типа CD/DVD-диск и SD-карта применимы только параметры «ID_FS_LABEL» и «ID_FS_LABEL_ENC».