Добрый день. Возник вопрос по поводу создания резервной копии и восстановления БД.
Есть пользователь ОС petrov с мин. и макс. метками 0 и 2 соответственно, и некая БД. БД создается командой
createdb -U postgresql somedbname
Изначально на БД стоит 0 метка, владелец postgres. После работы с БД от имени petrov делается архивация командой
pg_dump -O -F t -f /somepath/archfile somedbname
Если посмотреть содержимое архива, можно заметить, что так же экспортируются и мандатные метки (команды MAC LABEL ON …). Ключ —no-security-labels для pg_dump ничего не меняет.
Затем восстанавливаем архив командами
createdb temp
pg_restore -F t -d temp /somepath/archfile
dropdb somedbname
createdb -T temp somedbname
Все отрабатывает успешно, но теперь somedbname получает максимальную метку от petrov и владельцем базы становится petrov, что при следующих архивациях вышеуказанной командой pg_dump выгружает метку 2 для всех объектов. Из-за подобных архиваций не получается восстановить БД, т.к. вышеуказанная команда pg_restore выдает следующую ошибку:
pg_restore: [архиватор (БД)] Ошибка при обработке оглавления:
pg_restore: [архиватор (БД)] Ошибка из записи оглавления 2096; 1262 16579 MAC LABEL DATABASE somedbname petrov
pg_restore: [архиватор (БД)] could not execute query: ОШИБКА: Вы не можете назначить мандатную метку с таким значением
Выполнялась команда: MAC LABEL ON DATABASE CURRENT_CATALOG IS ‘{2,0}’;
Как избежать такой ошибки?
Дополнительная информация:
Astra Linux SE 1.5
PostgreSQL 9.4
Версия модели защиты БД: DP-1
Все действия выполняются в сессии с уровнем 0.
Перед архивацией можно снижать метку на 0, команда
MAC LABEL ON DATABASE CURRENT_CATALOG IS ‘{0,0}’;
срабатывает успешно, но больше напоминает обход проблемы, чем решение.
Необходимые привилегии установлены
usercaps petrov
——————-
linux-привилегии:
все флаги сброшены
——————
PARSEC-привилегии:
2 parsec_cap_setmac
3 parsec_cap_chmac
8 parsec_cap_priv_sock
Настройки:
cat /etc/postgresql/9.4/main/pg_hba.conf
local all postgres peer map=admins
local all all peer
host all all 127.0.0.1/32 pam
cat /etc/postgresql/9.4/main/pg_ident.conf
admins root postgres
admins postgres postgres
UPD:
parsec-привилегии установлены для пользователя. Запускал процесс с привилегиями как execaps -c 0x50c — myprocess, не помогает, равно как и не помогает запуск pg_restore с привилегиями. Установку привилегий проверял через pscaps, привилегии для процесса успешно устанавливаются.
Ответ в дополнении к вопросу.
parsec-привилегии установлены для пользователя или процесса?