
Estoy intentando configurar un servidor de replicación para LDAP usando syncrepl. Me gustaría usar Kerberos para autenticar al consumidor, porque lo tenemos configurado y parece más seguro. Las definiciones de la base de datos para mi proveedor y consumidor se encuentran a continuación.
Cuando inicio el consumidor, aparece este error:
GSSAPI Error: Unspecified GSS failure. Minor code may provide more information
(Credentials cache file '/tmp/krb5cc_55' not found)
Creo que esto significa que el consumidor no tiene un TGT válido. ¿Cómo configuro al consumidor para que obtenga un TGT válido? He leído algunas fuentes antiguas que recomiendan usar k5start o un trabajo cron. ¿Sigue siendo esta la manera de hacerlo?
Las páginas del manual de slapd.conf indican que authcid
y authzid
se puede usar junto con bindmethod=sasl
, pero no especifica cómo se deben formatear. ¿Debería poner aquí un DN o un principal de Kerberos o tal vez algo más? ¿Necesito especificarlos?
gracias por su ayuda
Configuración del consumidor:
database bdb
suffix "dc=example"
rootdn "uid=someuser,cn=realm,cn=gssapi,cn=auth"
directory /var/lib/ldap
dirtyread
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
syncrepl rid=1
provider=ldap://provider.realm
type=refreshAndPersist
starttls=yes
searchbase="dc=example"
schemachecking=off
bindmethod=sasl
saslmech=gssapi
retry="10 +"
Configuración del proveedor
database bdb
suffix "dc=example"
rootdn "uid=someuser,cn=realm,cn=gssapi,cn=auth"
directory /var/lib/ldap
dirtyread
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
Respuesta1
Creo que esto significa que el consumidor no tiene un TGT válido.
Sí, eso es exactamente lo que significa.
¿Cómo configuro al consumidor para que obtenga un TGT válido? He leído algunas fuentes antiguas que recomiendan usar k5start o un trabajo cron. ¿Sigue siendo esta la manera de hacerlo?
No estoy seguro acerca de cron, pero k5start sigue siendo un buen método.
Pero el reciente MIT Kerberos admite un método integrado llamadoiniciación de tabla de claves del cliente, que es mucho más sencillo de configurar: simplemente agréguelo $KRB5_CLIENT_KTNAME
al entorno de slapd y apúntelo al mismo archivo que $KRB5_KTNAME
. (Esto supone que tiene una tabla de claves separada para ldap/*
. Debería hacerlo).
Y finalmente puedes decirle a slapd que use gss-proxy, que es como ssh-agent para Kerberos. Establezca GSS_USE_PROXY=1
y configure /etc/gssproxy para reconocer slapd como iniciador (cliente) y aceptador (servidor).
Las páginas del manual de slapd.conf indican que authcid y authzid se pueden usar junto con bindmethod=sasl, pero no especifica cómo se deben formatear. ¿Debería poner aquí un DN o un principal de Kerberos o tal vez algo más? ¿Necesito especificarlos?
No recuerdo con qué propósitoautenticidadsirve con GSSAPI (si corresponde): IIRC, este mecanismo utiliza automáticamente la identidad determinada a partir de su ticket, por lo que no es necesario especificarla manualmente.
En el lado de aceptación, slapd convertirá el principal de Kerberos recibido en un pseudo-DN como uid=foo@realm,cn=gssapi,cn=auth
, y podrá usarlo directamente en las ACL o usarautenticación-regexp(también conocido comoolcAuthzRegexp) para traducirlo a un DN más agradable.
Mientras tanto,autenticidadFunciona de la misma manera independientemente del mecanismo. Es opcional, pero si lo especifica, debe ser un DN con el prefijo dn:
, o un nombre de usuario con el prefijo u:
. (Los nombres de usuario aquí, como authcids, se convierten en un pseudo-DN y pasan porolcAuthzRegexpy se utiliza el DN resultante).
Si las políticas lo permiten, entonces slapd le otorgará los privilegios que tiene el authzid. (Es como sudo para LDAP).
Respuesta2
Obtuve syncrepl con autenticación Kerberos trabajando con la siguiente configuración.Este sitio webacerca de nslcd.conf dice que authzid
debería tener el formato "dn:<nombre distinguido>" o "u:<nombre de usuario>". También utilicé k5start para crear un archivo de caché para someuser@REALM
at /tmp/krb5cc_55
y lo hice chown ldap:ldap
. Tenga en cuenta que 55 es el fluido ldap; sin embargo, no estoy seguro de que sea necesario nombrar el archivo con este nombre. En la configuración de mi proveedor, especifiqué someuser
para rootdn
permitirle tener acceso a toda la base de datos.
Solo quiero aclarar que esto es lo que funcionó para mí, pero tengo un conocimiento limitado de ldap, por lo que no puedo garantizar que funcione en otros lugares y no sé si todo lo que hay en esta configuración es necesario.
syncrepl rid=1
provider=ldap://provider.realm
type=refreshAndPersist
starttls=yes
searchbase="dc=realm"
schemachecking=off
retry="10 +"
tls_cacert="/path/to/ca.crt"
bindmethod=sasl
saslmech=gssapi
authcid="someuser@REALM"
authzid="uid=someuser,cn=realm,cn=gssapi,cn=auth"