postgresql auth no diretório ativo do samba

1

Eu configurei recentemente um novo Samba4 Active Directory para lidar com a autenticação centralizada da minha rede de pequena empresa. Neste servidor também é uma instância do postgresql-9.5, e estou tentando autenticá-lo no AD. Reconhecendo a diferença entre autenticação (isto é o que eu preciso) e autorização (eu acredito que isso é tratado inteiramente dentro do postgresql depois que o usuário foi autenticado), eu estou correndo problemas.

O AD é bastante baunilha no momento, seguindo de perto este howto . Eu configurei alguns usuários e a autenticação básica do kerberos parece estar funcionando (feita com kinit [email protected] , verificada com klist ). Da mesma forma, smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername' funciona.

O localhost está resolvendo para o samba AD e o encaminhamento de DNS está indo para o upstream corretamente. Estes trabalhos:

$ host -t SRV _ldap._tcp.samdom.mydomain.tld
$ host -t SRV _kerberos._udp.samdom.mydomain.tld
$ host -t A myhost.samdom.mydomain.tld

BTW: servidor ubuntu-16.04, postgresql-9.5, samba-4.3.9

Pergunta:

O que estou faltando na configuração do samba e / ou postgres para habilitar a autenticação contra o AD?

Configuração do banco de dados

A conectividade básica com o postgresql parece ser boa: ele está escutando nas interfaces apropriadas (tudo por enquanto), o usuário postgres pode acessar as coisas localmente sem problemas. Eu configurei um banco de dados simples, com saída de \list :

   Name    |   Owner    | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
 pgtest2   | myusername | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

com os usuários listados (por esta consulta ):

 User name  | User ID |    Attributes
------------+---------+-------------------
 myusername |   16384 | create database
 postgres   |      10 | superuser, create+
            |         | database

Falha no Autenticação

No entanto, quando tento no console:

$ 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

De /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"

Arquivos de configuração

O arquivo de configuração (porções) que considero apropriado e necessário:

  • /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'
    

    (O keytab foi gerado com: samba-tool domain exportkeytab postgres.keytab -U postgres/[email protected] , é o modo 400 e pertence a 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
    
por r2evans 23.06.2016 / 23:23

1 resposta

1

Recentemente, enfrentei a tarefa de autenticação dos usuários do postgress contra o controlador de domínio samba4 AD e encontrei a solução nesta página . Como você pode ver, a entrada pg_hba.conf no seu caso seria:

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

ou se preferir autenticar usuários no formulário DOMÍNIO \ nome de usuário:

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

O rol deve ser criado no banco de dados, além do AD, porque o mecanismo de autorização, como você observou acima, é feito dentro do postgres. Em seguida, reinicie o postgresql e tente conexão.

A desvantagem é que você obterá o erro " Autenticação strong (er) necessária " no log postgres, portanto, você deve desabilitar a autorização do Strong ldap no arquivo samba conf, adicionando isso no global setcion :

ldap server require strong auth = No
    
por 23.11.2017 / 13:26