Пост

[РЕШЕНО] LDAP-авторизация в PostgreSQL для FreeIPA

FreeIPA (IPA) - это комплексное решение для централизованного управления безопасностью Linux-систем, идентификацией и аутентификацией. Оно позволяет создавать многоуровневую систему управления доступом, где руководители подразделений могут добавлять пользователей в группы и настраивать доступ к ресурсам.

У нас развернута служба каталогов на FreeIPA. Требуется подключить LDAP-авторизацию в PostgreSQL для пользователей FreeIPA из определенной группы

Требования:

  • Должна быть настроена сетевая связанность по портам 389/tcp (LDAP) или 636/tcp (LDAPS) между сервером с PostgreSQL и FreeIPA
  • Во FreeIPA должна быть добавлена служебная учетная запись (postgresql_s)
  • Во FreeIPA должна быть создана группа пользователей, которым разрешен доступ в PostgreSQL (g-postgres)
  • Все необходимые пользователи должны быть добавлены в эту группу

Группа пользователей FreeIPA

Редактируем файл pg_hba.conf и вставляем строку подключения

1
2
3
4
5
$ sudo nano /etc/postgresql/14/main/pg_hba.conf
...
# Database administrative login by Unix domain socket
host    all     all     0.0.0.0/0       ldap ldapserver=freeipa.itdraft.lan ldapbasedn="cn=users,cn=accounts,dc=itdraft,dc=lan" ldapbinddn="uid=postgresql_s,cn=users,cn=accounts,dc=itdraft,dc=lan" ldapbindpasswd="passwd" ldapsearchattribute=uid
...

либо следующую строку, если хотим фильтрацию по группам

1
host    all     all     0.0.0.0/0       ldap ldapserver=freeipa.itdraft.lan ldapbasedn="cn=users,cn=accounts,dc=itdraft,dc=lan" ldapbinddn="uid=postgresql_s,cn=users,cn=accounts,dc=itdraft,dc=lan" ldapbindpasswd="passwd" ldapsearchfilter="(&(objectClass=person)(uid=$username)(memberOf=cn=g-postgres,cn=groups,cn=accounts,dc=itdraft,dc=lan))" 

Строка подключения должна идти самой первой записью, что б отрабатывала LDAP-авторизация. Одновременно ldapsearchattribute и ldapsearchfilter не работают, PostgreSQL не запустится.

Перезапускаем PostgreSQL

1
$ sudo systemctl restart postgresql

Либо перечитываем конфиг pg_hba.conf (без перезагрузки PostgreSQL)

1
$ sudo -u postgres psql -c "SELECT pg_reload_conf();"

Пользователь должен быть локально добавлен в PostgreSQL (можно без пароля)

1
$ sudo -u postgres createuser m.makarov

Проверяем

1
2
3
4
5
6
7
$ psql postgres -h 127.0.0.1 -U m.makarov -W
Password: 
psql (14.7 (Debian 14.7-1.pgdg110+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=> 
Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.