The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Настройка СУБД Postgresql для аутентификации пользователей через Active Directory
В статье расскажу про мой опыт настройки СУБД Postgresql для включения
аутентификации пользователей через Active Directory с помощью протокола GSSAPI.

Предполагается, что домен Active Directory и БД Postgresql уже развёрнуты.

Для примера у меня развёрнут тестовый стенд со следующими параметрами:

  • Сервер с Active Directory: Windows Server 2022
  • Функциональный уровень домена: Windows Server 2016
  • Имя домена: domain.test
  • Контроллер домена: dc.domain.test
  • Клиентский компьютер с Windows 11, присоединённый к домену
  • Сервер с БД Postgresql 13 на Debian 11
  • DNS имя сервера СУБД: pg-host.domain.test Установка пакетов на сервере СУБД Для систем на базе Debian: root# apt install krb5-user postgresql Настройка Kerberos на сервере СУБД В файле /etc/krb5.conf на сервере с СУБД Postgresql добавляем описание для области Kerberos домена Windows: [libdefaults] default_realm = DOMAIN.TEST ... [realms] DOMAIN.TEST = { kdc = dc.domain.test admin_server = dc.domain.test } Проверяем, что можем получить билет: [email protected]:~$ kinit [email protected] Смотрим список полученных билетов на сервере с БД: [email protected]:~$ klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: [email protected] Valid starting Expires Service principal 23.07.2022 20:55:44 24.07.2022 06:55:44 krbtgt/[email protected] renew until 24.07.2022 20:55:38 Настройка описания имени службы в Active Directory Настройка пользователя Active Directory Для того, чтобы пользователи могли подключаться к СУБД с помощью GSSAPI, в Active Directory должна быть учётная запись с соответствующей записью уникального описания службы в поле Service Principal Name и User Principal Name: servicename/[email protected] Значение имени сервиса servicename по умолчанию postgres и может быть изменено во время сборки Postgresql с помощью параметра with-krb-srvnam ./configure --with-krb-srvnam=whatever
  • hostname - это полное доменное имя сервера, где работает СУБД (pg-host.domain.test) оно должно быть зарегистрировано в DNS сервере, который использует Active Directory.
  • realm - имя домена (DOMAIN.TEST) В моём примере имя службы получается: postgres/[email protected] Создаём пользователя pg-user в Active Directory, указываем "Запретить смену пароля пользователей" и "Срок действия пароля не ограничен". Создание файла с таблицами ключей Для того, чтобы служба СУБД могла подключаться к Active Directory без ввода пароля, необходимо создать файл keytab на сервере с Windows Server и после переместить его на сервер c СУБД. Создание файла выполняется с помощью команды ktpass.exe: ktpass.exe -princ postgres/[email protected] -ptype KRB5_NT_PRINCIPAL -crypto ALL -mapuser [email protected] -pass <пароль> -out %tmp%\krb5.keytab Эта же команда выполняет привязку имени сервиса к учётной записи. Подключаемся к СУБД Postgresql и определяем, где СУБД предполагает наличие файла keytab: [email protected]:~$ psql postgres=# show krb_server_keyfile; FILE:/etc/postgresql-common/krb5.keytab Копируем файл с Windows Server на сервер с СУБД в указанное место. Если файл необходимо расположить в другом месте, то необходимо поменять параметр krb_server_keyfile: sql> alter system set krb_server_keyfile=''/path''; Настройка Postgresql Настройка файла доступа pg_hba.conf и файла сопоставления имён pg_ident.conf В файле pg_ident.conf описываем сопоставление пользователей Active Directory с пользователями БД: # MAPNAME SYSTEM-USERNAME PG-USERNAME gssmap /^(.*)@DOMAIN\.TEST$ \1 Данное сопоставление указывает отображать доменного пользователя [email protected] в пользователя БД user (для подключения, пользователь user уже должен быть создан в БД). В файле pg_hba.conf указываем, например, что использовать аутентификацию с помощью GSSAPI необходимо только для пользователей, состоящих в группе krb_users и подключающихся из сети 192.168.1.0/24: host all +krb_users 192.168.1.0/24 gss include_realm=1 krb_realm=DOMAIN.TEST map=gssmap Здесь:
  • map=gssmap - имя сопоставления из файла pg_ident.conf
  • krb_realm - имя домена Active Directory Создание пользователей Создаём пользователей в Active Directory: user1, user2. Создаём пользователей в СУБД: postgres=# create role user1 login; postgres=# create role user2 login; postgres=# create role user3 login encrypted password ''пароль'' ; Создаём группу krb_users (как файле pg_hba.conf) и добавляем необходимых пользователей в неё: postgres=# grant krb_users to user1; postgres=# grant krb_users to user2; В данном случае, пользователи user1, user2 смогут подключится к СУБД через GSSAPI, используя учётные данные из Active Directory, а пользователь user3 сможет подключиться только с указанием пароля, хранящимся в БД. Проверка подключения На Windows машине проверяем подключение. Входим на компьютер с Windows через Active Directory, например, как [email protected] Запускаем клиент postgresql, в строке подключения указываем полное доменное имя сервера СУБД, как прописано в файле keytab - pg-host.domain.test, логин и пароль не указываем: C:\> chcp 1251 C:\> psql -h pg-host.domain.test -d postgresql Смотрим список билетов Kerberos: C:\> klist.exe #2> Клиент: user1 @ DOMAIN.TEST Сервер: postgres/pg-host.domain.test @ DOMAIN.TEST Тип шифрования KerbTicket: RSADSI RC4-HMAC(NT) флаги билета 0x40a10000 -> forwardable renewable pre_authent name_canonicalize Время начала: 7/24/2022 11:22:54 (локально) Время окончания: 7/24/2022 20:59:53 (локально) Время продления: 7/24/2022 10:59:53 (локально) Тип ключа сеанса: RSADSI RC4-HMAC(NT) Флаги кэша: 0 Вызванный центр распространения ключей: dc.domain.test Проверяем подключение пользователя user3 с помощью пароля: C:\> psql -h pg-host.domain.test -d postgresql -U user3 Как видно аутентификация в СУБД работает успешно как с помощью Active Directory, так и через пароль, хранящийся в БД.
  •  
    10.09.2022 , Автор: Slonik
    Ключи: postgresql, kerberos, ldap, activedirectory, auth / Лицензия: CC-BY
    Раздел:    Корень / Программисту и web-разработчику / SQL и базы данных / PostgreSQL специфика / Оптимизация и администрирование PostgreSQL

    Обсуждение [ RSS ]
  • 1.1, Аноним (1), 14:38, 11/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Редкий пример HowTo, в котором описано не только ЧТО делать, но и ЗАЧЕМ
     
     
  • 2.5, 244 (?), 16:32, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Три раза перечитал так и не нашёл зачем =)
     
     
  • 3.8, Аноним (8), 17:28, 05/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Разница между ролями user1,2 и 3, например.
     
  • 3.9, ОШИБКА Отсутствуют данные в поле Name (?), 21:37, 05/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как зачем.
    Чтобы новый пришедший васян-админ (старого с бородой-то мобилизовали...) доблестно впихнул в группу доступа к базе группу Everyone, ну, сюрприз будет.
     
  • 2.10, . (?), 12:30, 11/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот как раз ЗАЧЕМ и непонятно. В свете последних решений ЦК ВЦСПС и ЦК ВКПБ, и т.п. логичнее было бы использовать какой-нибудь OpenLDAP, ApacheDS и т.п. на Linux или FreeBSD, а не Windows с AD.
     

  • 1.2, DBA (??), 13:51, 13/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А видео-инструкция есть?
     
  • 1.3, Кулхакир (?), 23:48, 14/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Скушнааа!
    А батник можете запилить?
     
  • 1.4, john_erohin (?), 14:53, 18/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > RC4-HMAC

    фу таким быть.
    даже самба избавляется от легаси.

     
     
  • 2.12, Аноним (12), 09:54, 23/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В своё время пытался подобрать более строгий шифр для прозрачной аутентификации в веб-почте зимбры. В итоге заработало только с RC4-HMAC, как и было в примере мануала.

    Получается, чтобы заработало, нужно пилить политики безопасности контроллеров домена? Далеко не всегда они в полномочиях ДБА или администраторов других прикладных систем.

     

  • 1.6, Спасибо (?), 13:44, 21/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Спасибо за подробную инструкцию, очень полезно.
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру