Информация | ||
---|---|---|
| ||
|
Исходные данные
Предполагается, что уже установлен Имеется сервер контроллера домена 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 администратора домена:
Command |
---|
kinit admin |
и выполнить на контроллере домена команду:
Command |
---|
kinit admin ipa service-add postgres/db.astra.mta@ASTRA.MTA |
Дальнейшие операции выполняются на сервере базы данных.
Установка пакетовНастройка сервера базы данных
Указанные ниже операции выполняются на сервере базы данных.
Установить СУБД PostgreSQL
:
Command sudo apt install postgresql
Получить от имени суперпользователя билет Kerberos администратора домена:
Command sudo kinit admin
Получить таблицу ключей для
сервиса службы базы данных,
сохранить сохранив её в файле /etc/postgresql/
9.6/main/krb5.keytab
и предоставить пользователю postgres права доступа к этому файлу:
Command sudo kinit adminipa-getkeytab --principal=postgres/db.astra.mta@ASTRA.MTA --keytab=/etc/postgresql /9.6/main/krb5.keytab Предоставить пользователю postgres права доступа к этому файлу
Command sudo chown postgres:postgres /etc/postgresql /9.6/ main/krb5.keytab Настроить параметры
сервера в службы баз данных postgresql:
В файле /etc/postgresql/
9.6*/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
/9.6/
main/krb5.keytab'
Настроить в В файле /etc/postgresql/
9.6*/main/pg_hba.conf настроить параметры доступа пользователей к базам данных, в качестве способа аутентификации указав 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:
Command sudo systemctl restart postgresql sssd
sudo
Проверка
Если все действия выполнены успешно, то получив билет Kerberos доменного пользователя ipauser@astra.mta:
Command |
---|
kinit ipauser |
можно будет от имени этого пользователя подключиться к серверу базы данных:
Command | ||
---|---|---|
| ||
psql: СБОЙ: роль "ipauser@ASTRA.MTA" не существует |
Указанное выше сообщение об ошибке выводится после успешного подключения к базе данных, и говорит о том, что пользователь аутентифицирован успешно, но база данных для этого пользователя не настроена.
Обратите также внимание на то, что доменная часть имени пользователя в примере задаётся задается как имя области Kerberos (заглавными буквами). Дальнейшие возможности настройки см. ниже.
Информация | ||
---|---|---|
Полное имя пользователя, которое используется для Kerberos-аутентификации по стандарту GSSAPI, не является полным именем доменного пользователя. В отличие от имени доменного пользователя, состоящего из короткого имени и имени домена, оно состоит из:
Есть два способа корректной настройки в postgresql поиска имени пользователя:
|
Дальнейшие настройки
В зависимости от поставленных задач могут быть выполнены дальнейшие настройки работы с именами пользователей.
Дополнительные параметры аутентификации в /etc/postgres/
9.6*/main/pg_hba.conf
Для метода аутентификации gss (GSSAPI) доступны следующие параметры конфигурации (подробности см. в документации PostgreSQL 9.6 и документации PostgreSQL 11 или в русском переводе документации):
- include_realm Когда этот параметр равен 0, из принципала аутентифицированного пользователя убирается область, и оставшееся имя проходит сопоставление имён имен. Этот вариант не рекомендуется для применения и поддерживается в основном только для обратной совместимости, так как он . Параметр небезопасен в окружениях с несколькими областями Kerberos, если только дополнительно не задаётся задается параметр krb_realm. Более предпочтительный вариант — оставить значение include_realm по умолчанию (1) и задать в файле /etc/postgres/9.6*/main/pg_ident.conf явные правила сопоставления для преобразования имён имен принципалов в имена пользователей Postgres Pro.
- map Разрешает сопоставление имён Определяет соответствие имен пользователей системы и пользователей баз данных. Чтобы задействовать сопоставление имён, нужно указать map=имя-сопоставления в поле параметров В основном используется для сопоставления имен пользователей системы и имен пользователей СУБД, но может быть использован и для задания ограничений по конкретным пользователям или домену. Действующие соответствия задаются параметром map=<имя_сопоставления> в поле параметров в файле /etc/postgresql/*/main/pg_hba.conf. Сами соответствия определяются в файле /etc/postgresql/9.6*/main/pg_ident.conf. При работе в Astra Linux с выключенным мандатным управлением доступом (МРД) достаточно подключаться к СУБД от имени пользователей баз данных, но при включенном МРД для подключения к СУБД необходимо обладать сведениями о классификационной метке пользователя, для чего необходимо создавать соответствия пользователей.
Например:
Имеется доменный пользователь 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.
Перезапустить службу СУБД:
Command sudo systemctl restart postgresql После выполнения указанных действий становится возможным подключение к СУБД с использованием пользователя БД из сессии доменного пользователя ipauser@astra.mta:
Command psql -h db.astra.mta -d dbuser -U dbuser
- krb_realm Устанавливает область, с которой будут сверяться имена принципалов пользователей. Если этот параметр задан, подключаться смогут только пользователи из этой области. Если не задан, подключаться смогут пользователи из любой области, в зависимости от установленного сопоставления имён пользователей.
Правила сопоставления
имёнимен /etc/postgres/
9.6*/main/pg_ident.conf
Когда используется внешняя система аутентификации (GSSAPI) имя пользователя операционной системы, устанавливающего подключение, может не совпадать с именем целевого пользователя (роли) базы данных. В этом случае можно применить сопоставление имён имен пользователей, чтобы сменить имя пользователя операционной системы на имя пользователя БД. Чтобы задействовать сопоставление имёнимен, укажите map=имя-сопоставления в поле параметров в pg_hba.conf. Этот параметр поддерживается для всех методов аутентификации, которые принимают внешние имена пользователей. Так как для разных подключений могут требоваться разные сопоставления, сопоставление определяется параметром имя-сопоставления в pg_hba.conf для каждого отдельного подключения. Подробности см. в документации PostgreSQL 9.6 и документации PostgreSQL 11 (см. тж. русский перевод)