Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 10 Следующий »

Данная статья применима к:

  • 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. В качестве базы данных (БД) использовалась предоставляемая разработчиками стандартная тестовая БД dvdrental, описанная в статье PostgreSQL Sample ..Database. Особенностью этой БД является то, что она принадлежит пользователю postgresql, поэтому примеры далее приведены с использованием привилегий этого пользователя.

Особенностью установки СУБД в данном случае является назначение пароля создаваемому при установке СУБД служебному пользователю postgresql. Команда для установки пароля:

sudo -iu postgres psql -c "ALTER ROLE postgres WITH PASSWORD '12345678';"
Для создания тестовой БД в PostgreSQL:

  1. Загрузить архив с тестовой БД командой:

    Далее предполагается, что архив загружен в домашний каталог текущего пользователя.

  2. Распаковать архив:

    unzip dvdrental.zip
    В результате распаковки будет создан файл dvdrental.tar;

  3. Для удобства работы, чтобы не вводить каждый раз пароль, настроить права доступа, для чего создать файл .pgpass, содержащий сроки, задающие пароли доступа. Каждая строка имеет вид:

    <имя_или_IP-адрес_хоста>:<IP-порт>:<имя_БД>:<имя_пользователя>:<пароль_пользователя>

    Например:

    localhost:5432:dvdrental:postgres:пароль

    Файл должен иметь маску прав доступа 600, иначе он будет игнорироваться. Создать файл можно с помощью любого текстового редактора, или, например, командами:

    touch ~/.pgpass
    chmod 600 ~/.pgpass
    echo "localhost:5432:*:postgres:12345678" > ~/.pgpass
    Для примера использован пароль 12345678. Допускается использование метасимвола "*" для обозначения любого значения;

  4. Создать базу данных с именем dvdrental:

    psql -U postgres -h localhost -c 'CREATE DATABASE dvdrental;'

  5. Предоставить пользователю postgresql доступ к распакованной БД:

    setfacl -m u:postgres:rx "$HOME"
    В данном случае предоставляется доступ на поиск файлов в домашнем каталоге. Это действие может не требоваться в ранних обновлениях Astra Linux.

  6. Загрузить архив тестовой БД в БД PostgreSQL. Команда:

    pg_restore -U postgres -h localhost -d dvdrental dvdrental.tar
    Указанная команда фактически является командой восстановления БД из архива.

Создание резервной копии базы данных

Для сохранения резервных копий БД в основном используются две команды:

  • pg_dump - выгрузка указанной БД;
  • pg_dumpall - выгрузка всех БД и метаданных.

Сохранение может выполняться в текстовом формате или в формате архива.

Создание резервной копии базы данных от имени пользователя postgresql

В простейшем случае создание резервных копий можно создавать от имени создаваемого при установке СУБД служебного пользователя postgresql. Более правильным вариантом является создание специального пользователя с правом только чтения.
Примеры команд, выполняемых от имени пользователя postgresql:

  1. Сохранение всех БД в текстовом формате:

    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"

    Эти сообщения не являются сообщениями об ошибках, и являются информацией о найденной максимальной классификационной метке сохраняемых записей.

  2. Сохранения тестовой БД dvdrental в формате архива:

    pg_dump -h localhost -U postgres -f dvdrental_dump.tar -F tar

Создание специального пользователя для создания резервных копий базы данных

Для примера в качестве специального пользователя используется текущий пользователь (имя текущего пользователя находится в переменной окружения USER, и подставляется вместо лексемы $USER). 

  1. Зарегистрировать пользователя в БД:
    sudo -u postgres psql -c "CREATE ROLE $USER LOGIN CREATEDB;"

  2. Предоставить пользователю права на чтение баз данных:
    sudo -u postgres psql -c "GRANT SELECT  ON ALL TABLES    IN SCHEMA public TO $USER;"
    sudo -u postgres psql -c "GRANT SELECT  ON ALL SEQUENCES IN SCHEMA public TO $USER;"
    sudo -u postgres psql -c "GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO $USER;"

  3. Далее выгрузка баз данных должна выполняться от имени текущего пользователя без использования sudo и служебного пользователя postgres:


