Recientemente configuré un nuevo Directorio Activo Samba4 para manejar la autenticación centralizada para la red de mi pequeña oficina. En este servidor también hay una instancia de postgresql-9.5 y estoy intentando que se autentique en AD. Reconociendo la diferencia entreautenticación(esto es lo que necesito) yautorización(Creo que esto se maneja completamente dentro de postgresql una vez que el usuario ha sido autenticado), tengo problemas.
El AD es más bien vainilla en este momento, siguiendo de cercaeste cómo. He configurado algunos usuarios y la autenticación Kerberos básica parece estar funcionando (realizada con , verificada con ). Del mismo modo, funciona.kinit [email protected]
klist
smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername'
El host local se está resolviendo en el AD de samba y el reenvío de DNS avanza correctamente. Estos funcionan:
$ host -t SRV _ldap._tcp.samdom.mydomain.tld
$ host -t SRV _kerberos._udp.samdom.mydomain.tld
$ host -t A myhost.samdom.mydomain.tld
Por cierto: servidor ubuntu-16.04, postgresql-9.5, samba-4.3.9
Pregunta:
¿Qué me falta en la configuración de samba y/o postgres para habilitar la autenticación contra el AD?
Configuración de base de datos
La conectividad básica con postgresql parece ser buena: está escuchando en las interfaces apropiadas (todas por ahora), el postgres
usuario puede acceder a cosas localmente sin problemas. Configuré una base de datos simple, salida de \list
:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
pgtest2 | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
con usuarios listados (poresta consulta):
User name | User ID | Attributes
------------+---------+-------------------
myusername | 16384 | create database
postgres | 10 | superuser, create+
| | database
Autenticación fallida
Sin embargo, cuando lo intento en la consola:
$ 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"
Archivos de configuración
El archivo de configuración (porciones) que creo que son apropiadas y necesarias:
/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'
(La tabla de claves se generó con: , es el modo 400 y es propiedad de ).
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
Respuesta1
Recientemente me enfrenté a la tarea de autenticación de usuarios de postgress contra el controlador de dominio AD samba4 y encontré la solución.en esta pagina. Como puedes ver, la entrada pg_hba.conf en tu caso sería:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="" ldapsuffix="@SAMDOM.MYDOMAIN.TLD"
o si prefiere autenticar usuarios en el formato DOMINIO\nombre de usuario:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="SANDOM\" ldapsuffix=""
El rol debe crearse en la base de datos además de AD porque el mecanismo de autorización, como señaló anteriormente, se realiza dentro de postgres. Luego reinicie postgresql e intente la conexión.
La desventaja es que obtendrás el error "Se requiere una autenticación (más) sólida" en el registro de Postgres, por lo que debes deshabilitar la autorización ldap fuerte en el archivo de configuración de Samba, agregando esto en la configuración global:
ldap server require strong auth = No