31.2. Проверки целостности #
31.2.1. Обзор #
В Postgres Pro Enterprise входит утилита pg_integrity_check
, предоставляющая следующие возможности для проверки целостности:
Подсчёт и проверка контрольных сумм по требованию
Встроенная проверка контрольных сумм при запуске сервера
pg_integrity_check
может отслеживать контрольные суммы неизменяемых и дополнительных файлов, а также таблиц системных каталогов.
31.2.1.1. Неизменяемые файлы #
К отслеживаемым неизменяемым файлам относятся исполняемые файлы, библиотеки и другие файлы, которые никогда не должны изменяться. Контрольные суммы таких файлов определяются в файле конфигурации /opt/pgpro/ent-17/share/security/system.conf
.
Файл system.conf
включён в состав дистрибутива Postgres Pro Enterprise. Для каждого экземпляра Postgres Pro Enterprise существует один отдельный файл system.conf
. Каждая строка в system.conf
соответствует одному отслеживаемому объекту и содержит два поля: контрольную сумму, состоящую из 40 шестнадцатеричных цифр, и относительный путь к файлу. Эти значения разделяются тремя символами: пробел, минус, пробел. Контрольные суммы вычисляются и записываются в этот файл во время установки Postgres Pro Enterprise. При их расчёте учитывается и содержимое файла, и его атрибуты. Поэтому, например, при изменении прав доступа к файлу его контрольная сумма изменится.
31.2.1.2. Дополнительные файлы #
Дополнительными файлами считаются файлы, которые могут быть изменены администратором баз данных. Контрольные суммы дополнительных файлов сохраняются в файлах конфигурации, находящихся в каталоге share/security
. Для каждого кластера необходимо иметь отдельный файл конфигурации для дополнительных файлов. При этом действует следующее соглашение об именовании: путь к каталогу данных кластера (PGDATA
), в котором косая черта заменяется подчёркиванием, дополняется окончанием .user.conf
. Например, для кластера с каталогом данных /var/lib/pgpro/ent-17/data
файл конфигурации будет называться _var_lib_pgpro_ent-17_data.user.conf
.
Каждая строка в файле конфигурации соответствует одному отслеживаемому объекту и содержит два поля: контрольную сумму, состоящую из 40 шестнадцатеричных цифр, и относительный путь к файлу. Поля разделяются тремя символами: пробел, минус, пробел.
При расчёте контрольных сумм учитывается и содержимое, и атрибуты файлов. Поэтому, например, при изменении прав доступа к файлу его контрольная сумма изменится.
Чтобы настроить проверку контрольных сумм дополнительных файлов, администратор баз данных должен сделать следующее:
Создать файл конфигурации для каждого кластера, согласно описанному выше соглашению об именовании.
В созданном файле конфигурации перечислить все отслеживаемые дополнительные файлы. В качестве контрольной суммы можно задать любые 40 шестнадцатеричных цифр, например нули.
Выполнить следующую команду, чтобы пересчитать контрольные суммы, указав путь к каталогу данных вашего кластера:
pg_integrity_check -u -o -D /var/lib/pgpro/ent-17/data
Примечание
Администратор также может, запустив эту команду, получить примерный файл конфигурации, а затем отредактировать его должным образом.
31.2.1.3. Таблицы системных каталогов #
Таблицы системных каталогов представляют собой избранный набор данных, относящихся к экземпляру Postgres Pro Enterprise. Управление контрольными суммами таблиц системных каталогов осуществляется с помощью соответствующих файлов конфигурации для каждой базы данных в кластере. Проверку целостности таблиц системных каталогов можно настроить для нескольких баз данных путём создания отдельных файлов конфигурации с конкретными значениями контрольных сумм.
Каждая строка в файле конфигурации соответствует одному отслеживаемому объекту и содержит два поля: контрольную сумму, состоящую из 40 шестнадцатеричных цифр, и относительный путь к файлу. Поля разделяются тремя символами: пробел, минус, пробел.
Чтобы настроить проверку контрольных сумм избранных данных, для каждой БД в кластере администратор баз данных должен сделать следующее:
Создайте файл конфигурации для выбранной базы данных. Например,
.имя_базы_данных
-catalog.confВ созданном файле конфигурации перечислить SQL-запросы, которые будут возвращать отслеживаемые данные. В качестве контрольной суммы можно задать любые 40 шестнадцатеричных цифр, например нули.
Выполнить следующую команду, чтобы пересчитать контрольные суммы, указав параметры подключения к вашей базе данных:
pg_integrity_check -c -o -C полный-путь-к-файлу-конфигурации
-d postgres -h localhost -p 5432 -U postgres
Чтобы проверить таблицы системного каталога, запустите pg_integrity_check
для каждой базы данных, подлежащей проверке целостности.
Примечание
Администратор также может, запустив эту команду, получить примерный файл конфигурации, а затем отредактировать его должным образом.
31.2.2. Проверка целостности при запуске сервера #
Контрольные суммы неизменяемых файлов всегда проверяются при запуске сервера Postgres Pro Enterprise. Если запуск сервера остановлен из-за несовпадения контрольных сумм, администратор должен разобраться в проблеме, разрешить её и перезапустить сервер.
Таблицы системных каталогов и дополнительные файлы при запуске сервера не проверяются. Вы можете проверить их вручную, выполнив 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/ent-17/data # Файл журнала pg_integrity_check LOG = /opt/pgpro/ent-17/share/security/log # Проверять неизменяемые файлы ежедневно в 00:05 5 0 * * * root /opt/pgpro/ent-17/bin/pg_integrity_check -s >> $LOG # Запускать проверки целостности в 14:15 в первый день месяца 15 14 1 * * root /opt/pgpro/ent-17/bin/pg_integrity_check -s >> $LOG # Запускать проверки целостности в 22.00 по выходным 0 22 * * 1-5 root /opt/pgpro/ent-17/bin/pg_integrity_check -s >> $LOG # Запускать проверки целостности ежедневно в 00:23, 2:23, 4:23 ... 23 0-23/2 * * * root /opt/pgpro/ent-17/bin/pg_integrity_check -s >> $LOG # Запускать проверки целостности в 4:05 по воскресеньям 5 4 * * sun root /opt/pgpro/ent-17/bin/pg_integrity_check -s >> $LOG