Мандатное управление доступом(МРД) и его настройка#
Мандатное управление доступом МРД#
Начиная с очередного обновления ОС СН Astra Linux Special Edition х.8 в качестве защищенной СУБД в составе ОС используется СУБД Tantor (в исполнении Basic), доработанная в соответствии с требованием интеграции с ОС в части защиты информации, в том числе мандатного управления доступом. В предыдущих очередных обновлениях до х.7 включительно, в качестве основы для защищенной СУБД использовалась СУБД PostgreSQL.
СУБД предназначена для создания и управления реляционными БД и предоставляет многопользовательский доступ к расположенным в них данным. Данные в реляционной БД хранятся в отношениях (таблицах), состоящих из строк и столбцов. При этом единицей хранения и доступа к данным является строка, состоящая из полей. Каждое поле строки идентифицируется именами столбцов. Кроме таблиц существуют другие объекты БД (виды, процедуры и т. п.), которые предоставляют доступ к данным, хранящимся в таблицах.
Основные сведения по синтаксису языка запросов SQL, поддерживаемым типам данных, встроенным функциям, установке и настройке сервера СУБД приведены в официальной документации на СУБД Tantor, которая доступна на информационном ресурсе разработчика СУБД Tantor tantorlabs.ru/docs.
Мандатное управление доступом в СУБД#
В основе механизма мандатного управления доступом в СУБД лежит управление доступом к защищаемым ресурсам БД на основе меток доступа, включающих иерархический уровень и неиерархическую категорию.
Это позволяет реализовать многоуровневую защиту с обеспечением разграничения доступа пользователей к защищаемым ресурсам БД и управление потоками информации.
В качестве меток доступа при использовании СУБД в ОС используются метки безопасности ОС.
Предупреждение
Мандатное управление доступом в СУБД функционирует только при настроенном в ОС мандатном управлении доступом. СУБД не имеет собственного механизма назначения, хранения и модификации меток пользователей и использует для этого механизмы ОС.
Для хранения меток объектов БД введено служебное поле maclabel.
Объекту БД при его создании задается метка безопасности, равная текущей метке безопасности создавшего его пользователя. В дальнейшем по этой метке производится разграничение доступа к созданному объекту.
Согласно МРОСЛ ДП-модели в части реализации мандатного управления доступом дополнительно к метке доступа вводится понятие сущностей-контейнеров (сущностей, которые могут содержать другие сущности).
Можно привести следующие примеры сущностей-контейнеров в СУБД: - кластер баз данных является контейнером для входящих в него баз данных; - база данных является контейнером для входящих в нее схем; - схема является контейнером для входящих в нее таблиц; - таблица является контейнером для входящих в нее записей.
Для задания способа доступа к сущностям внутри контейнеров используется мандатный признак CCR (Container Clearance Required).
В случае когда он установлен, доступ к контейнеру и его содержимому определяется его классификационной меткой, в противном случае доступ к содержимому разрешен без учета уровня конфиденциальности контейнера.
В качестве главного контейнера выбрано табличное пространство pg_global, которое создается одно на кластер базы данных. Таким образом, кластер является совокупностью ролей, баз данных и табличных пространств.
Предупреждение
Метка безопасности назначаемая на объект СУБД выглядит следующим образом, например {3,F}. Первое значение 3 определяет иерархический уровень в десятичной системе счисления. Второе значение F определяет неиерархическую совокупность категорий в шестнадцатеричном формате 64 битной двоичной маски.
Ролевое управление доступом в СУБД#
СУБД доработана для обеспечения соответствия требованиям по защите информации от несанкционированного доступа.
При реализации названных требований была установлена необходимость обеспечения соответствия пользователей СУБД учетным записям в ОС.
Реализация ролевого метода управления доступом подразумевает назначение ролям индивидуальных пользователей СУБД одной из ролей:
администратора СУБД;
администратора БД;
пользователя БД.
Роль администратора СУБД позволяет создавать и подключать кластеры баз данных, создавать и управлять учетными записями пользователей СУБД, управлять конфигурацией СУБД, управлять параметрами подключения пользователей СУБД к базам данных. Пользователю СУБД с данной ролью необходимо назначить высокий уровень целостности и включить его в группы astra-admin и astra-audit.
Роль администратора БД позволяет создавать и управлять учетными записями пользователей кластеров баз данных, управлять конфигурацией БД, назначать права доступа пользователям кластера (пользователей информационной системы) к объектам доступа БД (базам данных, схемам, таблицам, записям, столбцам, представлениям и иным объектам доступа), создавать резервные копии БД и восстанавливать БД из резервной копии, создавать, модифицировать и удалять процедуры (программный код), хранимые в БД. Пользователю СУБД с данной ролью необходимо назначить групповую роль pg_database_admin и включить его в группу astra-audit. В СУБД по умолчанию для роли администратора БД используется учетная запись pg_astra_db_admin.
Роль пользователя БД (пользователя информационной системы) позволяет создавать и манипулировать объектами доступа БД (таблица, запись или столбец, поле, представление и иные объекты доступа) и выполнять процедуры (программный код), хранимые в БД. Пользователю СУБД с данной ролью запрещено создание процедур (программного кода), хранимых в базах данных. Пользователю СУБД с данной ролью необходимо назначить групповую роль pg_database_user.
Идентификация и аутентификация пользователей в СУБД#
Идентификация и аутентификация пользователей в СУБД осуществляется с учетом требований ГОСТ Р 5 8833-2020.
В соответствии с вышеописанной ролевой моделью заведение учетных записей администраторов СУБД и администраторов БД (администраторов информационной системы) осуществляется администратором СУБД, а учетных записей пользователей БД — администратором БД.
СУБД предлагает несколько различных методов аутентификации клиента. Метод, используемый для аутентификации конкретного клиентского соединения, может быть выбран на основе адреса узла сети клиента, БД и пользователя.
Несмотря на то, что имена пользователей СУБД логически отделены от имен пользователей ОС, в которой запущен сервер, в соответствии с требованиями по защите информации от НСД требуется сопоставление пользователей СУБД пользователям ОС. Таким образом, при настройке аутентификации в СУБД следует использовать только методы аутентификации, в которых осуществляется подобное сопоставление. Для других пользователей осуществляется доступ только к незащищенной информации.
Для настройки PAM в СУБД необходимо создать локальные учетные записи пользователей и назначить им минимальные и максимальные уровни конфиденциальности и категории конфиденциальности. В конфигурационном файле контроля доступа сервера СУБД /etc/postgreslq/<версия>/main/pg_hba.conf
для параметра host указать требуемый метод аутентификации.
Для обеспечения сквозной аутентификации пользователей ЕПП (в домене безопасности) в СУБД необходимо в качестве метода аутентификации указать gss и провести соответствующую настройку сервера и клиента СУБД.
Схема функционирования защищенной СУБД в трехзвенной клиент-серверной архитектуре со сквозной аутентификацией в рамках ЕПП в режиме SSO (Single Sign-On) приведена на рисунке 1.

