SASL と LDAP

以前から、認証系の統一に興味があって、LDAP について調べたり試したりしているんだけど、どうしても SASL が絡むと思うようにいかない。

目標は、LDAP に対する認証と、SASL を使う認証を統一したい、というところなんだけど、SASL のバックエンドに LDAP サーバを置いて、SASL が LDAP の userPassword から平文のパスワードを取得して、メールサーバなどの認証に SASL の CRAM-MD5、DIGEST-MD5 を使い、OS のログインにも LDAP を使う、というのが実現できない。

とりあえず、LDAP を使ってログイン認証、というのは成功したのだけど、SASL がどうにもこうにも。LDAP 自体もバインド時の認証に SASL を使う場合に、sasldb を使うような、「認証だけは SASL にお任せ」方式の話は見つかるけど、それだと、LDAP で簡易認証する時と、SASL 認証するときでパスワード管理が別になってしまう。しかも、pam_ldap を使った認証をする場合、LDAP に対して簡易認証となっているらしいので、これでは、SASL を使うアプリケーションでの認証と OS 認証が別々になってしまう。

ものの本には、openldap の 2.1 以降と、cyrus-sasl の 2.1 以降では、SASL がldap の上の userPassword 属性を取得して SASL に使えるような記述があるんだけど、具体的な設定などは書いてない。どうも SASL 自体に関するドキュメントが不足気味のような気がするなぁ。