4

centos vm(boot2docker vmを使用して実行)にldapサーバー+ kerberosセットアップがあり、それらをWebアプリケーション認証(ホストから-私のmacbook)に使用しようとしています。

認証には、単純なバインドではなく、「GSSAPI」メカニズムを使用する必要があります。「シンプル バインド」は完全に機能していますが、「GSSAPI」ベースのアプローチは機能していません。

「ldapwhoami」コマンドを試すたびに、次のエラーが発生します (有効な kerberos TGT があることを確認するために、ldapwhoami を実行する前に「kinit」を実行しました)。

ldap_sasl_interactive_bind_s: Local error (-2)
    additional info: SASL(-1): generic failure: GSSAPI Error:  Miscellaneous failure (see text (unable to reach any KDC in realm DEV.EXAMPLE.COM, tried 1 KDC)

LDAPサーバーとkerberosサーバー側が完全に機能していることに注意してください。つまり、ldapサーバーとkerberosセットアップがあるcentos VMで「ldapsearch」、「ldapwhoami」などを使用してテストしたことを意味します。正常に動作しています。それらの適切な出力を確認できます。

ラップトップ (クライアント) から同じコマンドを試行した場合にのみ、エラー (上記のエラー) が発生します。

注:ラップトップからホストプリンシパル(host/mymacbook.dev@DEV.EXAMPLE.COM)を作成し、「kadmin」を使用してローカルのkrb5.keytabファイルに追加しました。

以下は私のクライアント側の設定です:

クライアント (macbook) の /etc/krb5.conf ファイル:

[libdefaults]
  default_realm    = DEV.EXAMPLE.COM
  ticket_lifetime  = 24000
  dns_lookup_realm = false
  dns_lookup_kdc   = false

[realms]
  DEV.EXAMPLE.COM = {
    kdc = d4dc7089282c
    admin_server = krb.example.com
  }

[domain_realm]
  .dev.example.com = DEV.EXAMPLE.COM
  dev.example.com = DEV.EXAMPLE.COM
  .example.com = DEV.EXAMPLE.COM
  example.com = DEV.EXAMPLE.COM

[appdefaults]
  pam = {
    debug           = false
    ticket_lifetime = 36000
    renew_lifetime  = 36000
    forwardable     = true
    krb4_convert    = false
  }

[logging]
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmin.log

クライアント (macbook) の /etc/hosts ファイル:

127.0.0.1       localhost
192.168.59.3    mymacbook.dev
255.255.255.255 broadcasthost
::1             localhost


192.168.59.103  ldapserver.example.com
192.168.59.103  d4dc7089282c
192.168.59.103  krb.example.com

192.168.59.103 は私の boot2docker vm IP であり、LDAP および kerberos に関連するすべてのデフォルト ポート (88、389、464、および 749) で、boot2docker vm から docker イメージへのポート転送を行っています。

なぜこのエラーが発生するのですか?

ldap_sasl_interactive_bind_s: Local error (-2)
        additional info: SASL(-1): generic failure: GSSAPI Error:  Miscellaneous failure (see text (unable to reach any KDC in realm DEV.EXAMPLE.COM, tried 1 KDC)

それはDNSまたは何か他のものに関連していますか? 助言がありますか?

4

3 に答える 3

4

コンテナ化された KDC を外部から到達可能にするには、複数のものが必要です。

デフォルトのポート 88 を使用していると仮定し、イメージの名前がdocker-kdcであると仮定します。

  1. ポート 88 が公開されていることを確認します。

EXPOSE 88

  1. KDC デーモンがそのポートでリッスンしていることを確認してください。この例では、単に KDC をエントリポイントとして使用しています。それが特定の例に当てはまらない場合は、推定できるはずです。

ENTRYPOINT ["/usr/lib/heimdal-servers/kdc", "--config-file=/etc/heimdal-kdc/kdc.conf", "-P 88"]

  1. コンテナーを実行するとき、48088 へのポート転送を使用しています。KDC はTCP と UDPの両方を使用することに注意してください。

docker run -d -h kdc --name kdc -p 48088:88/udp -p 48088:88 docker-kdc

この時点から、ホスト システム内から KDC にアクセスできるようになります。


=== OSX のみ===

  1. OSX (boot2docker -> VirtualBox) を使用しているため、OSX 環境へのポート転送もセットアップする必要があります。

VBoxManage controlvm boot2docker-vm natpf1 "48088/tcp,tcp,127.0.0.1,48088,,48088"

VBoxManage controlvm boot2docker-vm natpf1 "48088/udp,udp,127.0.0.1,48088,,48088"


  1. 必要に応じて、docker コンテナーの IP アドレスを取得します。

    • プレーンな docker (Linux 上) を使用する場合、単純に loopback を使用できます127.0.0.1

    • (OSX 上で) boot2docker を使用する場合、以下を使用して取得します。boot2docker ip

  2. KDC を使用する最小限の krb5.conf を準備します。この例では、ドメイン example.com で EXAMPLE.COM というレルムを使用しています。IPを手順 5 の結果に置き換える必要があることに注意してください。

[libdefaults]

    default_realm = EXAMPLE.COM
    noaddresses = true

[レルム]

    EXAMPLE.COM = {
            kdc = IP:48088
            admin_server = IP:48088
    }

[ドメイン_レルム]

    example.com = EXAMPLE.COM
    .example.com = EXAMPLE.COM
  1. 次に、その構成をテストします。

export KRB5_CONF=PATH_TO_THE_KRB5.CONF_FILE_FROM_STEP_6

kinit test/foo.example.com@EXAMPLE.COM

私のプロジェクトでこれを行う必要があったため、すべてをいくつかの小さなスクリプトにまとめました。これは、今後の調​​査に役立つ可能性があります。 https://github.com/tilt/docker-kdc

于 2014-11-25T00:00:47.213 に答える
1

krb5.confファイルが/etcディレクトリにあることを確認します。同じ問題があり、ファイアウォールの問題はありませんでしたが、同じエラーが発生していました。最後に、krb5.conf ファイルを/etcディレクトリに移動することで問題を解決できました。

于 2017-01-12T21:12:06.493 に答える