|
|||||||
Смысл флага CCR в Postgresql и целостность мандатных атрибутов кластера баз данных в Astra Linux
Время создания: 11.06.2024 16:25
Текстовые метки: astra, астра, linux, мандатные, права, доступ, CCR, флаг, настройка, PostgreSQL, postgres, SQL
Раздел: Компьютер - Linux - Дистрибутив Astra Linux
Запись: xintrea/mytetra_syncro/master/base/1718112302dusp24aegq/text.html на raw.github.com
|
|||||||
|
|||||||
База данных Postgresql, входящая в состав Astra Linux SE, имеет свой собственный механизм обеспечения безопасности, в том числе, и мандатной. Этот механизм, конечно же, интегрирован в общую системы защиты ОС, но, как говорится в известном анекдоте, «Есть нюансы». Дело в том, что механизм МРД в базе, работая по правильной модели, реализован совсем по-другому. В postgresql.conf более 10 параметров, комбинация которых определяет, как будет вести себя база и работать МРД . А ведь еще есть ссылочная целостность между таблицами с разными атрибутами, есть вызываемые функции и триггеры, принадлежащие одним пользователям , обращающиеся к объектам других юзеров с разными метками и категориями! Фразу «читайте документация» я пропускаю по причине, как говорят юристы, ничтожности. Только пытливый ум, коллегии, и традиционный бубен. Немного похвастаюсь, что уже почти готов 3-х дневный курс «Advanced PostgreSQL для разработчика и безопасника» , одну главу выложу в нашей традиционной рублике. Поговорим про контейнерный признак CCR, который, казалось бы, так похож на признак CCNR в ОС! Целостность мандатных атрибутов кластера баз данных и тайный смысл флага CCR в PostgresqlВ СУБД PostgreSQL ДП-модель накладывает ограничение на мандатную метку конфиденциальности объекта: метка объекта не может превышать метку контейнера, в котором он содержится Согласно ДП-модели в части реализации мандатного управления доступом дополнительно к мандатной метке конфиденциальности вводится понятие объектов-контейнеров (объектов, которые могут содержать другие объекты). Для задания способа доступа к объектам внутри контейнеров используется мандатный признак CCR (Container Clearance Required). В случае когда он установлен, доступ к контейнеру и его содержимому определяется его мандатной меткой конфиденциальности, в противном случае доступ к содержимому разрешен без учета уровня конфиденциальности контейнера. В качестве главного контейнера выбрано табличное пространство pg_global, которое создается одно на кластер базы данных. Таким образом, кластер является совокупностью ролей, баз данных и табличных пространств. При создании мандатная метка объекта БД устанавливается равной текущей мандатной метке создавшего его пользователя, мандатный признак CCR при этом выставляется значение ON. С одной стороны, метка CCR «обратно» аналогична метке CCNR в ОС, но есть некие отличие. Проведем исследование. Для просмотра мандатного признака CCR кластера может быть использована следующая команда: sudo -u postgres psql mtest mtest=# SELECT cluster_macccr; cluster_macccr Таким образом мы видим, что метка выставлена по умолчанию Задаем мандатный уровень для всего кластера БД: MAC LABEL ON CLUSTER IS '{3,0}'; Что идентично: MAC LABEL ON TABLESPACE pg_global IS '{3,0}'; Команда проходит без ошибок, не смотря что в контейнере, то есть, в БД, существуют объекты (хотя бы базы со схемами, созданные по умолчанию). Важно! В ОС у нас аналогичная команда до снятым флагом CCNR на директории, была бы невозможна, так как в контейнере без флага CCNR могут находиться только объекты с равными мандатными атрибутами. Обратите внимание, что , даже создавая в папке файл от пользователя, вошедшего под 0-м уровнем, в директории без CCNR объекты автоматом получат уровень контейнера! (для этого пользователь должен быть, естественно, root, или обладать соответствующими parsec-привилегиями. Если в этой ситуации директория будет иметь флаг, то объекты создадутся с уровнем, соответствующим сессии пользователя. Никакого нарушения модели тут нет, так обычный непривилегированный пользователь на меньшем уровне даже не увидит папку без флага CCNR, если ее уровень больше: Создадим в кластере (наш контейнер) объект – базу данных. postgres=# CREATE DATABASE ccrtest; CREATE DATABASE Посмотрим ее maclabel,- он будет равен «0» Дадим ей уровни конфиденциальности: sudo -u postgres psql ccrtest; ccrtest=# MAC LABEL ON DATABASE ccrtest IS '{3,0}'; MAC LABEL ccrtest=# MAC LABEL ON DATABASE ccrtest IS '{2,0}'; MAC LABEL Важно! Изменять ССR для базы можно только будучи подсоединенным к этой базе! Как видите, мы можем понижать в контейнере уровень объектов. Теперь изменим метку CCR контейнера (кластера): ccrtest=# MAC CCR ON CLUSTER IS ON; MAC CCR ccrtest=# Операция прошла без ошибок! Там в чем же разница, если мы можем создавать объекты меньшего уровня и с меткой, и без? Смотрим определение CCR из документации: «В случае когда CCR установлен, доступ к контейнеру и его содержимому определяется его мандатной меткой конфиденциальности, в противном случае доступ к содержимому разрешен без учета уровня конфиденциальности контейнера». Посмотрим на примере, что это значит: Наша свежесозданная база данных ccrtest имеет мандатный атрибут «3» и установленный по умолчанию флаг CCR: MAC LABEL ON DATABASE ccrtest IS '{3,0}'; MAC CCR ON DATABASE ccrtest ccrtest IS ON; Создадим непривилегированного пользователя c именем как и у пользователя ОС, имеющего нулевой уровень: CREATE USER u0 WITH password 'qwerty'; И пытаемся залогиниться к базе: root@web:~# psql -h localhost ccrtest u1 Пароль пользователя u1: psql: СБОЙ: база данных "ccrtest" не существует Ошибка! Пользователь меньшими атрибутами не может войти в БД (таблицу, и т д, если установлен флаг CCR). Снимем его с базы данных и проверим возможность подключения: MAC CCR ON DATABASE ccrtest IS off; root@web:~# psql -h localhost ccrtest u1 Пароль пользователя u1: psql: СБОЙ: permission denied for cluster, insufficient MAC attributes Опять возникает ошибка, но по другой причине – у вышестоящего объекта (кластера) мы флаг оставили. Убираем флаг с кластера и пытаемся войти еще раз и видим, что аутентификация прошла успешно: ccrtest=# MAC CCR ON CLUSTER IS off; root@web:~# psql -h localhost ccrtest u1 Пароль пользователя u1: psql (9.6.10)SSL-соединение (протокол: TLSv1.2, шифр: ECDHE-RSA-AES256-GCM-SHA384, бит: 256, сжат Введите "help", чтобы получить справку. Для вывода информации о соблюдении ДП-модели между объектами-контейнерами и находящимися в них объектами реализована SQL-функция check_mac_integrity, которая выводит информацию в следующем виде: – objid — Идентификатор объекта; – classid — Идентификатор класса объекта; – cobjid — Идентификатор контейнера, содержащего объект; – cclassid — Идентификатор класса контейнера, содержащего объект; – status — Результат проверки. Может принимать следующие значения: OK(модель соблюдается для объекта и контейнера) и FAIL(модель не соблюдается для объекта и контейнера). |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|