Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
Тестовый пример
При написании статьи использовалась Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленной СУБД PostgreSQL 11 (далее - СУБД). Установка СУБД выполнялась для использования с системой 1С по инструкции из статьи Установка и настройка сервера 1С v8.3.xx на ОС Astra Linux. Особенностью установки данном случае является назначение пароля служебному пользователю postgresql, создаваемому при установке СУБД. Команда для установки пароля:
В качестве базы данных (БД) далее используется предоставляемая разработчиками СУБД стандартная тестовая БД dvdrental, описанная в статье PostgreSQL Sample ..Database. Особенностью этой БД является то, что она принадлежит пользователю postgresql, поэтому примеры далее приведены с использованием привилегий этого пользователя. Отдельно приводятся рекомендации по созданию и настройке прав выделенного пользователя для выполнения операций резервного копирования и восстановления.
Для создания тестовой БД в PostgreSQL:
Загрузить архив с тестовой БД командой:
Далее предполагается, что архив загружен в текущий рабочий каталог.Распаковать архив:
unzip dvdrental.zipВ результате распаковки в текущем рабочем каталоге будет создан файл dvdrental.tar;Для удобства работы, чтобы не вводить каждый раз пароль, настроить права доступа, для чего создать файл .pgpass, содержащий сроки, задающие пароли доступа. Каждая строка имеет вид:
<имя_или_IP-адрес_хоста>:<IP-порт>:<имя_БД>:<имя_пользователя>:<пароль_пользователя>
Например:
localhost:5432:dvdrental:postgres:пароль
Файл должен иметь маску прав доступа 600, иначе он будет игнорироваться. Создать файл можно с помощью любого текстового редактора, или, например, командами:
touch ~/.pgpassДля примера использован пароль 12345678. Допускается использование метасимвола "*" для обозначения любого значения;
chmod 600 ~/.pgpass
echo "localhost:5432:*:postgres:12345678" > ~/.pgpassСоздать базу данных с именем dvdrental:
psql -U postgres -h localhost -c 'CREATE DATABASE dvdrental;'Предоставить пользователю postgresql доступ к распакованному файлу с дампом БД:
setfacl -m u:postgres:rx "$HOME"Команда предоставляется доступ на поиск файлов в домашнем каталоге. Это действие может не требоваться в ранних обновлениях Astra Linux.Загрузить дамп тестовой БД в СУБД. Команда:
pg_restore -U postgres -h localhost -d dvdrental dvdrental.tarУказанная команда фактически является командой восстановления БД из архива.
Создание резервной копии базы данных
Для сохранения резервных копий БД в основном используются две команды:
- pg_dump - выгрузка указанной БД;
- pg_dumpall - выгрузка всех БД и метаданных.
Сохранение может выполняться в текстовом формате или в формате архива (опция -F).
При работе с несколькими кластерами (группами баз данных), расположенными на одной машине, для выбора кластера используется номер порта (опция -p).
Создание резервной копии базы данных от имени служебного пользователя postgresql
В простейшем случае создание резервных копий можно создавать от имени создаваемого при установке СУБД служебного пользователя postgresql. Более правильным вариантом является создание специального пользователя с правом только чтения (см. далее).
Примеры команд, выполняемых от имени пользователя postgresql:
Сохранение всех БД в текстовом формате:
pg_dumpall -h localhost -U postgres -f postgresql_dumpПри работе с защищенной версией СУБД PostgreSQL (в Astra Linux Special Edition) при выгрузке БД могут выдаваться сообщения вида:
pg_dump: obtained maximum maclabel {0,0} of data in table "actor"Эти сообщения не являются сообщениями об ошибках, и являются информацией о найденной максимальной классификационной метке сохраняемых записей.
Сохранения тестовой БД dvdrental в формате архива:
pg_dump -h localhost -U postgres -f dvdrental_dump.tar -F tar
Создание специального пользователя для выгрузки резервных копий базы данных
Для примера в качестве специального пользователя используется текущий пользователь (во время работы в пользовательской сессии имя текущего пользователя находится в переменной окружения USER, и в командной строке подставляется вместо лексемы $USER).
Зарегистрировать пользователя в БД:
sudo -u postgres psql -c "CREATE ROLE $USER LOGIN CREATEDB;"- При работе с защищенной СУБД в Astra Linux Special Edition:
Предоставить служебному пользователю postgresql права доступа к базе данных классификационных меток пользователей (подробнее см. Списки управления доступом к файловым объектам (ACL) в Astra Linux):
sudo setfacl -d -m u:postgres:r /etc/parsec/macdb
sudo setfacl -m u:postgres:r /etc/parsec/macdb/*Создать классификационную метку пользователя, даже если она нулевая, если она не была создана ранее:
sudo pdpl-user -l 0:0 $USER
Предоставить пользователю права на чтение баз данных (таблиц и индексов):
sudo -u postgres psql -d dvdrental -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO $USER;"
sudo -u postgres psql -d dvdrental -c "GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO $USER;"Если предполагается, что в будущем в базу данных будут добавляться новые таблицы, то можно сразу определить права доступа, разрешающие читать новые таблицы и индексы:
sudo -u postgres psql -d dvdrental -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO $USER;"
sudo -u postgres psql -d dvdrental -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO $USER;"Далее выгрузка баз данных должна выполняться от имени текущего пользователя без использования sudo и служебного пользователя postgres:
pg_dump -d dvdrental -f out -F tar
Загрузка резервной копии базы данных
Перед загрузкой резервной копии содержимое БД должно быть очищено. Сделать это можно удалив и заново создав БД:
psql -U postgres -h localhost -c 'CREATE DATABASE dvdrental;'
Загрузка БД, сохраненной в текстовом формате:
Особенности выгрузки данных, имеющих ненулевые классификационные метки
Защищенная СУБД PostgreSQL, применяемая в Astra Linux Special Edition, поддерживает управление доступом к записям БД с учетом классификационных меток записей (см. соответствующую документацию на изделия, например, Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7). Эксплуатационная и дополнительная документация).
В соответствии с общими правилами МРД (см. Метка безопасности: структура и состав):
- каталог, в котором будет размещен файл выгрузки, должен иметь метку безопасности не меньшую, чем максимальная метка выгружаемых данных. Если в каталоге предполагается хранить резервные копии с разными метками, то в метке безопасности каталога должны использоваться флаги ccnr и irelax. Уровень целостности выгружаемых данных наследуется либо от клиента (команды pg_dump, pg_dumpall, \copy в psql), либо от сервера (команда COPY TO ФАЙЛ).
- пользователь, осуществляющий выгрузку данных, должен иметь:
- право выполнять запись в каталог, предназначенный для выгрузки;
- право открывать сессии с классификационной меткой не ниже максимальной метки выгружаемых данных;
- привилегию PARSEC —PARSEC_CAP_CHMAC;
- выгрузка данных должна выполняться из пользовательской сессии с классификационной меткой не ниже максимальной метки выгружаемых данных;
Создать сам каталог, например:
sudo mkdir /var/backups-psqlПрисвоить созданному каталогу максимальную метку безопасности, например:
sudo pdpl-file 3:63:-1:ccnr,irelax /var/backups-psql
При этом для того, чтобы обеспечить достаточные права для назначения классификационной метки файлу с резервной копией команды выгрузки можно выполнять от sudo, или назначить PARSEC-привилегию PARSEC_CAP_CHMAC пользователю-администратору СУБД. Например:
Назначение привилегии пользователю полностью начинает действовать после следующего входа этого пользователя в пользовательскую сессию. Для того, чтобы оперативно включить действие назначенной привилегии в консоли можно перезапустить консоль следующей командой (потребуется ввести пароль пользователя):