|
Имеется сервер контроллера домена FreeIPA:
Сервер базы данных располагается на отдельном компьютере:
| Разворачивать сервер базы данных непосредственно на доменном контроллере возможно, но не рекомендуется, так как это повышает уязвимость контроллера, и может негативно влиять на его производительность. |
На контроллере домена нужно зарегистрировать службу базы данных. По умолчанию имя службы 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 |
Дальнейшие операции выполняются на сервере базы данных.
Указанные ниже операции выполняются на сервере базы данных.
Установить СУБД PostgreSQL:
| sudo apt install postgresql |
Получить от имени суперпользователя билет Kerberos администратора домена:
| sudo kinit admin |
Получить таблицу ключей для службы базы данных, сохранив её в файле /etc/postgresql/krb5.keytab:
| sudo ipa-getkeytab --principal=postgres/db.astra.mta@ASTRA.MTA --keytab=/etc/postgresql/krb5.keytab |
Предоставить пользователю postgres права доступа к этому файлу
| sudo chown postgres:postgres /etc/postgresql/krb5.keytab |
Настроить параметры службы баз данных postgresql:
В файле /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. |
Указать параметры использования сетевых интерфейсов, изменив значение параметра listen_address. Нужное значение этого параметра зависит от конкретного применения сервера, однако можно выбрать универсальный вариант "использовать все сетевые интерфейсы":
listen_addresses = '*' |
Указать расположение полученного файла ключей в параметре krb_server_keyfile:
krb_server_keyfile = '/etc/postgresql/krb5.keytab' |
В файле /etc/postgresql/*/main/pg_hba.conf настроить параметры доступа пользователей к базам данных, в качестве способа аутентификации указав gss (аутентификация Kerberos).
Правила контроля доступа применяются в том порядке, в котором они указаны в конфигурационном файле. Проверка прав доступа заканчивается на первом применимом правиле. Поэтому правило разрешения аутентификации gss следует располагать в начале перечня правил. |
host all all 192.168.32.0/4 gss |
Для включения аутентификации добавить пользователя postgres в качестве службы в конфигурацию sssd. Для этого в конфигурационном файле /etc/sssd/sssd.conf в секцию [ifp] необходимо добавить следующую строку:
[ifp] allowed_uids = postgres |
Если значения для параметра allowed_uids уже заданы, то добавить имя postgres через запятую.
Перезапустить службу баз данных и службу sssd:
| sudo systemctl restart postgresql sssd |
Если все действия выполнены успешно, то получив билет Kerberos доменного пользователя ipauser@astra.mta:
| kinit ipauser |
можно будет от имени этого пользователя подключиться к серверу базы данных:
| psql: СБОЙ: роль "ipauser@ASTRA.MTA" не существует |
Указанное выше сообщение об ошибке выводится после успешного подключения к базе данных, и говорит о том, что пользователь аутентифицирован успешно, но база данных для этого пользователя не настроена.
Обратите также внимание на то, что доменная часть имени пользователя в примере задается как имя области Kerberos (заглавными буквами). Дальнейшие возможности настройки см. ниже.
Полное имя пользователя, которое используется для Kerberos-аутентификации по стандарту GSSAPI, не является полным именем доменного пользователя. В отличие от имени доменного пользователя, состоящего из короткого имени и имени домена, оно состоит из:
Есть два способа корректной настройки в postgresql поиска имени пользователя:
|
В зависимости от поставленных задач могут быть выполнены дальнейшие настройки работы с именами пользователей.
Для метода аутентификации gss доступны следующие параметры конфигурации (подробности см. в документации PostgreSQL 9.6 и документации PostgreSQL 11 или в русском переводе документации):
Например:
Имеется доменный пользователь ipauser@astra.mta, в базе данных имеется пользователь dbuser с доступом к одноименной базе данных. Для задания соответствия между этими пользователями:
В файле /etc/postgresql/*/main/pg_hba.conf указать на необходимость использовать соответствие map1:
map="map1" |
В файле /etc/postgresql/*/main/pg_ident.conf задать само соответствие:
# Имя соответствия Имя пользователя системы Имя пользователя СУБД map1 ipauser@astra.mta dbuser |
Имя соответствия может быть произвольным, оно используется для сопоставления записи в файле pg_hba к определенной записи в pg_ident.
Перезапустить службу СУБД:
| sudo systemctl restart postgresql |
После выполнения указанных действий становится возможным подключение к СУБД с использованием пользователя БД из сессии доменного пользователя ipauser@astra.mta:
| psql -h db.astra.mta -d dbuser -U dbuser |
Когда используется внешняя система аутентификации (GSSAPI) имя пользователя операционной системы, устанавливающего подключение, может не совпадать с именем целевого пользователя (роли) базы данных. В этом случае можно применить сопоставление имен пользователей, чтобы сменить имя пользователя операционной системы на имя пользователя БД. Чтобы задействовать сопоставление имен, укажите map=имя-сопоставления в поле параметров в pg_hba.conf. Этот параметр поддерживается для всех методов аутентификации, которые принимают внешние имена пользователей. Так как для разных подключений могут требоваться разные сопоставления, сопоставление определяется параметром имя-сопоставления в pg_hba.conf для каждого отдельного подключения. Подробности см. в документации PostgreSQL 9.6 и документации PostgreSQL 11 (см. тж. русский перевод)