31.2. Проверки целостности

31.2.1. Обзор

В Postgres Pro Standard входит утилита pg_integrity_check, предоставляющая следующие возможности для проверки целостности:

  • Подсчёт и проверка контрольных сумм по требованию

  • Встроенная проверка контрольных сумм при запуске сервера

pg_integrity_check может отслеживать контрольные суммы неизменяемых и дополнительных файлов, а также таблиц системных каталогов.

31.2.1.1. Неизменяемые файлы

К отслеживаемым неизменяемым файлам относятся исполняемые файлы, библиотеки и другие файлы, которые никогда не должны изменяться. Контрольные суммы таких файлов определяются в файле конфигурации /opt/pgpro/std-15/share/security/system.conf.

Файл system.conf включён в состав дистрибутива Postgres Pro Standard. Для каждого экземпляра Postgres Pro Standard существует один отдельный файл system.conf. Каждая строка в system.conf соответствует одному отслеживаемому объекту и содержит два поля: контрольную сумму, состоящую из 40 шестнадцатеричных цифр, и относительный путь к файлу. Эти значения разделяются тремя символами: пробел, минус, пробел. Контрольные суммы вычисляются и записываются в этот файл во время установки Postgres Pro Standard. При их расчёте учитывается и содержимое файла, и его атрибуты. Поэтому, например, при изменении прав доступа к файлу его контрольная сумма изменится.

31.2.1.2. Дополнительные файлы

Дополнительными файлами считаются файлы, которые могут быть изменены администратором баз данных. Контрольные суммы дополнительных файлов сохраняются в файлах конфигурации, находящихся в каталоге share/security. Для каждого кластера необходимо иметь отдельный файл конфигурации для дополнительных файлов. При этом действует следующее соглашение об именовании: путь к каталогу данных кластера (PGDATA), в котором косая черта заменяется подчёркиванием, дополняется окончанием .user.conf. Например, для кластера с каталогом данных /var/lib/pgpro/std-15/data файл конфигурации будет называться _var_lib_pgpro_std-15_data.user.conf.

Каждая строка в файле конфигурации соответствует одному отслеживаемому объекту и содержит два поля: контрольную сумму, состоящую из 40 шестнадцатеричных цифр, и относительный путь к файлу. Поля разделяются тремя символами: пробел, минус, пробел.

При расчёте контрольных сумм учитывается и содержимое, и атрибуты файлов. Поэтому, например, при изменении прав доступа к файлу его контрольная сумма изменится.

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

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

  2. В созданном файле конфигурации перечислить все отслеживаемые дополнительные файлы. В качестве контрольной суммы можно задать любые 40 шестнадцатеричных цифр, например нули.

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

pg_integrity_check -u -o -D /var/lib/pgpro/std-15/data

Примечание

Администратор также может, запустив эту команду, получить примерный файл конфигурации, а затем отредактировать его должным образом.

31.2.1.3. Таблицы системных каталогов

Таблицы системных каталогов представляют собой избранный набор данных, относящихся к экземпляру Postgres Pro Standard. Управление контрольными суммами таблиц системных каталогов осуществляется с помощью соответствующих файлов конфигурации для каждой базы данных в кластере. Проверку целостности таблиц системных каталогов можно настроить для нескольких баз данных путём создания отдельных файлов конфигурации с конкретными значениями контрольных сумм.

Каждая строка в файле конфигурации соответствует одному отслеживаемому объекту и содержит два поля: контрольную сумму, состоящую из 40 шестнадцатеричных цифр, и относительный путь к файлу. Поля разделяются тремя символами: пробел, минус, пробел.

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

  1. Создайте файл конфигурации для выбранной базы данных. Например, имя_базы_данных-catalog.conf.

  2. В созданном файле конфигурации перечислить SQL-запросы, которые будут возвращать отслеживаемые данные. В качестве контрольной суммы можно задать любые 40 шестнадцатеричных цифр, например нули.

  3. Выполнить следующую команду, чтобы пересчитать контрольные суммы, указав параметры подключения к вашей базе данных:

pg_integrity_check -c -o -C полный-путь-к-файлу-конфигурации -d postgres -h localhost -p 5432 -U postgres

Чтобы проверить таблицы системного каталога, запустите pg_integrity_check для каждой базы данных, подлежащей проверке целостности.

Примечание

Администратор также может, запустив эту команду, получить примерный файл конфигурации, а затем отредактировать его должным образом.

31.2.2. Проверка целостности при запуске сервера

Контрольные суммы неизменяемых файлов всегда проверяются при запуске сервера Postgres Pro Standard. Если запуск сервера остановлен из-за несовпадения контрольных сумм, администратор должен разобраться в проблеме, разрешить её и перезапустить сервер.

Таблицы системных каталогов и дополнительные файлы при запуске сервера не проверяются. Вы можете проверить их вручную, выполнив pg_integrity_check после запуска сервера.

31.2.3. Планирование проверок целостности

Если вы используете систему семейства Linux, вы можете запланировать периодические проверки целостности, используя демон cron. Для этого измените файл /etc/crontab, добавив в него строки, определяющие частоту запуска утилиты pg_integrity_check. Файл /etc/crontab представляет собой системный файл, содержащий все инструкции для демона cron. Чтобы получить подробное описание формата файла crontab в вашей системе на базе Linux, выполните команду:

man 5 crontab

Примеры

Следующий пример иллюстрирует организацию проверок целостности в операционной системе Rosa SX:

# Каталог данных кластера
PGDATA = /var/lib/pgpro/std-15/data
# Файл журнала pg_integrity_check
LOG = /opt/pgpro/std-15/share/security/log
# Проверять неизменяемые файлы ежедневно в 00:05
5 0 * * *       root   /opt/pgpro/std-15/bin/pg_integrity_check -s >> $LOG
# Запускать проверки целостности в 14:15 в первый день месяца
15 14 1 * *     root   /opt/pgpro/std-15/bin/pg_integrity_check -s >> $LOG
# Запускать проверки целостности в 22.00 по выходным
0 22 * * 1-5    root   /opt/pgpro/std-15/bin/pg_integrity_check -s >> $LOG
#  Запускать проверки целостности ежедневно в 00:23, 2:23, 4:23 ...
23 0-23/2 * * * root   /opt/pgpro/std-15/bin/pg_integrity_check -s >> $LOG
#  Запускать проверки целостности в 4:05 по воскресеньям
5 4 * * sun     root   /opt/pgpro/std-15/bin/pg_integrity_check -s >> $LOG