• ОС ОН Орёл 2.12
  • ОС СН Смоленск 1.6


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

Предполагается, что уже установлен сервер контроллера домена FreeIPA:

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

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

  • введённом в домен;
  • с именем db.astra.mta;
  • с постоянным адресом, например, 192.168.32.4.

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

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

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

kinit admin
ipa service-add postgres/db.astra.mta@ASTRA.MTA

Дальнейшие операции выполняются на сервере базы данных.

Установка пакетов на сервере базы данных

Установить PostgreSQL на сервере базы данных можно командой:

sudo apt install postgresql

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

  1. Получить таблицу ключей для сервиса базы данных, сохранить её в файле /etc/postgresql/9.6/main/krb5.keytab и предоставить пользователю postgres права доступа к этому файлу:

    sudo kinit admin
    sudo ipa-getkeytab --principal=postgres/db.astra.mta@ASTRA.MTA --keytab=/etc/postgresql/9.6/main/krb5.keytab
    sudo chown postgres:postgres /etc/postgresql/9.6/main/krb5.keytab


  2. Настроить параметры сервера в файле /etc/postgresql/9.6/main/postgresql.conf:

    1. Указать параметры использования сетевых интерфейсов, изменив значение параметра listen_address. Нужное значение этого параметра зависит от конкретного применения сервера, однако можно выбрать универсальный вариант "использовать все сетевые интерфейсы":

      listen_addresses = '*'


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

      krb_server_keyfile = '/etc/postgresql/9.6/main/krb5.keytab'


  3. Настроить в файле /etc/postgresql/9.6/main/pg_hba.conf параметры доступа пользователей к базам данных, в качестве способа аутентификации указав gss, например:

    host all all  192.168.32.0/4 gss


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

    sudo systemctl restart postgresql


Проверка

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

kinit ipauser

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

psql: СБОЙ: роль "ipauser@ASTRA.MTA" не существует

Указанное выше сообщение об ошибке выводится после успешного подключения к базе данных, и говорит о том, что пользователь аутентифицирован успешно, но база данных для этого пользователя не настроена. Обратите также внимание на то, что доменная часть имени пользователя в примере задаётся как имя области Kerberos (заглавными буквами). Дальнейшие возможности настройки см. ниже.

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

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

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

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

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

  • map Разрешает сопоставление имён пользователей системы и пользователей баз данных. Чтобы задействовать сопоставление имён, нужно указать map=имя-сопоставления в поле параметров в файле /etc/postgresql/9.6/main/pg_hba.conf

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

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

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