Дерево страниц

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)

  • Astra Linux Special Edition РУСБ.10015-16 исп. 1

  • Astra Linux Common Edition 2.12

Исходные данные

Имеется сервер контроллера домена FreeIPA:

  • имя домена astra.mta;
  • администратор домена admin@astra.mta;
  • пользователь домена ipauser@astra.mta.

Сервер базы данных располагается на отдельном компьютере:

  • имя компьютера db.astra.mta;
  • компьютер введен в домен;
  • компьютер имеет постоянный IP-адрес, например, 192.168.32.4.

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

Регистрация службы базы данных на контроллере домена

На контроллере домена нужно зарегистрировать службу базы данных. По умолчанию имя службы postgres, соответственно имя принципала Kerberos для службы, работающей узле db.astra.mta, будет postgres/db.astra.mta@ASTRA.MTA.Зарегистрировать службу можно либо через WEB-интерфейс администратора FreeIPA, либо получить на контроллере домена билет Kerberos администратора домена:

kinit admin
и выполнить на контроллере домена команду:
ipa service-add postgres/db.astra.mta@ASTRA.MTA
Дальнейшие операции выполняются на сервере базы данных.

Настройка сервера базы данных

Указанные ниже операции выполняются на сервере базы данных.

  1. Установить СУБД PostgreSQL:

    sudo apt install postgresql

  2. Получить от имени суперпользователя билет Kerberos администратора домена:

    sudo kinit admin

  3. Получить таблицу ключей для службы базы данных, сохранив её в файле /etc/postgresql/krb5.keytab:

    sudo ipa-getkeytab --principal=postgres/db.astra.mta@ASTRA.MTA --keytab=/etc/postgresql/krb5.keytab

  4.  Предоставить пользователю postgres права доступа к этому файлу

    sudo chown postgres:postgres /etc/postgresql/krb5.keytab

  5. Настроить параметры службы баз данных postgresql:

    1. в файле /etc/postgresql/*/main/postgresql.conf:

      В Astra Linux Special Edition x.7 конфигурационные файлы хранятся в каталоге /etc/postgresql/11.
      В Astra Linux Special Edition 1.6 и в Astra Linux Common Edition конфигурационные файлы хранятся в каталоге /etc/postgresql/9.6.
      1. Указать параметры использования сетевых интерфейсов, изменив значение параметра listen_address. Нужное значение этого параметра зависит от конкретного применения сервера, однако можно выбрать универсальный вариант "использовать все сетевые интерфейсы":

        listen_addresses = '*'
      2. Указать расположение полученного файла ключей в параметре krb_server_keyfile:

        krb_server_keyfile = '/etc/postgresql/krb5.keytab'
    2. В файле /etc/postgresql/*/main/pg_hba.conf настроить параметры доступа пользователей к базам данных, в качестве способа аутентификации указав gss, например:

      host all all  192.168.32.0/4 gss
  6. Для включения аутентификации добавить пользователя postgres в качестве службы в конфигурацию sssd. Для этого в конфигурационном файле /etc/sssd/sssd.conf в секцию [ifp] необходимо добавить следующую строку:

    [ifp]
    allowed_uids = postgres

    Если значения для параметра allowed_uids уже заданы, то добавить имя postgres через запятую.

  7. Перезапустить службу баз данных и службу sssd:

    sudo systemctl restart postgresql sssd

Проверка

Если все действия выполнены успешно, то получив билет Kerberos доменного пользователя ipauser@astra.mta:

kinit ipauser
можно будет от имени этого пользователя подключиться к серверу базы данных:
psql -h db.astra.mta -U ipauser@ASTRA.MTA

psql: СБОЙ: роль "ipauser@ASTRA.MTA" не существует
Указанное выше сообщение об ошибке выводится после успешного подключения к базе данных, и говорит о том, что пользователь аутентифицирован успешно, но база данных для этого пользователя не настроена. Обратите также внимание на то, что доменная часть имени пользователя в примере задается как имя области Kerberos (заглавными буквами). Дальнейшие возможности настройки см. ниже.

