4.1. Установка в средах с усиленными мерами безопасности #
В среде с усиленными мерами безопасности службы менеджера и агентов запускаются на серверах от имени отдельно созданных пользователей операционной системы, а не от имени суперпользователя. При этом пользователям операционной системы необходимо назначить дополнительные права для правильной работы служб менеджера и агентов.
Важно
Если служба агента запущена от имени пользователя операционной системы с недостаточными правами, обратите внимание на следующие ограничения:
При создании экземпляров и кластеров:
Невозможно создать основной каталог данных экземпляра. PPEM использует
sudoи требует права запускаchmod,chown,initdbиpg_ctl.Невозможно настроить экземпляры. PPEM автоматически указывает параметры экземпляра в файле конфигурации
postgresql.auto.confи требует право доступа к основному каталогу данных экземпляра.
При восстановлении экземпляров из резервных копий:
Невозможно восстановить основной каталог данных экземпляра. PPEM требует право доступа к каталогу, в котором будет создан основной каталог данных экземпляра.
Невозможно восстановить внешние каталоги. PPEM требует право доступа к каталогам, в которых будут созданы внешние каталоги.
Невозможно управлять службой PPEM и создавать модуль systemd. PPEM требует право доступа к системному пути.
При выполнении команд, приведённых в этом разделе, обратите внимание на следующие особенности:
Приведены команды для операционной системы 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
В этом примере создаётся пользователь
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
В этом примере создаётся пользователь
ppem_agent. Этот пользователь будет упоминаться в других командах в этом разделе.При выполнении этой команды укажите пароль пользователя СУБД.
Назначьте
ppem_agentправа на чтение системного каталога и запуск функций.Рекомендуется назначить следующие права:
GRANT pg_monitor, pg_maintain, pg_signal_backend, pg_read_all_settings TO ppem_agent;
Назначьте
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;
Назначьте
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: сетевой адрес сервера и номер порта для входящих сетевых подключений.Чтобы включить прослушивание всех сетевых адресов и портов, не указывайте значения для этих параметров.
Назначьте созданному пользователю операционной системы права суперпользователя на работу с целевыми каталогами с помощью команд
chownиchmod.Для запуска, остановки и перезапуска экземпляров пользователю операционной системы также необходимо назначить следующие права:
Cmnd_Alias PG_SYS = \ /usr/bin/systemctl status postgresql*.service, \ /usr/bin/systemctl stop postgresql*.service, \ /usr/bin/systemctl start postgresql*.service, \ /usr/bin/systemctl restart postgresql*.service, \ /usr/bin/systemctl reload postgresql*.service Cmnd_Alias PG_CTL = \ /usr/lib/postgresql/17/bin/pg_ctl, \ /usr/lib/postgresql/16/bin/pg_ctl ppem ALL = (root) NOPASSWD: PG_SYS ppem ALL = (postgres) NOPASSWD: PG_CTL
Настройте запуск службы агента от имени пользователя операционной системы:
Начните редактирование модуля 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