
Estou tentando configurar um servidor de replicação para LDAP usando o syncrepl. Gostaria de usar o Kerberos para autenticar o consumidor, porque temos ele configurado e parece mais seguro. As definições de banco de dados para meu provedor e consumidor estão abaixo.
Quando inicio o consumidor, recebo este erro:
GSSAPI Error: Unspecified GSS failure. Minor code may provide more information
(Credentials cache file '/tmp/krb5cc_55' not found)
Acho que isso significa que o consumidor não tem um TGT válido. Como configuro o consumidor para obter um TGT válido? Eu li algumas fontes mais antigas que recomendam o uso do k5start ou de um cron job. Essa ainda é a maneira de fazer isso?
As páginas de manual do slapd.conf afirmam que authcid
e authzid
podem ser usadas em conjunto com bindmethod=sasl
, mas não especificam como elas devem ser formatadas. Devo colocar um DN aqui ou um principal Kerberos ou talvez outra coisa? Preciso especificá-los?
obrigado pela ajuda
Configuração do 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 +"
Configuração do provedor
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
Responder1
Acho que isso significa que o consumidor não tem um TGT válido.
Sim, é exatamente isso que significa.
Como configuro o consumidor para obter um TGT válido? Eu li algumas fontes mais antigas que recomendam o uso do k5start ou de um cron job. Essa ainda é a maneira de fazer isso?
Não tenho certeza sobre o cron, mas o k5start ainda é um bom método.
Mas o recente Kerberos do MIT suporta um método integrado chamadoiniciação do keytab do cliente, que é muito mais simples de configurar: basta adicionar $KRB5_CLIENT_KTNAME
ao ambiente do slapd e apontar para o mesmo arquivo que $KRB5_KTNAME
. (Isso pressupõe que você tenha um keytab separado para ldap/*
. Você deveria.)
E finalmente você pode dizer ao slapd para usar o gss-proxy, que é como o ssh-agent para Kerberos. Defina GSS_USE_PROXY=1
e configure /etc/gssproxy para reconhecer o slapd como iniciador (cliente) e aceitador (servidor).
As páginas de manual do slapd.conf afirmam que authcid e authzid podem ser usados em conjunto com bindmethod=sasl, mas não especifica como eles devem ser formatados. Devo colocar um DN aqui ou um principal Kerberos ou talvez outra coisa? Preciso especificá-los?
Não me lembro qual o propósito doautcidserve com GSSAPI (se houver) – IIRC, esse mecanismo usa automaticamente a identidade determinada em seu ticket, portanto não há necessidade de especificá-la manualmente.
Do lado da aceitação, o slapd converterá o principal Kerberos recebido em um pseudo-DN como uid=foo@realm,cn=gssapi,cn=auth
, e você poderá usá-lo diretamente nas ACLs ou usarauthz-regexp(também conhecido comoolcAuthzRegexp) para traduzi-lo para um DN melhor.
Enquanto isso,autorizadofunciona da mesma maneira independente do mecanismo. É opcional, mas se você especificá-lo, deverá ser um DN prefixado com dn:
ou um nome de usuário prefixado com u:
. (Os nomes de usuário aqui, como authcids, são convertidos em um pseudo-DN e passam porolcAuthzRegexp, e o DN resultante é usado.)
Se as políticas permitirem, o slapd concederá a você os privilégios que o authzid possui. (É como sudo para LDAP.)
Responder2
Consegui o syncrepl com autenticação Kerberos trabalhando com a seguinte configuração.Esse sitesobre nslcd.conf diz que authzid
deve ter o formato "dn:<nome distinto>" ou "u:<nome de usuário>". Também usei o k5start para criar um arquivo de cache para someuser@REALM
at /tmp/krb5cc_55
e o fiz chown ldap:ldap
. Observe que 55 é o ldap uid; no entanto, não tenho certeza se é necessário nomear o arquivo assim. Na configuração do meu provedor, especifiquei someuser
como rootdn
para permitir que ele tenha acesso a todo o banco de dados.
Só quero esclarecer que foi isso que funcionou para mim, mas tenho um conhecimento limitado de ldap, então não posso garantir que funcionará em outro lugar e não sei se tudo nesta configuração é necessário.
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"