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

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

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

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

  • 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, создаваемому при установке СУБД. Команда для установки пароля:

sudo -iu postgres psql -c "ALTER ROLE postgres WITH PASSWORD '<пароль>';"
Подробнее про использование паролей см. в статье Аутентификация в СУБД PostgreSQL.

В качестве базы данных (БД) далее используется предоставляемая разработчиками СУБД  стандартная тестовая БД dvdrental, описанная в статье PostgreSQL Sample ..Database. Особенностью этой БД является то, что она принадлежит пользователю postgresql, поэтому примеры далее приведены с использованием привилегий этого пользователя. Отдельно приводятся рекомендации по созданию и настройке прав выделенного пользователя для выполнения операций резервного копирования и восстановления.

Список реально использующихся баз данных можно получить запустив командную оболочку postgresql и выполнив команду \l, например:

sudo -iu postgres psql

psql (15.4 (Debian 15.4-astra.se2+ci1))
Введите "help", чтобы получить справку.

postgres=# \l
                                                         Список баз данных
      Имя      |     Владелец      | Кодировка | LC_COLLATE  |  LC_CTYPE   | локаль ICU | Провайдер локали |     Права доступа     
---------------+-------------------+-----------+-------------+-------------+------------+------------------+-----------------------
 postgres      | postgres          | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 |            | libc             | 
 template0     | postgres          | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 |            | libc             | =c/postgres          +
               |                   |           |             |             |            |                  | postgres=CTc/postgres
 template1     | postgres          | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 |            | libc             | =c/postgres          +
               |                   |           |             |             |            |                  | postgres=CTc/postgres
 template_rbac | pg_database_admin | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 |            | libc             | 
(4 строки)


Для создания тестовой БД в PostgreSQL:

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

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

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

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

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

    1. Создать файл .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. Загрузить дамп тестовой БД в СУБД. Команда:

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

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

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

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

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

При работе с несколькими кластерами (группами баз данных), расположенными на одной машине, для выбора кластера используется номер порта (опция -p).

Создание резервной копии базы данных от имени служебного пользователя 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 dvdrental

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

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

  1. Зарегистрировать пользователя в БД:

    sudo -u postgres psql -c "CREATE ROLE $USER LOGIN CREATEDB;"

  2. При работе с защищенной СУБД в Astra Linux Special Edition:
    1. Предоставить служебному пользователю postgresql права доступа к базе данных классификационных меток пользователей (подробнее см. Списки управления доступом к файловым объектам (ACL) в Astra Linux):

      sudo setfacl -d -m u:postgres:r /etc/parsec/macdb
      sudo setfacl    -m u:postgres:r /etc/parsec/macdb/*

    2. Создать классификационную метку пользователя, если она не была создана ранее. Это действие требуется выполнить даже если метка пользователя нулевая. Пример создания нулевой метки:

      sudo pdpl-user -l 0:0 $USER

  3. Предоставить пользователю права на чтение баз данных (таблиц и индексов):

    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;"

  4. Если предполагается, что в будущем в базу данных будут добавляться новые таблицы, то можно сразу определить права доступа, разрешающие читать новые таблицы и индексы:

    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;"

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

    pg_dump -d dvdrental -f out -F tar dbrental

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

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

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). Эксплуатационная и дополнительная документация).

В соответствии с общими правилами МРД (см. Метка безопасности: структура и состав):

  • Каталог, в котором будет размещен файл выгрузки, должен иметь метку безопасности не меньшую, чем максимальная метка выгружаемых данных. Если в каталоге предполагается хранить резервные копии с разными метками, то в метке безопасности каталога должны использоваться флаги ccnr и irelax. Уровень целостности выгружаемых данных наследуется либо от клиента (команды pg_dump, pg_dumpall, \copy в psql), либо от сервера (команда COPY TO ФАЙЛ).
  • Пользователь, осуществляющий выгрузку данных, должен иметь:
    • право выполнять запись в каталог, предназначенный для выгрузки;
    • право открывать сессии с классификационной меткой не ниже максимальной метки выгружаемых данных;
    • привилегию PARSEC —PARSEC_CAP_CHMAC.
  • Выгрузка данных должна выполняться из пользовательской сессии с классификационной меткой не ниже максимальной классификационной метки выгружаемых данных.

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

    sudo mkdir /var/backups-psql

  2. Присвоить созданному каталогу максимальную метку безопасности и флаги ccnr и irelax (см. Метка безопасности: структура и состав). Например:

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

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

sudo usercaps -m 0x8 postgres

Назначение привилегии пользователю полностью начинает действовать после следующего входа этого пользователя в пользовательскую сессию. Для того, чтобы оперативно включить действие назначенной привилегии в консоли можно перезапустить консоль следующей командой (потребуется ввести пароль пользователя):

exec su - $USER

  • Нет меток