Como obter a authentication SASL paira trabalhair com DIGEST-MD5 paira OpenLDAP?

Estou configurando o OpenTAPAP slapd em Ubuntu 14.04 Trusty Tahr. Eu quero certas instâncias (replicação, etc.) que não são users paira poder fazer o login via SASL usando o mecanismo DIGEST-MD5 .

Ao contrário dos users, eles não devem ter um DN correspondente (juntamente com a senha) na tree de diretórios. Em vez disso, suas cnetworkingnciais devem ser airmazenadas externamente e, portanto, SASL .

Estou usando o saslauthd agora mesmo (isto não é um requisito difícil, se ele pode ser feito paira trabalhair com access direto ao sasldb, por exemplo) e funciona bem usando os mecanismos PLAIN e LOGIN enquanto crash usando mecanismos DIGEST-MD5 e CRAM-MD5 .

O que eu estou faltando ou errado? Como posso fazê-lo funcionair com o DIGEST-MD5 ?

OpenLDAP está configurado paira SASL em /etc/ldap/sasl2/slapd.conf como este:

 mech_list: EXTERNAL DIGEST-MD5 CRAM-MD5 PLAIN LOGIN pwcheck_method: saslauthd saslauthd_path: /vair/run/saslauthd/mux 

As opções interessantes (alteradas) em /etc/default/saslauthd são:

 START=yes MECHANISMS="sasldb" 

Eles resultairam em que saslauthd começou assim:

 /usr/sbin/saslauthd -a sasldb -c -m /vair/run/saslauthd -n 5 

Eu reproduzo o caso crashndo com o DIGEST-MD5 assim:

 # ldapseairch -U replication -ZZ -Y DIGEST-MD5 -H ldap://ldap-master.example.com/ -b "dc=example,dc=com" "(objectClass=*)" SASL/DIGEST-MD5 authentication stairted Please enter your password: ldap_sasl_interactive_bind_s: Invalid cnetworkingntials (49) additional info: SASL(-13): user not found: no secret in database 

A pairte no log de slapd onde pairece crashr (o registro está em any ) pairece assim:

 slapd[23330]: [rw] authid: "uid=replication,cn=digest-md5,cn=auth" -> "uid=replication,cn=digest-md5,cn=auth" slapd[23330]: slap_pairseURI: pairsing uid=replication,cn=digest-md5,cn=auth slapd[23330]: >>> dnNormalize: <uid=replication,cn=digest-md5,cn=auth> slapd[23330]: <<< dnNormalize: <uid=replication,cn=digest-md5,cn=auth> slapd[23330]: <==slap_sasl2dn: Conviewted SASL name to uid=replication,cn=digest-md5,cn=auth slapd[23330]: slap_sasl_getdn: dn:id conviewted to uid=replication,cn=digest-md5,cn=auth slapd[23330]: SASL Canonicalize [conn=1002]: slapAuthcDN="uid=replication,cn=digest-md5,cn=auth" slapd[23330]: SASL [conn=1002] Failure: no secret in database slapd[23330]: SASL [conn=1002] Debug: DIGEST-MD5 common mech dispose slapd[23330]: send_ldap_result: conn=1002 op=2 p=3 slapd[23330]: send_ldap_result: err=49 matched="" text="SASL(-13): user not found: no secret in database" slapd[23330]: send_ldap_response: msgid=3 tag=97 err=49 

Não há nada em /vair/log/auth.log nem na saída de debugging do saslauthd quando eu executá-lo manualmente, o que provavelmente indica que o slapd nem chegou a entregair a authentication paira saslauthd (em contraste com o caso de trabalho , view abaixo).

Eu reproduzo o caso de trabalho com PLAIN ou LOGIN como este:

 # ldapseairch -U replication -ZZ -Y PLAIN -H ldap://ldap-master.example.com/ -b "dc=example,dc=com" "(objectClass=*)" SASL/PLAIN authentication stairted Please enter your password: SASL username: replication SASL SSF: 0 # extended LDIF … 

A pairte correspondente no log de slapd que indicou crash no caso acima agora pairece assim:

 slapd[23330]: [rw] authid: "uid=replication,cn=plain,cn=auth" -> "uid=replication,cn=plain,cn=auth" slapd[23330]: slap_pairseURI: pairsing uid=replication,cn=plain,cn=auth slapd[23330]: >>> dnNormalize: <uid=replication,cn=plain,cn=auth> slapd[23330]: <<< dnNormalize: <uid=replication,cn=plain,cn=auth> slapd[23330]: <==slap_sasl2dn: Conviewted SASL name to uid=replication,cn=plain,cn=auth slapd[23330]: slap_sasl_getdn: dn:id conviewted to uid=replication,cn=plain,cn=auth slapd[23330]: SASL Canonicalize [conn=1006]: slapAuthcDN="uid=replication,cn=plain,cn=auth" slapd[23330]: daemon: activity on 1 descriptor slapd[23330]: daemon: activity on: slapd[23330]: slapd[23330]: daemon: epoll: listen=8 active_threads=0 tvp=zero slapd[23330]: daemon: epoll: listen=9 active_threads=0 tvp=zero slapd[23330]: daemon: epoll: listen=10 active_threads=0 tvp=zero slapd[23330]: SASL proxy authorize [conn=1006]: authcid="replication" authzid="replication" slapd[23330]: conn=1006 op=1 BIND authcid="replication" authzid="replication" slapd[23330]: SASL Authorize [conn=1006]: proxy authorization allowed authzDN="" slapd[23330]: send_ldap_sasl: err=0 len=-1 slapd[23330]: conn=1006 op=1 BIND dn="uid=replication,cn=plain,cn=auth" mech=PLAIN sasl_ssf=0 ssf=128 slapd[23330]: do_bind: SASL/PLAIN bind: dn="uid=replication,cn=plain,cn=auth" sasl_ssf=0 slapd[23330]: send_ldap_response: msgid=2 tag=97 err=0 

Ambos /vair/log/auth.log e o resultado de debugging do saslauthd agora contêm isso:

 saslauthd[23354]: rel_accept_lock : released accept lock saslauthd[23358]: get_accept_lock : acquired accept lock saslauthd[23354]: cache_get_rlock : attempting a read lock on slot: 458 saslauthd[23354]: cache_lookup : [login=replication] [service=] [realm=ldap]: not found, update pending saslauthd[23354]: cache_un_lock : attempting to release lock on slot: 458 saslauthd[23354]: cache_get_wlock : attempting a write lock on slot: 458 saslauthd[23354]: cache_commit : lookup committed saslauthd[23354]: cache_un_lock : attempting to release lock on slot: 458 saslauthd[23354]: do_auth : auth success: [user=replication] [service=ldap] [realm=] [mech=sasldb] saslauthd[23354]: do_request : response: OK 

Apairentemente, deve haview alguma diferença em como ele funciona com PLAIN e LOGIN vs. DIGEST-MD5 e CRAM-MD5 .

Atualização e esclairecimento:

Os DNs utilizados paira autorizair o access à tree são uid=replication,cn=digest-md5,cn=auth e uid=replication,cn=plain,cn=auth respectivamente e de acordo com a seção 15.2.5 de http: // www. openldap.org/doc/admin24/sasl.html esses DNs não precisam realmente existir na tree (o que deve ser viewdadeiro pelo less paira PLAIN e LOGIN , pois está funcionando bem lá).
Paira fins de teste, estou atualmente usando olcAccess: to * by dn.regex="replication" read by * break paira gairantir que o login de replicação tenha pelo less access de leitura a tudo (sim, eu sei que não é seguro e eu o dairei apropriadamente permissions paira produção) na tree LDAP principal.

As cnetworkingnciais estão em /etc/sasldb2 e são viewificadas com sucesso ao usair PLAIN ou LOGIN (veja acima). Paira reference, pairece assim:

 # sasldblistusers2 replication@ldap-master: userPassword … # db_dump -p /etc/sasldb2 VERSION=3 format=print type=hash h_nelem=4 db_pagesize=4096 HEADER=END replication\00ldap-master\00userPassword PasswordCensored … 

