postgresql auth против samba active directory

1

Недавно я настроил новый Samba4 Active Directory для обработки централизованной аутентификации в моей небольшой офисной сети. На этом сервере также есть экземпляр postgresql-9.5, и я пытаюсь проверить его подлинность на AD. Признавая разницу между аутентификацией (это то, что мне нужно) и авторизацией (я полагаю, что это делается полностью в postgresql после аутентификации пользователя), я сталкиваюсь с проблемами.

На данный момент AD довольно ванильный, внимательно следит за этим руководством . Я настроил некоторых пользователей, и похоже, что базовая аутентификация Kerberos работает (сделано с kinit myusername@SAMDOM.MYDOMAIN.TLD, проверено с помощью 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 myusername@SAMDOM.MYDOMAIN.TLD -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:

myusername@SAMDOM.MYDOMAIN.TLD@pgtest2 LOG:  could not receive data from client: Connection reset by peer
myusername@SAMDOM.MYDOMAIN.TLD@pgtest2 FATAL:  GSSAPI authentication failed for user "myusername@SAMDOM.MYDOMAIN.TLD"
myusername@SAMDOM.MYDOMAIN.TLD@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'
    

    (Таблица ключей была сгенерирована с:, samba-tool domain exportkeytab postgres.keytab -U postgres/myhost.samdom.mydomain.tld@SAMDOM.MYDOMAIN.TLDявляется режимом 400 и принадлежит 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
    
r2evans
источник
Приветствуются комментарии о том, как улучшить вопрос, что еще включить, или о других методах, облегчающих обсуждение. (Жаль, что я не мог бы предоставить больше щедрости с моей учетной записи SO ...)
r2evans

Ответы:

1

Недавно я столкнулся с задачей аутентификации пользователей postgress на контроллере домена samba4 AD и нашел решение на этой странице . Как вы можете видеть, запись pg_hba.conf в вашем случае будет выглядеть так:

host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="" ldapsuffix="@SAMDOM.MYDOMAIN.TLD"

или если вы предпочитаете аутентифицировать пользователей в форме DOMAIN \ username:

host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="SANDOM\" ldapsuffix=""

Rol должен быть создан в базе данных в дополнение к AD, потому что механизм авторизации, как вы отметили выше, выполняется внутри postgres. Затем перезапустите postgresql и попробуйте подключиться.

Недостатком является то, что вы получите сообщение об ошибке « Требуется строгая (er) аутентификация » в журнале postgres, поэтому вы должны отключить авторизацию Strong ldap в conf-файле samba, добавив это в global setcion:

ldap server require strong auth = No
Исидоро Арройо Баррантес
источник
Спасибо Исидоро, я посмотрю на это немного больше. Я не в восторге от уменьшения «сильной аутентификации» в самбе, поэтому мне нужно разобраться в последствиях этого.
r2evans
Кстати: устаревшая ссылка, поскольку OpenSCG была куплена Amazon, и эта страница теперь не права. Если / пока он не будет переиздан должным образом, веб-архив будет доступен с 24 ноября 2017 года .
r2evans
Спасибо, r2evans. Я обновил ссылку на web.archive.
Исидоро Арройо Баррантес
Я должен был принять это давным-давно. Я все еще не доволен ответом, но это из-за нескольких нюансов с Samba4 и вспомогательной аутентификации других библиотек / приложений. Я прошу прощения за то, что так долго ждал, чтобы отдать вам должное, Исидоро.
r2evans