Рисунок 1 - функционирование защищенной СУБД в трехзвенном клиент-серверном приложении#
Совет
Подробнее о настройках и функционировании СУБД из состава ОС СН Astra Linux Special Edition можно узнать в Эксплуатационной документации в Руководстве администратора и в Руководстве по КСЗ.
Расчёт совокупной категории для классификационной метки объекта#
Создания сущностей-контейнеров и задания им меток и мандатного признака CCR#
Исходные данные#
Имеется сервер контроллера домена FreeIPA:
имя домена astra.aaa
администратор домена admin@astra.aaa
пользователь домена user-01@astra.aaa
Сервер базы данных располагается отдельно:
имя сервера dbsrv-01.astra.aaa
сервер должен быть введен в домен
сервер имеет постоянный IP-адрес, например, 192.168.1.23
метка безопасности иерархического уровня назначается 3.
метка безопасности совокупности категорий в шестнадцатеричном формате назначается F, в двоичном формате это 1111 в первых четырёх разрядах битовой маски, что включает в себя первые четыре категории.
Включение МРД#
настроить параметры, файле /etc/postgresql/15/main/postgresql.conf:
ac_ignore_socket_maclabel = false
перезапустить службу баз данных:
sudo systemctl restart postgresql
Запуск Psql#
запустите терминальный клиент СУБД Postgres:
sudo -u postgres psql
Предупреждение
Если после выполнения команды отображается ошибка «could not change directory to «/home/»: Отказано в доступе» и не появляется приглашение командной строки postgres=#, необходимо вместо su postgres использовать конструкцию su - postgres. Если приглашение postgres=# появилось, то сообщение об ошибке можно проигнорировать.
Если приглашение postgres=# не появляется, то вероятнее всего ОС Astra Linux Special Edition используется в более защищенном режиме, например, «Смоленск». В таком случае нужно для пользователя postgres назначить высокий уровень целостности:
sudo pdpl-user -i 63 postgres
Создание пользователя#
если пользователь не был создан выполните команду:
postgres=# CREATE USER "user-01@astra.aaa" WITH LOGIN;
Создание новой базы данных#
Пункт 1#
подключитесь к системной БД:
postgres=# \connect postgres
результат
You are now connected to database "postgres" as user "postgres".
Пункт 2#
задайте правила мандатного доступа доступа к кластеру:
postgres=# MAC CCR ON CLUSTER IS OFF;
postgres=# MAC LABEL ON CLUSTER IS '{3,F}';
результат
MAC CCR
MAC LABEL
Пункт 3#
удалите БД демонстрационного примера:
postgres=# DROP DATABASE IF EXISTS demoprimer;
результат
ЗАМЕЧАНИЕ: база данных "demoprimer" не существует, пропускается
DROP DATABASE
Пункт 4#
создайте пустую БД демонстрационного примера:
postgres=# CREATE DATABASE demoprimer;
результат
CREATE DATABASE
Создание объектов базы данных#
Создание схемы, настройка#
Пункт 1#
подключитесь к БД демонстрационного примера:
postgres=# \connect demoprimer
результат
You are now connected to database "demoprimer" as user "postgres".
Пункт 2#
задайте правила мандатного доступа доступа к базе данных:
demoprimer=# MAC CCR ON DATABASE demoprimer IS OFF;
demoprimer=# MAC LABEL ON DATABASE demoprimer IS '{3,F}';
результат
MAC CCR
MAC LABEL
Пункт 3#
создайте схему:
demoprimer=# CREATE SCHEMA s1;
результат
CREATE SCHEMA
Пункт 4#
задайте правила мандатного доступа доступа к схеме:
demoprimer=# MAC CCR ON SCHEMA s1 IS OFF;
demoprimer=# MAC LABEL ON SCHEMA s1 IS '{3,F}';
результат
MAC CCR
MAC LABEL
Пункт 5#
задайте правила ролевого доступа к схеме:
demoprimer=# GRANT USAGE ON SCHEMA s1 TO PUBLIC;
результат
GRANT
Пункт 6#
задайте расширение для работы с уникальными идентификаторами:
demoprimer=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA s1;
результат
CREATE EXTENSION
Создание таблицы, настройка#
Пункт 1#
создайте таблицу:
demoprimer=# CREATE TABLE s1.t1 (
id uuid DEFAULT s1.uuid_generate_v4() NOT NULL,
insert_user name,
insert_date timestamp,
classificator name
) WITH (
MACS=TRUE -- Создание классификационных меток для записей
);
результат
CREATE TABLE
Пункт 2#
задайте правила мандатного доступа доступа к таблице:
demoprimer=# MAC CCR ON TABLE s1.t1 IS OFF;
demoprimer=# MAC LABEL ON TABLE s1.t1 IS '{3,F}';
результат
MAC CCR
MAC LABEL
Примечание
для проверки информации от таблице и её метке введите команду:
demoprimer=# \dS+ s1.t1
результат
Table "s1.t1"
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
---------------+-----------------------------+-----------+----------+-----------------------+---------+-------------+--------------+-------------
id | uuid | | not null | s1.uuid_generate_v4() | plain | | |
insert_user | name | | | | plain | | |
insert_date | timestamp without time zone | | | | plain | | |
classificator | name | | | | plain | | |
Access method: heap
Maclabel: {3,F}
Has MACs: yes
MAC CCR: no
Пункт 3#
задайте правила ролевого доступа к таблице:
demoprimer=# GRANT ALL PRIVILEGES ON s1.t1 TO PUBLIC;
результат
GRANT
Примечание
для получения текущей метки сессии необходимо ввести команду:
SHOW ac_session_maclabel;
результат:
ac_session_maclabel
---------------------
{0,0}
(1 row)
дополнительный вариант:
demoprimer=# SELECT session_maclabel;
результат:
session_maclabel
------------------
{0,0}
(1 row)