Recentemente configurei um novo Samba4 Active Directory para lidar com a autenticação centralizada para minha rede de pequeno escritório. Neste servidor também há uma instância postgresql-9.5 e estou tentando autenticá-la no AD. Reconhecendo a diferença entreautenticação(isso é o que eu preciso) eautorização(Acredito que isso seja tratado inteiramente no postgresql depois que o usuário for autenticado), estou tendo problemas.
O AD é bastante básico no momento, seguindo de pertoeste tutorial. Configurei alguns usuários e a autenticação Kerberos básica parece estar funcionando (concluído com , verificado com ). Da mesma forma, funciona.kinit [email protected]
klist
smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername'
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
A propósito: servidor ubuntu-16.04, postgresql-9.5, samba-4.3.9
Pergunta:
O que está faltando na configuração do samba e/ou postgres para habilitar a autenticação no AD?
Configuração do banco de dados
A conectividade básica com o postgresql parece ser boa: está escutando nas interfaces apropriadas (tudo por enquanto), o postgres
usuário pode acessar as coisas localmente sem problemas. Eu configurei um banco de dados simples, saída de \list
:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
pgtest2 | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
com usuários listados (poresta consulta):
User name | User ID | Attributes
------------+---------+-------------------
myusername | 16384 | create database
postgres | 10 | superuser, create+
| | database
Falha na 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: , é o modo 400 e pertence a .)
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
Responder1
Recentemente enfrentei a tarefa de autenticação de usuários postgress contra controlador de domínio AD samba4 e encontrei a soluçãonesta 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 formato DOMÍNIO\nomedeusuá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 a conexão.
A desvantagem é que você receberá o erro "Autenticação mais forte necessária"no log do postgres, então você deve desabilitar a autorização Strong ldap no arquivo conf do samba, adicionando isto na configuração global:
ldap server require strong auth = No