Мандатное управление доступом(МРД) и его настройка#

Мандатное управление доступом МРД#

Начиная с очередного обновления ОС СН 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.

../../../_images/link3.jpg

Рисунок 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)