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

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

Важно

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

  • При создании экземпляров и кластеров:

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

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

  • При восстановлении экземпляров из резервных копий:

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

    • Невозможно восстановить внешние каталоги. PPEM требует право доступа к каталогам, в которых будут созданы внешние каталоги.

  • Невозможно управлять службой PPEM и создавать модуль systemd. PPEM требует право доступа к системному пути.

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

  • Приведены команды для операционной системы 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

    В этом примере создаётся пользователь 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

    В этом примере создаётся пользователь ppem_agent. Этот пользователь будет упоминаться в других командах в этом разделе.

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

  3. Назначьте 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.

  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. Назначьте созданному пользователю операционной системы права суперпользователя на работу с целевыми каталогами с помощью команд 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
  8. Настройте запуск службы агента от имени пользователя операционной системы:

    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
  9. Запустите службу агента и добавьте её в автозагрузку сервера:

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