4.1. Установка в средах с усиленными мерами безопасности #
В среде с усиленными мерами безопасности службы менеджера и агентов запускаются на серверах от имени отдельно созданных пользователей операционной системы, а не от имени суперпользователя. При этом пользователям операционной системы необходимо назначить дополнительные права для правильной работы служб менеджера и агентов.
Важно
Если служба агента запущена от имени пользователя операционной системы с недостаточными правами, обратите внимание на следующие ограничения при создании кластеров:
Невозможно создать основной каталог данных экземпляра. PPEM использует
sudoи требует права запускаchmod,chown,initdbиpg_ctl.Невозможно настроить экземпляры. PPEM автоматически указывает параметры экземпляра в файле конфигурации
postgresql.auto.confи требует право доступа к основному каталогу данных экземпляра.
При выполнении команд, приведённых в этом разделе, обратите внимание на следующие особенности:
Приведены команды для операционной системы Debian Linux. Для других версий операционных систем используйте соответствующие им команды.
В командах указаны стандартные переменные для объектов, например
ppemдля базы данных репозитория. При необходимости можно указать другие переменные.
Процесс установки состоит из следующих этапов:
Убедитесь, что выполнены предварительные требования.
PPEM будет установлен. Вы можете обновить страницу браузера с веб-приложением и начать работу.
Предварительные требования
Подготовьте серверы, на которых будет установлен PPEM, в соответствии с требованиями к аппаратному и программному обеспечению.
Потребуется как минимум один сервер.
Установите экземпляр СУБД Postgres Pro как минимум на одном сервере.
За подробной информацией об установке обратитесь к официальной документации Postgres Pro.
Создание пользователей операционной системы
Создайте отдельных пользователей операционной системы на всех серверах:
# useradd ppem
От имени этих пользователей операционной системы будут запускаться службы менеджера и агентов.
Настройка менеджера
На сервере экземпляра СУБД Postgres Pro:
Установите репозиторий:
# wget -O pgpro-repo-add.sh https://repo.postgrespro.ru/ppem/ppem/keys/pgpro-repo-add.sh # sh pgpro-repo-add.sh
Установите менеджер:
# apt install ppem ppem-gui
Файл конфигурации менеджера
ppem-manager.ymlбудет загружен на ваше локальное устройство.Создайте пользователя СУБД, от имени которого менеджер будет подключаться к базе данных репозитория:
# sudo -u postgres createuser --pwprompt ppem
При выполнении этой команды укажите пароль пользователя СУБД.
Создайте базу данных репозитория:
# sudo -u postgres createdb -O ppem ppem
Убедитесь, что пользователь СУБД может подключиться к базе данных:
# psql -h localhost -U ppem -d ppem
При проблемах с подключением убедитесь, что в файл конфигурации
pg_hba.confдобавлено правило HBA, разрешающее пользователю СУБД подключаться к базе данных, а также указан метод авторизации.За подробной информацией обратитесь к официальной документации Postgres Pro по файлу конфигурации
pg_hba.conf.В файле конфигурации менеджера
ppem-manager.yml:Укажите имя базы данных репозитория с помощью параметра
repo.name:repo: name: "ppem"
Укажите имя и пароль пользователя СУБД с помощью параметров
repo.userиrepo.password:repo: user: "ppem" password: "
пароль_пользователя_СУБД"Укажите URL для подключения менеджера к базе данных репозитория с помощью параметра
repo.url:repo: url: "postgres://ppem:
пароль_пользователя_СУБД@localhost/ppem"За подробной информацией о формате URL обратитесь к официальной документации Postgres Pro по строкам параметров подключения.
Настройте запуск службы менеджера от имени пользователя операционной системы:
Начните редактирование модуля systemd:
# systemctl edit ppem
В разделе
[Service]укажите имя пользователя операционной системы:[Service] User=ppem
Убедитесь, что пользователь операционной системы имеет право чтения файла конфигурации менеджера
ppem-manager.yml.Если право отсутствует, выполните запрос:
# chown ppem:ppem /etc/ppem-manager.yml # chmod 400 /etc/ppem-manager.yml
Сохраните параметры модуля systemd, затем перезагрузите его:
# systemctl daemon-reload
Запустите службу менеджера и добавьте её в автозагрузку сервера:
# systemctl start ppem # systemctl enable ppem
Веб-приложение будет установлено на сервере.
Настройка агентов
На всех серверах:
Установите агенты:
# apt install ppem-agent
Файл конфигурации агента
ppem-agent.ymlбудет загружен на ваше локальное устройство.Создайте пользователя СУБД, от имени которого агент будет подключаться к базе данных репозитория:
# sudo -u postgres createuser --pwprompt ppem_agent
При выполнении этой команды укажите пароль пользователя СУБД.
Предоставьте пользователю СУБД права на чтение системного каталога и запуск функций.
Рекомендуется назначить следующие права:
GRANT pg_monitor, pg_maintain, pg_signal_backend, pg_read_all_settings TO ppem_agent;
Предоставьте пользователю СУБД следующие права на каждую базу данных в экземпляре:
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stat_file(TEXT) TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_stat_file(TEXT, BOOLEAN) TO ppem_agent; GRANT SELECT ON pg_catalog.pg_statistic TO ppem_agent; GRANT SELECT ON pg_catalog.pg_config TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_config() TO ppem_agent; GRANT SELECT ON pg_catalog.pg_file_settings TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_show_all_file_settings() TO ppem_agent; GRANT SELECT ON pg_catalog.pg_authid TO ppem_agent;
Предоставьте пользователю СУБД следующие права на управление резервными копиями:
ALTER ROLE ppem_agent WITH REPLICATION; GRANT USAGE ON SCHEMA pg_catalog TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start(text, boolean) TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop(boolean) TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO ppem_agent; GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO ppem_agent;
Права достаточно назначить для базы данных, которая будет использоваться при подключении пользователя к экземпляру.
За подробной информацией о правах обратитесь к официальной документации Postgres Pro по pg_probackup.
Убедитесь, что пользователь СУБД может подключиться к базе данных репозитория:
# psql -h localhost -U ppem_agent -d ppem
При проблемах с подключением убедитесь, что в файл конфигурации
pg_hba.confдобавлено правило HBA, разрешающее пользователю СУБД подключаться к базе данных, а также указан метод авторизации.За подробной информацией обратитесь к официальной документации Postgres Pro по файлу конфигурации
pg_hba.conf.Получите ключ API для настройки агента:
Скопируйте API-ключ из выведенной на экран инструкции по установке агента и сохраните его.
В файле конфигурации агента
ppem-agent.ymlукажите параметры агента:agent: name: "
имя_агента" manager: url: "URL_для_подключения_к_менеджеру" api_key: "ключ_API_для_подключения_к_менеджеру" instance: connection_defaults: user: "имя_пользователя_СУБД" password: "пароль_пользователя_СУБД" http: server: address: "сетевой_адрес_для_входящих_подключений" port: "порт_для_входящих_подключений"Где:
agent.name: уникальное имя агента.agent.manager.url: URL для подключения агента к менеджеру в формате.схема://сетевой_адрес_менеджера/путь_к_версии_APIagent.manager.api_key: ранее полученный ключ API для подключения агента к менеджеру.agent.instance.connection_defaults.userиagent.instance.connection_defaults.password: имя и пароль пользователя СУБД.http.server.addressиhttp.server.port: сетевой адрес сервера и номер порта для входящих сетевых подключений.Чтобы включить прослушивание всех сетевых адресов и портов, не указывайте значения для этих параметров.
Создайте основной каталог агентов и назначьте пользователя операционной системы его владельцем:
sudo mkdir /var/lib/ppem sudo chown ppem:ppem /var/lib/ppem
Основной каталог агентов используется для хранения экземпляров и их параметров, единиц измерения экземпляров, а также локальных хранилищ.
Создайте дополнительные каталоги агентов:
mkdir /var/lib/ppem/{instances,postgresql,systemd,backups}При создании экземпляров необходимо указывать каталог
/var/lib/ppem/instances, а при создании локальных хранилищ — каталог/var/lib/ppem/backups.Создайте каталог для настройки systemd:
sudo mkdir /etc/systemd/system.conf.d
Создайте файл конфигурации systemd:
sudo nano /etc/systemd/system.conf.d/custom_path.conf
В файле конфигурации systemd укажите:
[Manager] ManagerEnvironment="SYSTEMD_UNIT_PATH=/var/lib/ppem/systemd:"
Добавьте пользователя операционной системы в группу для работы с экземплярами:
sudo usermod -aG postgres ppem
В файле конфигурации sudoers разрешите пользователю операционной системы выполнять команды от имени суперпользователя, указав:
Cmnd_Alias PG_SYS_V = /usr/bin/systemctl status postgres*.service, \ /usr/bin/systemctl start postgres*.service, \ /usr/bin/systemctl stop postgres*.service, \ /usr/bin/systemctl restart postgres*.service, \ /usr/bin/systemctl reload postgres*.service, \ /usr/bin/systemctl enable postgres*.service, \ /usr/bin/systemctl disable postgres*.service, \ /usr/bin/systemctl daemon-reload, \ /usr/bin/mkdir --parents /var/lib/ppem/*, \ /usr/bin/mkdir /var/lib/ppem/*, \ /usr/bin/chmod --recursive 0[5-7][0-7][0-7] /var/lib/ppem/*, \ /usr/bin/chmod 0[5-7][0-7][0-7] /var/lib/ppem/*, \ /usr/bin/chown --recursive [a-z]*\:[a-z]* /var/lib/ppem/*, \ /usr/bin/chown [a-z]*\:[a-z]* /var/lib/ppem/*, \ /usr/bin/echo, \ /usr/bin/test, \ /usr/bin/sh -c /usr/bin/echo, \ /usr/bin/mv, \ /usr/bin/rm /var/lib/ppem/*, \ /usr/bin/rm /tmp/*, \ /usr/bin/rm --recursive --force /var/lib/ppem/* Cmnd_Alias PG_CTL_V = /usr/lib/postgresql/17/bin/pg_ctl, \ /usr/lib/postgresql/17/bin/initdb, \ /opt/pgpro/ent-17/bin/initdb, \ /opt/pgpro/ent-17/bin/pg_ctl, \ /opt/pgpro/ent-17/bin/pg_probackup pgpro ALL = (root) NOPASSWD:SETENV: PG_SYS_V pgpro ALL = (postgres) NOPASSWD:SETENV: PG_CTL_V
В файле конфигурации агента
ppem-agent.ymlукажите:system: postgresql_configs_path: "/var/lib/ppem/postgresql" systemd_units_path: "/var/lib/ppem/systemd"Перезапустите сервер:
sudo reboot
Настройте запуск службы агента от имени пользователя операционной системы:
Начните редактирование модуля systemd:
# systemctl edit ppem-agent
В разделе
[Service]укажите пользователя операционной системы:[Service] User=ppem
Убедитесь, что пользователь операционной системы имеет право чтения файла конфигурации агента
ppem-agent.yml.Если право отсутствует, выполните запрос:
# chown ppem:ppem /etc/ppem-agent.yml # chmod 400 /etc/ppem-agent.yml
Сохраните параметры модуля systemd, затем перезагрузите его:
# systemctl daemon-reload
Запустите службу агента и добавьте её в автозагрузку сервера:
# systemctl start ppem-agent # systemctl enable ppem-agent