ldapsearch
を使用してLDAPディレクトリをテストしたい。 LDAPディレクトリーにはパスワードは保管されません。アカウントのパスワードはKerberosに保存され、LDAPにはKerberosプリンシパルへのポインタが含まれています。 LDAPには属性userPassword
があります
Attribute Name: 'userPassword'
OID: 2.5.4.35
URN: urn:oid:2.5.4.35
Multiple Values: Multi-valued (treated as Single-valued)
コマンドでユーザーを検索してみた
$ ldapsearch -vvv -x -D 'cn=xxxxxx,ou=xxx,dc=xxxx,dc=xxx' -h 'xxxxxxxx.xxxx.xxx' -W
ldap_initialize( ldap://xxxxxxxx.xxxx.xxx )
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
LDAPサーバー自体はパスワードを格納しないため、LDAPサーバーは認証情報を取得できないようです。このような状況で検索はできますか? Kerberos経由でLDAPを使用してログインを認証する方法
ここでは2つの可能な認証方法があります。
"偽の"Kerberos。LDAPサーバーはプレーンなパスワードを受け取り、そのパスワードを使用してTGTを取得しようとすることによってそれをチェックします。これをOpenLDAPで使用するには、以下が必要です。
userPassword
属性は、特別な値{SASL}user@REALM
に設定する必要があります(もちろん、実際のKerberosプリンシパルを使用)。 {SASL}
の後のテキストは、OpenLDAPがlibsaslに提供するユーザー名と受信したパスワードです。
libsaslは、パスワードチェックメカニズムとしてsaslauthd
を使用するように構成する必要があります。これには、以下を/usr/lib/sasl2/slapd.conf
に入れます。
pwcheck_method: saslauthd
そして、SASL PLAINメカニズムを提供する別の行:
mech_list: plain
同じサーバー上でsaslauthdデーモンが実行されている必要があります(これはlibsaslの一部です。通常は「cyrus-sasl」または「sasl2-bin」パッケージです)。このデーモンは、OpenLDAPまたは他のサーバーに代わって実際のパスワード検証を実行します。
saslauthdデーモンも、コマンドラインオプションとして‑a kerberos5
を使用してKerberos 5を使用するように設定する必要があります。
これにより、単純なバインド(ldapsearch ‑x ‑D ... ‑W
)またはSASL PLAINバインド(ldapsearch ‑Y PLAIN
)でKerberosパスワードを使用できるようになります。ただし、ネットワークを介してパスワードを保護するためにKerberos機能を利用しないため、依然として「偽物」です。
「実際の」Kerberos。LDAPサーバーはKerberosチケットを受け取り、それをローカルのキータブと照合します。パスワードを明かす必要はありません。これをOpenLDAPで使用するには、以下が必要です。
システムキータブにはldap/fqdn@REALM
プリンシパルのキーが必要です。fqdn
はサーバーのIPアドレスの逆引きDNSと一致する必要があります。 ktadd
のkadmin
コマンドを使用して、キーをキータブに抽出できます。
キータブには、OpenLDAPからもアクセスできる必要があります(通常、ldap
またはslapd
アカウント)。 (必要に応じて、システムファイルのseparate keytabファイルを使用できます。この場合、OpenLDAPには、専用のキータブを指す$KRB5_KTNAME
環境変数が必要です。)
サーバー上のlibsaslは、GSSAPIやGS2-KRB5メカニズムを提供するように構成する必要があります。通常はこれがデフォルトですが、可能性があるを/usr/lib/sasl2/slapd.conf
に入力する必要があります。
mech_list: gs2-krb5 gssapi plain
サーバーにはパスワードのチェックがないため、saslauthdはオプションです。
これにより、クライアントでkinit
を実行し、取得したチケットをSASL GSSAPIバインド(ldapsearch -Y GS2-KRB5
またはldapsearch -Y GSSAPI
)で使用できるようになります。