コンテンツにスキップ

BindとSASL認証

LDAP の Bind は、LDAP クライアントが LDAP サーバーに認証する操作である。Simple Bind と SASL Bind がよく使われる。


Bind は、LDAP 接続上で「自分は誰か」を LDAP サーバーに示す操作である。

Bind した認証 ID により、LDAP サーバーは ACL に基づいて検索・変更・削除などを許可するか判断する。

client -> Bind -> slapd
-> access control

Bind せず匿名で検索できる設定もあるが、運用では必要な範囲だけ許可する。


Simple Bind は、Bind DN とパスワードで認証する方式である。

Terminal window
ldapwhoami \
-x \
-D "uid=ldapuser,ou=people,dc=example,dc=com" \
-W
オプション 意味
-x SASL ではなく Simple Bind を使う
-D Bind DN を指定する
-W パスワードを対話入力する

Simple Bind ではパスワードが認証情報になるため、平文の ldap:// で流すべきではない。StartTLS または ldaps:// を使って通信を保護する。


SASL は Simple Authentication and Security Layer の略で、LDAP に限らない認証フレームワークである。

LDAP では、SASL を使って次のような認証方式を利用できる。

  • EXTERNAL
  • GSSAPI
  • DIGEST-MD5(旧式)

OpenLDAP のローカル管理では、特に EXTERNAL がよく出てくる。


SASL EXTERNAL は、LDAP プロトコル内のパスワードではなく、接続経路の外側で確立済みの認証情報を使う方式である。

OpenLDAP では、 ldapi:/// の Unix ドメインソケット経由で接続し、OS の接続元資格情報を使う構成がよく使われる。

Terminal window
sudo ldapwhoami \
-Y EXTERNAL \
-H ldapi:///

概念的には次の流れである。

Linux root
-> Unix domain socket
-> slapd checks peer credentials
-> SASL EXTERNAL identity
-> ACL

Debian 系では、ローカル root 相当の SASL EXTERNAL identity に cn=config の管理権限を与える構成がよく使われる。ただし、これは普遍的な仕様ではなく ACL 設定による。


オプション 役割
-x Simple Bind を使う
-D "dn" Bind DN を指定する
-W Bind パスワードを対話入力する
-w password Bind パスワードをコマンドラインで指定する
-Y EXTERNAL SASL EXTERNAL を使う
-H ldap://host 接続先 URI を指定する
-ZZ StartTLS を要求する

-w は履歴やプロセス一覧に残る可能性があるため、学習用以外では避ける。通常は -W で対話入力する。


Linux ログインで LDAP を使う場合、PAM が LDAP Bind を利用してパスワードを確認する構成がある。

user enters password
-> login program
-> PAM
-> nslcd / SSSD
-> LDAP Bind as user
-> success or failure

このときの LDAP Bind は、LDAP サーバーから見ると普通の認証操作である。Linux ログインから見ると、PAM が使う認証手段のひとつになる。


URI 接続方法
ldap://host TCP 389。通常の LDAP 接続。StartTLS で暗号化できる
ldaps://host TCP 636。最初から TLS で接続する
ldapi:/// Unix ドメインソケット経由のローカル接続

ldap:// は常に危険という意味ではなく、StartTLS で TLS へ昇格できる。ただし、Simple Bind のパスワードを平文のまま送らないことが重要である。



  • RFC 4513 LDAP の認証方式、Simple Bind、SASL、セキュリティ考慮事項。

  • RFC 6331 DIGEST-MD5 を Historic とする理由と移行上の注意。