Дальнейшие настройки

В зависимости от поставленных задач могут быть выполнены дальнейшие настройки работы с именами пользователей.

Дополнительные параметры аутентификации в /etc/postgres/*/main/pg_hba.conf

Для метода аутентификации gss доступны следующие параметры конфигурации (подробности см. в документации PostgreSQL 9.6 и документации PostgreSQL 11 или в русском переводе документации):

  • include_realm Когда этот параметр равен 0, из принципала аутентифицированного пользователя убирается область, и оставшееся имя проходит сопоставление имен Этот вариант не рекомендуется для применения и поддерживается только для обратной совместимости. Параметр небезопасен в окружениях с несколькими областями Kerberos, если только дополнительно не задается параметр krb_realm. Более предпочтительный вариант — оставить значение include_realm по умолчанию (1) и задать в файле /etc/postgres/*/main/pg_ident.conf явные правила сопоставления для преобразования имен принципалов в имена пользователей Postgres Pro.

  • map Определяет соответствие имен пользователей системы и пользователей баз данных. В основном используется для сопоставления имен пользователей системы и имен пользователей СУБД, но может быть использован и для задания ограничений по конкретным пользователям или домену. Действующие соответствия задаются параметром map=<имя_сопоставления> в поле параметров в файле /etc/postgresql/*/main/pg_hba.conf. Сами соответствия определяются в файле /etc/postgresql/*/main/pg_ident.conf. При работе в Astra Linux с выключенным мандатным управлением доступом (МРД) достаточно подключаться к СУБД от имени пользователей баз данных, но при включенном МРД для подключения к СУБД необходимо обладать сведениями о классификационной метке пользователя, для чего необходимо создавать соответствия пользователей.

    Например: 

    Имеется доменный пользователь ipauser@astra.mta, в базе данных имеется пользователь dbuser с доступом к одноименной базе данных. Для задания соответствия между этими пользователями:

    1. В файле /etc/postgresql/*/main/pg_hba.conf указать на необходимость использовать соответствие map1:

       map="map1"
    2. В файле /etc/postgresql/*/main/pg_ident.conf задать само соответствие:

      # Имя соответствия Имя пользователя системы Имя пользователя СУБД
      map1               ipauser@astra.mta        dbuser

      Имя соответствия может быть произвольным, оно используется для сопоставления записи в файле pg_hba к определенной записи в pg_ident.


    3. Перезапустить службу СУБД:

      sudo systemctl restart postgresql
      После выполнения указанных действий становится возможным подключение к СУБД с использованием пользователя БД из сессии доменного пользователя ipauser@astra.mta:
      psql -h db.astra.mta -d dbuser -U dbuser

  • krb_realm Устанавливает область, с которой будут сверяться имена принципалов пользователей. Если этот параметр задан, подключаться смогут только пользователи из этой области. Если не задан, подключаться смогут пользователи из любой области, в зависимости от установленного сопоставления имён пользователей.

Правила сопоставления имен /etc/postgres/*/main/pg_ident.conf

Когда используется внешняя система аутентификации (GSSAPI) имя пользователя операционной системы, устанавливающего подключение, может не совпадать с именем целевого пользователя (роли) базы данных. В этом случае можно применить сопоставление имен пользователей, чтобы сменить имя пользователя операционной системы на имя пользователя БД. Чтобы задействовать сопоставление имен, укажите map=имя-сопоставления в поле параметров в pg_hba.conf. Этот параметр поддерживается для всех методов аутентификации, которые принимают внешние имена пользователей. Так как для разных подключений могут требоваться разные сопоставления, сопоставление определяется параметром имя-сопоставления в pg_hba.conf для каждого отдельного подключения. Подробности см. в  документации PostgreSQL 9.6  и документации PostgreSQL 11 (см. тж. русский перевод)

  • Нет меток