Недавно я настроил новый Samba4 Active Directory для централизованной аутентификации в моей небольшой офисной сети. На этом сервере также есть экземпляр postgresql-9.5, и я пытаюсь настроить его на аутентификацию в AD. Осознание разницы междуаутентификация(это то, что мне нужно) иавторизация(Я полагаю, что это полностью обрабатывается в postgresql после аутентификации пользователя), у меня возникли проблемы.
AD на данный момент довольно примитивен, он следуетэто руководство. Я настроил несколько пользователей, и базовая аутентификация kerberos, похоже, работает (сделано с , проверено с ). Аналогично, работает.kinit [email protected]
klist
smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername'
Локальный хост разрешается в samba AD и DNS-пересылка идет вверх по течению правильно. Это работает:
$ host -t SRV _ldap._tcp.samdom.mydomain.tld
$ host -t SRV _kerberos._udp.samdom.mydomain.tld
$ host -t A myhost.samdom.mydomain.tld
Кстати: сервер ubuntu-16.04, postgresql-9.5, samba-4.3.9
Вопрос:
Что я упускаю из виду в конфигурации Samba и/или Postgres для включения аутентификации через AD?
Настройка БД
Базовая связь с postgresql, похоже, хорошая: он прослушивает соответствующие интерфейсы (все на данный момент), пользователь postgres
может получить доступ к вещам локально без проблем. Я настроил простую базу данных, вывод из \list
:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
pgtest2 | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
с пользователями, перечисленными (поэтот запрос):
User name | User ID | Attributes
------------+---------+-------------------
myusername | 16384 | create database
postgres | 10 | superuser, create+
| | database
Ошибка аутентификации
Однако, когда я пробую на консоли:
$ psql -h myhost.samdom.mydomain.tld -U [email protected] -d pgtest2
psql: GSSAPI continuation error: Unspecified GSS failure. Minor code may provide more information
GSSAPI continuation error: No Kerberos credentials available
От /var/log/postgresql/postgresql-9.5-main.log
:
[email protected]@pgtest2 LOG: could not receive data from client: Connection reset by peer
[email protected]@pgtest2 FATAL: GSSAPI authentication failed for user "[email protected]"
[email protected]@pgtest2 DETAIL: Connection matched pg_hba.conf line 92: "host all all 0.0.0.0/0 gss krb_realm=SAMDOM.MYDOMAIN.TLD include_realm=1 map=krb"
Файлы конфигурации
Файл конфигурации (части), которые я считаю подходящими и необходимыми:
/etc/postgresql/9.5/main/pg_hba.conf
:local all postgres peer local all all peer host all all 0.0.0.0/0 gss krb_realm=SAMDOM.MYDOMAIN.TLD include_realm=1 map=krb host all all 127.0.0.1/32 md5 host all all ::1/128 md5
/etc/postgresql/9.5/main/postgres.conf
:krb_server_keyfile = '/var/lib/postgresql/9.5/main/postgres.keytab'
(Keytab был создан с помощью: , имеет режим 400 и принадлежит .)
samba-tool domain exportkeytab postgres.keytab -U postgres/[email protected]
postgres:postgres
/etc/samba/smb.conf
:# Global parameters [global] workgroup = SAMDOM realm = SAMDOM.MYDOMAIN.TLD netbios name = MYHOST interfaces = lo eno1 bind interfaces only = Yes server role = active directory domain controller dns forwarder = 11.22.33.254 idmap_ldb:use rfc2307 = yes tls enabled = yes tls keyfile = tls/key.pem tls certfile = tls/cert.pem tls cafile = tls/ca.pem [netlogon] path = /var/lib/samba/sysvol/samdom.mydomain.tld/scripts read only = No [sysvol] path = /var/lib/samba/sysvol read only = No
решение1
Недавно я столкнулся с задачей аутентификации пользователей postgress на контроллере домена Samba4 AD и нашел решениена этой странице. Как видите, запись pg_hba.conf в вашем случае будет выглядеть так:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="" ldapsuffix="@SAMDOM.MYDOMAIN.TLD"
или если вы предпочитаете аутентифицировать пользователей в форме ДОМЕН\имя_пользователя:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="SANDOM\" ldapsuffix=""
Роль должна быть создана в базе данных в дополнение к AD, поскольку механизм авторизации, как вы отметили выше, выполняется внутри postgres. Затем перезапустите postgresql и попробуйте подключиться.
Недостатком является то, что вы получите ошибку "Требуется строгая аутентификация" в журнале postgres, поэтому необходимо отключить строгую авторизацию ldap в файле конфигурации samba, добавив это в глобальный раздел:
ldap server require strong auth = No