SASL
ActiveDirectory
CentOS6

ldap_bind_dnは識別名ではエラーになり、userPrincipalNameでうまくいきました

More than 1 year has passed since last update.

海外を含む広い拠点で統一的に使われているActive Directoryドメインコントローラの認証機能(ユーザ・アカウント)を、社内のごく限られたメンバーだけに立てたローカルサーバで使いたくて、wadahiroさんの「OpenLDAPでActive Directoryに対してPass-Through 認証する」を参考にチャレンジしたところ、最初は認証がうまくいかなかったのですが、userPrincipalNameを使うことでエラーを回避しました。

エラー内容

# testsaslauthd -u ユーザ名 -p パスワード
0: NO "authentication failed"
ldap_servers: ldap://yourad.org
ldap_search_base: dc=yourad,dc=org
ldap_filter: (cn=%u)
ldap_bind_dn: cn=suser,ou=users,dc=yourad,dc=org
ldap_password: secret

解決策

ldap_servers: ldap://yourad.org
ldap_search_base: dc=yourad,dc=org
ldap_filter: (sAMAccountName=%u)
ldap_bind_dn: suser@yourad.org
ldap_password: secret

suserは検索用にActive Directoryドメインコントローラにユーザとして登録してあります。secretはそのユーザのパスワードです。

変更点はldap_bind_dnです。カンマで区切る識別名ではなく、userPrincipalNameにするとうまくいきました。

正直理由はわかりません。同様の問題(Active DirectoryをOpenLDAPから使う際の問題)の解決方法でこの方法が採られていることが多いためやってみました。