Модуль 13. Мандатное (обязательное) управление доступом и контроль целостности в домене ALD Pro
Введение
О том, что такое Мандатный контроль целостности и Мандатное управление доступом мы рассказывали в Модуль 22. Мандатное (обязательное) управление доступом и контроль целостности в Astra Linux Special Edition.
Коротко напомним основные тезисы:
Защита государственной тайны и конфиденциальных данных
Пример: На одном компьютере работают пользователи с разными формами допуска («Секретно», «Совершенно секретно»). МРД гарантирует, что сотрудник с грифом «Секретно» не сможет прочитать или скопировать файлы, помеченные грифом «Совершенно секретно».
Защита от вредоносного ПО и инсайдеров
Пример: Если учетная запись пользователя или процесс будут скомпрометированы (вирусом или злым умыслом), злоумышленник не сможет выйти за рамки мандатного уровня и роли (атрибутов безопасности) этой учетной записи. Он не прочитает данные выше своего уровня и не понизит гриф секретности файла.
Безопасная работа в сетевом окружении
Пример: При передаче файла по сети между рабочими станциями Astra Linux МРД теги (метки безопасности) передаются вместе с данными. Принимающая система проверит мандатную метку и отклонит файл, если у принимающего пользователя нет соответствующего уровня доверия. Это предотвращает утечку «наверх» или «вниз».
Контроль периферии и внешних носителей
Пример: Запись на USB-флешку возможна только с понижением грифа (например, с «Секретно» до «Не секретно»). Это действие требует специальных полномочий и фиксируется в журнале. Таким образом, нельзя просто скопировать секретный документ на флешку.
Многопользовательская работа на одном АРМ
Пример: На терминальном сервере или рабочей станции могут одновременно работать пользователи из разных отделов (кадры, финансы, спецотдел). МКД обеспечивает изоляцию их сессий и данных на уровне ядра ОС, даже если они работают в одних и тех же приложениях.
В этом модуле речь пойдёт о том, как эти технологии работают в ALD Pro.
Интеграция мандатного контроля в доменную среду ALD Pro позволяет централизованно управлять политиками безопасности для всех рабочих станций и пользователей домена. Это упрощает администрирование и обеспечивает единообразие настроек безопасности во всей организации.
Функции мандатного контроля в домене
Настройки мандатного доступа доменных пользователей
Настройка через веб-интерфейс FreeIPA
Служба каталога FreeIPA из состава Astra Linux позволяет централизованно управлять настройками мандатного доступа доменных пользователей. В каталоге эта информация хранится в следующих атрибутах учетной записи:
x-ald-user-mac — минимально и максимально разрешенные классификационные метки пользователя;
x-ald-user-mic-level — максимально разрешенный уровень (категории) целостности;
x-ald-user-caps – назначенные привилегии.
Из каталога эта информация извлекается службой SSSD и кешируется в базе данных /var/lib/sss/db/cache_<domain>.ldb вместе с остальной информацией о пользователе. В момент входа пользователя в систему эту информацию используют PAM-модули pam_parsec_mac.so, pam_parsec_cap.so, pam_parsec_aud.so и pam_parsec_xauth.so.
рис. 459 Настройки доменных пользователей в интерфейсе FreeIPA
Для того чтобы иметь возможность назначать пользователям уровни и категории конфиденциальности, их нужно предварительно настроить в интерфейсе FreeIPA на странице . При этом следует учитывать следующие моменты:
При создании категорий конфиденциальности на портале управления FreeIPA вы указываете не разряд, а значение категории, т.е. нужно вводить значения 0x1, 0x2, 0x4, 0x8 и т.д. Интерфейс поддерживает проверку нескольких начальных значений, поэтому у вас не получится определить категорию с значением 0x3, соответствующее двум первым категориям сразу, но если у вас будет значительно больше категорий, то корректность вводимых значений вы должны будете проверять самостоятельно.
Уровни и категории МКЦ/МРД будут отображаться на рабочих станциях в момент входа доменных пользователей в систему и при использовании таких утилит как pdp-ls, если текущий пользователь работает из-под доменной учетной записи.
Настройки в интерфейсе FreeIPA не позволяют повысить максимальный уровень целостности/конфиденциальности на рабочих станциях, поэтому до появления ALD Pro 3.0.0 эти параметры приходилось изменять вручную.
Для удобной администрирования МКЦ/МРД на серверах и рабочих станциях администраторам нужно синхронизировать не только максимальные значения, но и текстовые метки уровней и категорий. Иначе администратор МРД, являясь высокоцелостным root, будет работать с локальными названиями уровней и категорий, а доменные пользователи будут видеть значения из домена.
Настройка через веб-интерфейс ALD Pro
В ALD Pro начиная с версии 3.0.0 также появилась возможность настраивать мандатный доступ доменных пользователей через веб-интерфейс. Для этого в карточке пользователя следует открыть вкладку :
рис. 460 Настройки доменных пользователей в интерфейсе ALD Pro
Кроме того, в ALD Pro существуют групповые политики семейства «Мандатные атрибуты» и «Мандатный контроль целостности (МКЦ)», которые позволяют управлять настройками МКЦ/МРД на рабочих станциях в домене, см. рис. 461:
рис. 461 Групповые политики МКЦ/МРД ALD Pro
Применение съемных носителей в домене
Регистрация устройства в веб-интерфейсе FreeIPA
Регистрация съемных носителей в домене FreeIPA осуществляется из web-интерфейса в разделе . Чтобы зарегистрировать новое устройство, нужно нажать на кнопку + Добавить и ввести следующие параметры:
Название учтённого устройства – параметр задает краткое наименование, однозначно идентифицирующее регистрационную запись устройства в системе.
Описание устройства – параметр позволяет определить расширенное описание, которое упростит работу с регистрационной записью устройства в будущем.
Владелец устройства и Группа устройства – параметр определяет владельцев, которые будут назначены на файлы /dev/sdb*, соответствующие этому устройству в системе.
Атрибуты устройства – параметр определяет строку, которая задает значения свойств, используемых для однозначной идентификации устройства при его подключении к компьютеру, например:
ENV{ID_SERIAL}=="JetFlash_Transcend_32GB_08XBQDCPX22PL4WH-0:0"
Примечание
чтобы правильно определить строку фильтра, следует воспользоваться локальным инструментом регистрации устройства.
Правила учёта включены — параметр позволяет отключить регистрационную запись без ее удаления из системы. Обратите внимание, что по умолчанию этот флажок выключен и его нужно активировать.
рис. 462 Регистрация устройства в веб-интерфейсе FreeIPA
Регистрация устройства в веб-интерфейсе ALD Pro
В ALD Pro начиная с версии 3.0.0 также появилась возможность регистрировать съемные носители через веб-интерфейс. Для этого надо перейти в раздел и нажать на кнопку + Создать:
рис. 463 Регистрация устройства в веб-интерфейсе ALD Pro
Параметры аналогичны тем, что указываются при регистрации носителя через интерфейс FreeIPA.
Из каталога эта информация извлекается службой SSSD и кешируется в базе данных /var/lib/sss/db/cache_<domain>.ldb. Например, правило admin-usb-drive можно найти в базе по DN «name=secuser-usb-drive,cn=devices,cn=ald.company.lan,cn=sysdb». Для того, чтобы служба udev смогла их использовать, служба SSSD создает файлы с соответствующими правилами в каталоге /run/udev/rules.d.
admin@pc-1:~$ sudo ls /run/udev/rules.d/
99zz_PDAC_sss_secuser@ald.company.lan_310400000_7238_secuser-usb-drive.rules
admin@pc-1:~$ sudo cat /run/udev/rules.d/99zz_PDAC_sss_secuser@ald.company.lan_310400000_7238_secuser-usbdrive.rules
#Parsec DevAC udev rule 4 device "secuser-usb-drive"
ENV{ID_SERIAL}=="JetFlash_Transcend_32GB_08XBQDCPX22PL4WH-0:0", OWNER="secuser", GROUP="admins",
MODE="640", PDPL="1:0:0x0:0x0!:", AUDIT="o:0x0:0x0", GOTO="BLOCK_DEV"
GOTO="END"
LABEL="BLOCK_DEV"
SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="?*", SYMLINK+="%k_$env{ID_FS_TYPE}", RUN+="/bin/ln -f /dev/%k /dev/%k_$env{ID_FS_TYPE}"
LABEL="END"
После добавления регистрационной записи вы можете уточнить следующие параметры:
Права доступа к устройству — параметр определяет, с какими правами доступа устройство будет смонтировано в системе при его подключении к компьютеру, по умолчанию «640» (user = rw, group = r). Вводить значение можно в текстовом формате «rwxrwxrwx» или как трехразрядное восьмеричное число «777». В каталоге значение сохраняется в атрибуте x-ald-devac-mode в десятичной системе счисления, но бэкенд отдает число в восьмеричной системе, и веб- интерфейс в крайних версиях FreeIPA по ошибке выполняет повторное преобразование в восьмеричную систему, поэтому вместо значения «640» мы видим «1200». В ALSE 1.7.5 UU1 ошибка уже исправлена.
Уровень и Категории конфиденциальности устройства — параметры определяют значение классификационной метки, с которой устройство будет смонтировано в системе при его подключении к компьютеру. Параметры актуальны для носителей с системой FAT. Для устройств с системой EXT4 используются классификационные метки, которые сохраняются в расширенных атрибутах объектов файловой системы.
Файловый сервер Samba
Файловый сервер Samba из состава Astra Linux позволяет предоставить доступ к файлам по сети с учетом классификационных меток. Для этого клиент и сервер должны работать под управлением операционной системы Astra Linux в режиме безопасности «Смоленск». Механизм работает следующим образом:
Для подключения к SMB-ресурсу клиентское приложение cifs.mount открывает исходящий сетевой сокет, которому назначается классификационная метка, унаследованная от пользовательской сессии.
При отправке пакетов сетевой стек операционной системы Astra Linux автоматически добавляет классификационную метку сокета во все исходящие IP-пакеты.
При получении запроса операционная система Astra Linux на файловом сервере открывает входящий сетевой сокет, которому по умолчанию назначается классификационная метка из полученного IP-пакета.
Сетевой стек операционной системы Astra Linux пересылает входящие пакеты службе Samba, которая запускает процесс пользовательской сессии smbd из-под суперпользователя root с высоким уровнем целостности и назначает ему классификационную метку входящего сокета.
В части проверки прав доступа следует учитывать следующие моменты:
Доступ на уровне дискреционных прав служба Samba контролирует самостоятельно с помощью модулей виртуальной файловой системы (англ. Virtual File System, VFS). Проверки операционной системы игнорируются, т.к. процесс smbd действует от имени суперпользователя root.
Доступ на уровне МРД контролируется модулем Парсек, так как процесс smbd запускается с классификационной меткой из входящего сетевого сокета. Если метка сетевого сокета окажется выше или несравнима с максимально разрешенной для пользователя классификационной меткой, то пользовательской сессии будет назначена нулевая классификационная метка, поэтому нарушитель не сможет получить прав больше, чем это определено в домене, даже если полностью завладеет рабочей станцией.
Доступ на уровне МКЦ контролируется модулем Парсек, но удаленный пользователь получает доступ на запись к файлам с любыми метками, так как процесс smbd всегда запускается с высоким уровнем целостности.
Примечание
Обратите внимание, что для обычного режима МКЦ довольно нетипично, что процессы имеют одновременно и высокий уровень целостности и ненулевую классификационную метку, так как при интерактивном входе в систему пользователь должен выбрать что-то одно.
Настройка общей папки на сервере
Даже если вы полностью контролируете компьютерную сеть на физическому уровне, для безопасной работы с секретными документами по сети на файловом сервере Samba нужно обязательно включить шифрование. Для этого в конце секции «global» нужно установить параметру «smb encrypt» значение «required»:
[global]
...
smb encrypt = required
Примечание
Для использования функции МРД на файловом сервере Samba в начало секции с настройками общей папки обычно рекомендуют добавить параметры «use socket mac label=YES» и «server signing = mandatory». Но в крайних редакциях Samba служба всегда использует мандатную метку сокета вне зависимости от значения параметра «use socket mac label», а для обеспечения безопасности функция шифрования намного эффективнее, чем просто подписи пакетов, поэтому данные настройки не являются обязательными.
Далее создадим секцию для предоставления доступа к конфиденциальным файлам:
[secret]
path = /home/secret
writable = yes
browseable = yes
valid users = secuser
Где:
Название секции [secret] — определяет название общей папки.
Параметр «path = /home/secret» — задает путь к общей папке на диске.
Параметр «writable = yes» — определяет, что файлы общей папки будут доступны пользователю на запись, если он не будет включен в список «read list».
Параметр «browseable = yes» — указывает, что общая папка должна быть видна при просмотре всех общих ресурсов файлового сервера.
Параметр «valid users = secuser» — определяет список пользователей, которым разрешено выполнять подключение к этому общему ресурсу.
Далее нужно создать структуру каталогов общей папки для работы с секретными документами:
Создаем каталог общей папки и назначаем ему максимальную классификационную метку с мандатным атрибутом ccnr, чтобы в нем можно было хранить объекты с любыми классификационными метками:
sudo mkdir /home/secret
sudo pdpl-file 3:0:-1:ccnr /home/secret
Создаем каталоги для документов разных уровней секретности:
sudo mkdir /home/secret/lvl1
sudo pdpl-file 1:0:0:0 /home/secret/lvl1
sudo mkdir /home/secret/lvl2
sudo pdpl-file 2:0:0:0 /home/secret/lvl2
sudo mkdir /home/secret/lvl3
sudo pdpl-file 3:0:0:0 /home/secret/lvl3
Назначаем дискреционные права доступа:
chown -R secuser:secuser /home/secret
chmod -R 640 /home/secret
Монтирование вручную утилитой mount
Если пользователь выполнит вход с классификационной меткой выше нуля, то монтирование общих папок из файлового менеджера с помощью FUSE будет недоступно, поэтому потребуется установить пакет cifs-utils и дать пользователю права на подключение к общей папке с помощью утилиты mount:
Установим необходимые пакеты на клиентский компьютер pc-1:
sudo apt install -y cifs-utils
Создадим точку для монтирования общей папки:
sudo mkdir /media/secuser sudo chown secuser:secuser /media/secuser
Проверим возможность монтирования общей папки из-под учетной записи администратора, кому разрешено использовать sudo:
sudo mount -t cifs -o sec=krb5,cruid=$UID,uid=$UID,gid=$GROUPS,file_mode=0770,dir_mode=0770 //fs- 1.ald.company.lan/secret /media/secret
Где:
-t — параметр определяет тип файловой системы.
-o — параметр позволяет задать набор опций для подключения общей папки.
sec=krb5 — параметр указывает, что при подключении к серверу клиент должен будет использовать аутентификацию по протоколу Kerberos V5 без цифровых подписей (англ. integrity). Подписи не требуются, т.к. сервер будет требовать шифрование.
cruid — позволяет указать пользователя, чтобы при подключении к серверу использовать правильное хранилище Kerberos-ключей (англ. credential user identity).
При монтировании папки из-под sudo пользователем по умолчанию будет root, поэтому данный параметр нужно задать явно. Для подстановки POSIX- идентификатора текущего пользователя используется переменная окружения $UID
uid, gid, file_mode и dir_mode — определяют владельцев и дискреционные права доступа, под которыми файлы и папки будут отображаться в примонтированной файловой системе. Служба cifsd по умолчанию использует эффективные идентификаторы процесса, который ее запустил, поэтому при монтировании из-под sudo значения uid/gid нужно задать явно.
//fs-1.ald.company.lan/secret — путь к общей папке на файловом сервере.
/media/secuser — точка монтирования общей папки в системе.
Размонтируем папку:
sudo umount /media/secret
Но так как у обычных пользователей нет прав суперпользователей, разрешим им монтировать общую папку с помощью записи в fstab. Этот способ не создает угрозу для безопасности, т.к. права на редактирование файла fstab есть только у суперпользователя, поэтому никто, кроме администратора, не сможет изменить параметры монтирования.
Добавим в fstab строку, которая разрешит пользователю самостоятельно монтировать папку
/media/secuserбез привилегий суперпользователя:admin@pc-1:~$ cat /etc/fstab ... #общая папка точка монтирования тип параметры //fs-1.ald.company.lan/secret /media/secuser cifs noauto,user,sec=krb5,file_mode=0770,dir_mode=0770
Где:
//fs-1.ald.company.lan/secret — путь к общей папке на файловом сервере.
/media/secuser — точка монтирования общей папки в системе.
cifs — тип сетевой файловой системы, который использует службу cifsd из состава пакета cifs-utils.
noauto — параметр указывает, что диск не требуется монтировать автоматически при загрузке системы, что не имеет смысла, т.к. аутентификация будет выполняться по протоколу Kerberos V5 с использованием билетов из связки ключей текущего пользователя.
user — параметр указывает, что монтировать папку cможет обычный пользователь, без прав суперпользователя. Для того, чтобы любой пользователь мог размонтировать ее, можно использовать users вместо user.
Примечание
Если общий ресурс не использует классификационные метки, то вместо параметра user можно воспользоваться параметром multiuser, который позволяет использовать одну и ту же точку монтирования для нескольких пользователей сразу. В этом случае SMB-клиент создает одно общее подключение, а файловый сервер Samba авторизует входящие запросы, в зависимости от того, от какого из пользователей они поступают. Для работы с МРД такой способ подключения не подходит, т.к. каждое подключение имеет собственную метку конфиденциальности.
sec=krb5 — параметр указывает, что при подключении к серверу клиент должен использовать аутентификацию по протоколу Kerberos V5 без цифровых подписей (англ. integrity). Подписи не требуются, т.к. сервер будет требовать шифрование.
file_mode и dir_mode — определяют дискреционные права доступа, под которыми файлы и папки будут отображаться в примонтированной файловой системе.
Войдем в систему пользователем secuser, выполним монтирование общей папки:
secuser@pc-1:~$ mount /media/secuser/
Проверим, что классификационные метки получены с файлового сервера корректно, дискреционные права доступа установлены в соответствии с правилом монтирования в fstab, а владельцами установлены текущий пользователь и его первичная группа.
secuser@pc-1:~$ pdp-ls -M /media/secuser/
итого 0
drwxrwx------ 2 secuser secuser Уровень_0:Низкий:Нет:0x0 lvl0
drwxrwx---m-- 2 secuser secuser Уровень_1:Низкий:Нет:0x0 lvl1
Проверим, что механизм мандатного управления доступом работает в штатном режиме:
secuser@pc-1:~$ pdp-id
Уровень конф.=1(Уровень_1), Уровень целостности:0(Низкий), Категории=0x0(Нет) Роли=()
secuser@pc-1:~$ echo "test" > /media/secuser/lvl1/test.txt
secuser@pc-1:~$ echo "test" > /media/secuser/lvl0/test.txt
bash: /media/secuser/lvl0/test.txt: Отказано в доступе
Проверим параметры монтирования общей папки на стороне клиента:
admin@file-1:~$ sudo smbstatus
Samba version 4.13.13-Debian
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
3474 secuser secuser 10.0.1.51 (ipv4:10.0.1.51:51466) SMB3_11 AES-128-GCM AES-128-CMAC
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
IPC$ 3474 10.0.1.51 Пн сен 22 12:21:01 2025 MSK AES-128-GCM AES-128-CMAC
secret 3474 10.0.1.51 Пн сен 22 12:21:01 2025 MSK AES-128-GCM AES-128-CMAC
Внимание
Если общую папку монтирует пользователь с ненулевой классификационной меткой, то даже высокоцелостный пользователь root не сможет увидеть факт монтирования и получить доступ к любым файлам этой директории.
Автоматическое монтирование через pam_mount
Можно настроить автоматическое монтирование общей папки при входе пользователя в систему с помощью пакета libpam-mount, но следует учитывать что это может создать значительную задержку входа. Выполним соответствующие настройки:
Установим необходимые пакеты:
sudo apt install -y libpam-mount
Для автоматического монтирования общей папки нужно внести следующие настройки в конфигурационный файл pam_mount.conf.xml
secuser@pc-1:~$ sudo cat /etc/security/pam_mount.conf.xml <pam_mount> ... <!-- Volume definitions --> <volume fstype="cifs" server="fs-1.ald.company.lan" path="secret" mountpoint="/media/%(USER)" options="sec=krb5,cruid=%(USERUID),uid=%(USERUID),gid=%(USERGID),file_mode=0644,dir_mode=0755" /> ...
Где:
fstype=»cifs» – задает тип файловой системы.
server=»fs-1.ald.company.lan» – адрес файлового сервера.
path=»secret» – имя общей папки на файловом сервере.
mountpoint=»/media/%(USER)» – точка монтирования общей папки в системе, где подстрока «%(USER)» является шаблоном для подстановки имени текущего пользователя, выполняющего вход в систему. Если каталог отсутствует, он будет создан модулем pam_mount автоматически.
options – параметры монтирования общей папки:
sec=krb5i — параметр указывает, что при подключении к серверу клиент должен использовать аутентификацию по протоколу Kerberos V5 без цифровых подписей (англ. integrity). Подписи не требуются, т.к. сервер будет требовать шифрование.
cruid=%(USERUID) — позволяет указать пользователя, чтобы при подключении к серверу использовать правильное хранилище Kerberos- ключей (англ. credential user identity). По умолчанию служба cifs-utils использует uid процесса, который выполняет монтирование, поэтому в конфигурационном файле модуля pam_mount, который действует от имени root, этот параметр нужно задать явно.
uid, gid, file_mode и dir_mode — определяют владельцев и дискреционные права доступа, под которыми файлы и папки будут отображаться в примонтированной файловой системе. Служба cifsd по умолчанию использует эффективные идентификаторы процесса, который ее запустил, поэтому для модуля pam_mount значения uid/gid нужно задать явно, т.к. его программный код вызывается из-под суперпользователя root.
После внесения изменений достаточно заново войти в систему нужным пользователем и общий ресурс будет автоматически смонтирован в указанную точку файловой системы.
Практика и тестирование
Заключение
Дополнительные источники информации
Обратная связь
Если остались вопросы, то их всегда можно задать в специальной теме.