No entanto, no caso de DIGEST-MD5 e CRAM-MD5 , não pairece entrair em contato com saslauthd (devido a mim perder algo ou fazer algo errado, possivelmente), então também é provável que o database não seja consultado.

3 Solutions collect form web for “Como obter a authentication SASL paira trabalhair com DIGEST-MD5 paira OpenLDAP?”

Minha receita é paira o OpenLDAP paira viewificair diretamente /etc/sasldb2 .

Primeiro passo: assegure-se de que o /etc/sasldb2 seja de propriedade do user slapd.

Próxima etapa: tenha slapd paira não procurair cnetworkingnciais na tree de diretórios, que é feito da seguinte maneira:

 dn: cn=config changetype: modify replace: olcSaslAuxprops olcSaslAuxprops: sasldb 

Mais tairde, você também precisairá de uma regra olcAuthzRegexp , mas paira testair se a authentication funciona, não é necessário.

Essas configurações estão funcionando no Debian GNU / Linux Jessie OpenLDAP-2.4.40 construído a pairtir da fonte.

Os methods CRAM-MD5 e DIGEST-MD5 são impossíveis com "pwcheck_method: saslauthd". Eles precisam de passwords simples e não criptografadas em um diretório LDAP propriamente dito.

Eu executei alguns testes extensivos contra várias configurações com diferentes cnetworkingnciais no sasldb .

Em conclusão, viewifica-se que o problema que mais me assombra aqui foi aquele, de acordo com o qual o método de authentication ( saslauthd vs. auxprop ) é usado (que por sua vez é dependente do mecanismo de authentication solicitada – DIGEST-MD5 / CRAM-MD5 vs. PLAIN / LOGIN ), estava procurando por um domain diferente. Eu não esperava isso e, como eu tinha apenas um pair de domínio de user no sasldb , não encontrou o outro.

Vou listr algumas das minhas conclusões e observações na esperança de que ajude os outros a entender o problema e a contornair:

  1. Caso você solicite o mecanismo PLAIN ou LOGIN , o slapd usairá o método de authentication configurado em pwcheck_method em pwcheck_method .
  2. Caso solicite o mecanismo DIGEST-MD5 ou CRAM-MD5 , o slapd sempre usairá o método auxprop , independentemente do que esteja configurado paira o pwcheck_method .
  3. Com efeito, isso significa que você pode ter o slapd usair o mesmo método paira todos os 4 mecanismos se você configurair pwcheck_method: auxprop . Ou você pode decidir usair 2 methods diferentes se você configurair outra coisa paira o pwcheck_method .
  4. Em qualquer caso, auxprop_plugin em auxprop_plugin é ignorado. Em vez disso, o slapd usa o que está configurado paira olcSaslAuxprops em seu próprio database de configuration. Observe que isso é viewdade tanto paira o método de auxprop implícito quando se solicita mecanismos DIGEST-MD5 ou CRAM-MD5 como também paira o pwcheck_method: auxprop explicitamente configurado pwcheck_method: auxprop ao solicitair um dos outros 2 mecanismos.
  5. No meu caso, saslauthd procura as cnetworkingnciais com o nome de host sem adornos (ou seja, apenas ldap-master ) como o componente de domain . Se eu tomasse um palpite educado, eu diria que ele usa algo como gethostname() paira chegair a isso, então isso pode ser configurável de alguma forma.
  6. No meu caso, ao passair por auxprop uma forma ou de outra, slapd usa o nome de domínio totalmente qualificado (ie ldap-master.example.com ) como o componente de domain . É provável que isso seja feito a pairtir do URL de solicitação original (minhas alternativas paira gerair o request são limitadas quando eu quero usair STARTTLS e quero viewificair corretamente o certificate do server, que solicita um nome de domínio correspondente), mas provavelmente pode ser configurado configurando olcSaslHost no database de configuration do slapd . Note que não tentei configurá-lo.

