4.1. Установка в средах с усиленными мерами безопасности #

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

Важно

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

  • Невозможно создать основной каталог данных экземпляра. PPEM использует sudo и требует права запуска chmod, chown, initdb и pg_ctl.

  • Невозможно настроить экземпляры. PPEM автоматически указывает параметры экземпляра в файле конфигурации postgresql.auto.conf и требует право доступа к основному каталогу данных экземпляра.

При выполнении команд, приведённых в этом разделе, обратите внимание на следующие особенности:

  • Приведены команды для операционной системы Debian Linux. Для других версий операционных систем используйте соответствующие им команды.

  • В командах указаны стандартные переменные для объектов, например ppem для базы данных репозитория. При необходимости можно указать другие переменные.

Процесс установки состоит из следующих этапов:

PPEM будет установлен. Вы можете обновить страницу браузера с веб-приложением и начать работу.

Предварительные требования

  1. Подготовьте серверы, на которых будет установлен PPEM, в соответствии с требованиями к аппаратному и программному обеспечению.

    Потребуется как минимум один сервер.

  2. Установите экземпляр СУБД Postgres Pro как минимум на одном сервере.

    За подробной информацией об установке обратитесь к официальной документации Postgres Pro.

Создание пользователей операционной системы

Создайте отдельных пользователей операционной системы на всех серверах:

# useradd ppem

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

Настройка менеджера

На сервере экземпляра СУБД Postgres Pro:

  1. Установите репозиторий:

    # wget -O pgpro-repo-add.sh https://repo.postgrespro.ru/ppem/ppem/keys/pgpro-repo-add.sh
    # sh pgpro-repo-add.sh
  2. Установите менеджер:

    # apt install ppem ppem-gui

    Файл конфигурации менеджера ppem-manager.yml будет загружен на ваше локальное устройство.

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

    # sudo -u postgres createuser --pwprompt ppem

    При выполнении этой команды укажите пароль пользователя СУБД.

  4. Создайте базу данных репозитория:

    # sudo -u postgres createdb -O ppem ppem
  5. Убедитесь, что пользователь СУБД может подключиться к базе данных:

    # psql -h localhost -U ppem -d ppem

    При проблемах с подключением убедитесь, что в файл конфигурации pg_hba.conf добавлено правило HBA, разрешающее пользователю СУБД подключаться к базе данных, а также указан метод авторизации.

    За подробной информацией обратитесь к официальной документации Postgres Pro по файлу конфигурации pg_hba.conf.

  6. В файле конфигурации менеджера 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 по строкам параметров подключения.

  7. Настройте запуск службы менеджера от имени пользователя операционной системы:

    1. Начните редактирование модуля systemd:

      # systemctl edit ppem
    2. В разделе [Service] укажите имя пользователя операционной системы:

      [Service]
      User=ppem
    3. Убедитесь, что пользователь операционной системы имеет право чтения файла конфигурации менеджера ppem-manager.yml.

      Если право отсутствует, выполните запрос:

      # chown ppem:ppem /etc/ppem-manager.yml
      # chmod 400 /etc/ppem-manager.yml
    4. Сохраните параметры модуля systemd, затем перезагрузите его:

      # systemctl daemon-reload
  8. Запустите службу менеджера и добавьте её в автозагрузку сервера:

    # systemctl start ppem
    # systemctl enable ppem

Веб-приложение будет установлено на сервере.

Настройка агентов

На всех серверах:

  1. Установите агенты:

    # apt install ppem-agent

    Файл конфигурации агента ppem-agent.yml будет загружен на ваше локальное устройство.

  2. Создайте пользователя СУБД, от имени которого агент будет подключаться к базе данных репозитория:

    # sudo -u postgres createuser --pwprompt ppem_agent

    При выполнении этой команды укажите пароль пользователя СУБД.

  3. Предоставьте пользователю СУБД права на чтение системного каталога и запуск функций.

    Рекомендуется назначить следующие права:

    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.

  4. Убедитесь, что пользователь СУБД может подключиться к базе данных репозитория:

    # psql -h localhost -U ppem_agent -d ppem

    При проблемах с подключением убедитесь, что в файл конфигурации pg_hba.conf добавлено правило HBA, разрешающее пользователю СУБД подключаться к базе данных, а также указан метод авторизации.

    За подробной информацией обратитесь к официальной документации Postgres Pro по файлу конфигурации pg_hba.conf.

  5. Получите ключ API для настройки агента:

    1. Войдите в веб-приложение.

    2. Скопируйте API-ключ из выведенной на экран инструкции по установке агента и сохраните его.

  6. В файле конфигурации агента 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 для подключения агента к менеджеру в формате схема://сетевой_адрес_менеджера/путь_к_версии_API.

    • agent.manager.api_key: ранее полученный ключ API для подключения агента к менеджеру.

    • agent.instance.connection_defaults.user и agent.instance.connection_defaults.password: имя и пароль пользователя СУБД.

    • http.server.address и http.server.port: сетевой адрес сервера и номер порта для входящих сетевых подключений.

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

  7. Создайте основной каталог агентов и назначьте пользователя операционной системы его владельцем:

      sudo mkdir /var/lib/ppem
      sudo chown ppem:ppem /var/lib/ppem

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

  8. Создайте дополнительные каталоги агентов:

      mkdir /var/lib/ppem/{instances,postgresql,systemd,backups}

    При создании экземпляров необходимо указывать каталог /var/lib/ppem/instances, а при создании локальных хранилищ — каталог /var/lib/ppem/backups.

  9. Создайте каталог для настройки systemd:

      sudo mkdir /etc/systemd/system.conf.d
  10. Создайте файл конфигурации systemd:

      sudo nano /etc/systemd/system.conf.d/custom_path.conf
  11. В файле конфигурации systemd укажите:

      [Manager]
      ManagerEnvironment="SYSTEMD_UNIT_PATH=/var/lib/ppem/systemd:"
  12. Добавьте пользователя операционной системы в группу для работы с экземплярами:

      sudo usermod -aG postgres ppem
  13. В файле конфигурации 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
  14. В файле конфигурации агента ppem-agent.yml укажите:

      system:
        postgresql_configs_path: "/var/lib/ppem/postgresql"
        systemd_units_path: "/var/lib/ppem/systemd"
  15. Перезапустите сервер:

      sudo reboot
  16. Настройте запуск службы агента от имени пользователя операционной системы:

    1. Начните редактирование модуля systemd:

      # systemctl edit ppem-agent
    2. В разделе [Service] укажите пользователя операционной системы:

      [Service]
      User=ppem
    3. Убедитесь, что пользователь операционной системы имеет право чтения файла конфигурации агента ppem-agent.yml.

      Если право отсутствует, выполните запрос:

      # chown ppem:ppem /etc/ppem-agent.yml
      # chmod 400 /etc/ppem-agent.yml
    4. Сохраните параметры модуля systemd, затем перезагрузите его:

      # systemctl daemon-reload
  17. Запустите службу агента и добавьте её в автозагрузку сервера:

    # systemctl start ppem-agent
    # systemctl enable ppem-agent