Загрузка резервной копии базы данных

Перед загрузкой резервной копии содержимое БД должно быть очищено. Сделать это можно удалив и заново создав БД:

psql -U postgres -h localhost -c 'DROP DATABASE dvdrental;'
psql -U postgres -h localhost -c 'CREATE DATABASE dvdrental;'

Загрузка БД, сохраненной в текстовом формате:

psql -U postgres -h localhost dvdrental < dvdrental_dump
Загрузка БД, сохраненной в формате архива:
pg_restore -U postgres -h localhost -d dvdrental dvdrental_dump
Подробная справка по всем командам доступна в справочной системе MAN.

Особенности работы с данными, имеющими ненулевые классификационные метки

Защищенная СУБД PostgreSQL, применяемая в Astra Linux Special Edition, поддерживает управление доступом к записям БД с учетом классификационных меток записей (см. соответствующую документацию на изделия, например, Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7). Эксплуатационная и дополнительная документация).
При выгрузке копий данных, хранящихся в защищенной БД (команды pg_dump, pg_dumpall, psql COPY), выполняется процедура аккумулирования классификационной метки. При этом классификационная метка для файла резервной копии определяется как максимальная классификационная метка всех выгружаемых объектов данных, и по завершении выгрузки, выполняется попытка установки полученной классификационной метки на файл с выгруженными данными. Для назначения метки у пользователя, выполняющего команду pg_dump, должно иметься PARSEC-привилегия PARSEC_CAP_CHMAC, позволяющая изменять классификационные метки файловых объектов (см. Привилегии PARSEC), а также каталог, в котором сохраняется файл должен иметь возможность содержать файлы с такой классификационной меткой. Установка классификационной метки на файлы, создающиеся при выгрузке данных с помощью команд pg_dump и pg_dumpall, требуется не строго, т.е. если метку не удалось установить, то файл остается с классификационной меткой, унаследованной от пользователя, запустившего команду. Команда psql COPY TO ФАЙЛ работает аналогично в случаях, когда указывается файл вывода, за исключением того, что запись данных осуществляется в файл на сервере, а не на клиенте. Метка на файле так же требуется не строго, и если метку не удалось установить, то она наследуется от процесса - в данном случае от процесса postgres. Т.е. классификационная метка в таком случае зависит от метки процесса PostgreSQL (задается параметром PDPLabel в юните systemd службы postgresql). Отдельно обрабатывается команда psql TO SDOUT. При выполнении этой команды (аналог команды \copy из psql) установка классификационной метки не выполняется.

Уровень целостности выгружаемых данных наследуется либо от клиента (команды pg_dump, pg_dumpall, \copy в psql), либо от сервера (команда COPY TO ФАЙЛ).

В соответствии с общими правилями МРД (см. Метка безопасности: структура и состав) каталог для хранения резервных копий должен иметь классификационную метку не меньшую, чем  максимальная классификационная метка выгружаемых данных, а если в каталоге предполагается хранить резервные копии с разными классификационными метками - то в метке безопасности каталога дожен использоваться флаг ccnr. Как пример, создать каталог с нужной меткой безопасности можно следующими командами:

  1. Создать сам каталог, например:

    sudo mkdir /var/backups-psql

  2. Присвоить созданному каталогу нужную метку безопасности, например:

    sudo pdpl-file 3:63:-1:ccnr  /var/backups-psql

При этом для того, чтобы обеспечить достаточные права для назначения классификационной метки файлу с резервной копией команды выгрузки можно выполнять от sudo, или назначить PARSEC-привилегию PARSEC_CAP_CHMAC пользователю-администратору СУБД. Например:

sudo usercaps -m 0x8 postgres

Назначение привилегии пользователю начнет действовать после следующего входа этого пользователя в пользовательскую сессию.

  • Нет меток