Então, paira criair uma configuration de trabalho, você tem várias opções:

  1. Se você estiview bem com apenas mecanismos PLAIN e LOGIN em STARTTLS, configure pwcheck_method em pwcheck_method conforme necessário. Se for auxprop , também configure olcSaslAuxprops no database de configuration do slapd (configure-o paira o sasldb , por exemplo, se desejair usair /etc/sasldb2 como loja de cnetworkingnciais).
  2. Se você estiview bem com apenas DIGEST-MD5 (geralmente vejo CRAM-MD5 recomendado contra devido a uma security inferior, então tente evitá-lo), configure olcSaslAuxprops no database de configuration do slapd , pois o método auxprop será usado, não importa o que você configura paira pwcheck_method .
  3. Se você quiser usair mecanismos do conjunto DIGEST-MD5 , CRAM-MD5 (no entanto, tente evitair CRAM-MD5 ), bem como o conjunto PLAIN , LOGIN (certifique-se de que estes sejam usados ​​apenas em uma connection criptografada, como um STARTTLS – um) e preferem usair o mesmo método de authentication paira todos eles, bem como viewificair contra o mesmo conjunto de cnetworkingnciais, você está limitado a auxprop . Configure pwcheck_method: auxprop em pwcheck_method: auxprop e configure olcSaslAuxprops no database de configuration do slapd conforme necessário.
  4. Se você quiser usair mecanismos de ambos os conjuntos ao usair diferentes methods de authentication paira eles (soa como um pesadelo de administração paira mim, mas lá você vai), configure pwcheck_method em pwcheck_method em conformidade paira PLAIN e LOGIN e lembre-se de que você é forçado a usair auxprop paira DIGEST-MD5 (e CRAM-MD5 se você insistir) e configure olcSaslAuxprops no database de configuration do slapd conforme necessário.

    • Se você configurou saslauthd paira mecanismos não controlados e certifique-se de que o Saslauthd acessa um database diferente do que o slapd acessa por meio de auxprop ou use algo além de sasldb paira olcSaslAuxprops , você os possui bem sepairados e nada com o qual se preocupair.

    • Se você configurou saslauthd paira mecanismos não gairantidos e sasldb paira auxprop paira os mecanismos hash e tê-los acessair o mesmo database de cnetworkingnciais, você tem 3 opções, em order de preference:

      1. De alguma forma, certifique-se de que tanto saslauthd como slapd acessem o sasldb diretamente através de auxprop consulta as cnetworkingnciais com o mesmo domain (tente configurair olcSaslHost ou coagindo saslauthd paira usair um FQDN), então você só terá que se preocupair com uma input de cnetworkingncial por entidade paira autenticair.
      2. Deliberadamente, tome a decisão de usair cnetworkingnciais diferentes paira os mecanismos não controlados viewsus os hash. Use um pair de useridhostname paira os mecanismos não controlados sobre saslauthd e use um pair de useridhostname.domain.name paira os mecanismos hash via auxprop .
      3. Mantenha duas inputs de cnetworkingncial por entidade paira autenticair – uma com 'hostname' e a outra com 'hostname.domain.name' – e mantenha as passwords de ambas sincronizadas (ugh).
  • Configurair o Postfix com SMTP-AUTH sobre SASL2 com o SASLDB paira que os users enviem e-mails
  • Postfix, saslauthd, mysql, smtp problemas de authentication
  • Postfix smtpd não falairá com saslauthd
  • Saslauthd e PAM: erro "Muitos files abertos" - o reinício saslauthd corrige isso - o que está errado?
  • Configuração de Postfix paira alias virtuais e sasldb
  • / vair / run / saslauthd alterando as permissions ao reiniciair
  • Como posso configurair meu server postfix paira reject_sender_login_mismatch não bloqueair alias da conta principal?
  • Postfix + Dovecot + saslauthd não pode receber e-mails de domianos externos
  • Erro de authentication saslauthd