web-dev-qa-db-ja.com

Kerberosで認証するLDAPをテストする方法

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
user2196452

ここでは2つの可能な認証方法があります。

  1. "偽の"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機能を利用しないため、依然として「偽物」です。

  2. 「実際の」Kerberos。LDAPサーバーはKerberosチケットを受け取り、それをローカルのキータブと照合します。パスワードを明かす必要はありません。これをOpenLDAPで使用するには、以下が必要です。

    • システムキータブにはldap/fqdn@REALMプリンシパルのキーが必要です。fqdnはサーバーのIPアドレスの逆引きDNSと一致する必要があります。 ktaddkadminコマンドを使用して、キーをキータブに抽出できます。

    • キータブには、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)で使用できるようになります。

2
user1686