2014-11-21 19 views
3

我在centos虛擬機(使用boot2docker虛擬機運行)中有一個ldap服務器+ kerberos安裝程序我試圖將它們用於我的Web應用程序身份驗證(從主機 - 我的macbook )。openldap + kerberos - 無法到達域中的任何KDC

對於身份驗證,我需要使用「GSSAPI」機制,而不是簡單的綁定。 「簡單綁定」工作正常,但「GSSAPI」方法無法正常工作。

我收到以下錯誤,每當我嘗試「ldapwhoami命令」命令(我跑「的kinit」運行ldapwhoami命令之前,爲了確保我擁有有效的Kerberos TGT)

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服務器端正在完美工作,意味着我測試了它們在諸如「ldapsearch」,「ldapwhoami」等Centos虛擬機中的地方,我有我的ldap服務器+ kerberos安裝程序,它的工作正常。我能夠看到適當的輸出。

只有當我從我的筆記本電腦(客戶端)嘗試相同的命令時出現錯誤(高於錯誤)。

注意:即使我從我的筆記本電腦創建主機主體(host/[email protected]),並使用'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 

/etc/hosts文件中的客戶端文件(的MacBook):

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,並且我正在執行從boot2docker vm到所有與LDAP和Kerberos相關的默認端口上的docker映像的端口轉發(88,389,464 & 749)

任何想法,爲什麼我得到這個錯誤?

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還是別的?有什麼建議麼?

回答

2

您需要多種東西才能從外部訪問集裝箱式KDC。

假設您使用的是端口88,因爲這是默認設置,並且假設您的映像名爲docker-kdc

  1. 確保您的端口88被暴露。

EXPOSE 88

  • 確保您的KDC守護程序監聽端口上。爲了這個例子,我簡單地使用KDC作爲入口點,如果那不適用於你的具體例子,你應該能夠推斷出來。
  • ENTRYPOINT ["/usr/lib/heimdal-servers/kdc", "--config-file=/etc/heimdal-kdc/kdc.conf", "-P 88"]

  • 當運行容器,我使用的端口朝向48088.注意,KDC同時使用,TCP和UDP轉發。
  • docker run -d -h kdc --name kdc -p 48088:88/udp -p 48088:88 docker-kdc

    從這點上來說,你的KDC應該是從主機系統內到達。


    === OSX只有 ===

  • 現在給定正在使用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"


  • 如果需要獲取您的搬運工容器的IP地址。

    • 當使用普通泊塢窗(在Linux上),你可以簡單地使用Loopback 127.0.0.1

    • 當使用(在OSX)boot2docker,你會得到使用:boot2docker ip

  • 準備一個最小的krb5.conf,它利用了KDC的。爲了這個例子,我在域example.com上使用名爲EXAMPLE.COM的領域。 注意,你將不得不更換IP有步驟的結果5.

  • [libdefaults]

    default_realm = EXAMPLE.COM 
        noaddresses = true 
    

    [境界]

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

    [domain_realm]

    example.com = EXAMPLE.COM 
        .example.com = EXAMPLE.COM 
    
    1. 現在繼續並測試該配置。

    export KRB5_CONF=PATH_TO_THE_KRB5.CONF_FILE_FROM_STEP_6

    kinit test/[email protected]

    因爲我必須爲我的一個項目做到這一點,我收拾好所有到一些小的腳本,可能是您的進一步研究有幫助的; https://github.com/tillt/docker-kdc

    +1

    Thanks Till!在我的docker鏡像中啓用udp端口解決了這個問題:) – Arun 2015-01-23 01:08:03

    1

    確保的krb5.conf文件是的/ etc目錄。我有同樣的問題,並沒有防火牆問題,仍然得到相同的錯誤。最後,我能夠通過將krb5.conf文件移動到/etc目錄來解決此問題。

    +0

    ...或者確保你導出KRB5_CONFIG =/some/place/some.krb5.conf'參考。 http://web.mit.edu/Kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html – 2017-01-13 09:38:04

    1

    在MacOS上,默認客戶端不回退到TCP。在您的krb.conf中使用 前綴您的kdc與tcp/以強制客戶端在您的網絡阻止udp時使用TCP。

    kdc = tcp/ds01.int.domain.com:88 
    
    相關問題