具有 kerberos 驗證的 LDAPsyncrepl

具有 kerberos 驗證的 LDAPsyncrepl

我正在嘗試使用syncrepl 為LDAP 設定複製伺服器。我想使用 Kerberos 來驗證消費者身份,因為我們已經設定了它,而且它看起來更安全。我的提供者和消費者的資料庫定義如下。

當我啟動消費者時,我收到以下錯誤:

GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information 
(Credentials cache file '/tmp/krb5cc_55' not found)

我認為這意味著消費者沒有有效的 TGT。如何配置消費者以獲得有效的 TGT?我讀過一些建議使用 k5start 或 cron 作業的舊資料。這仍然是這樣做的方法嗎?

slapd.conf 手冊頁指出authcidauthzid可以與 結合使用bindmethod=sasl,但沒有指定如何格式化它們。我應該在此處放置 DN、kerberos 主體還是其他內容?我需要指定這些嗎?

感謝您的協助

消費者配置:

database        bdb
suffix          "dc=example"
rootdn          "uid=someuser,cn=realm,cn=gssapi,cn=auth"
directory       /var/lib/ldap
dirtyread
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
syncrepl rid=1
    provider=ldap://provider.realm
    type=refreshAndPersist
    starttls=yes
    searchbase="dc=example"
    schemachecking=off
    bindmethod=sasl
    saslmech=gssapi
    retry="10 +"

提供者配置

database        bdb
suffix          "dc=example"
rootdn          "uid=someuser,cn=realm,cn=gssapi,cn=auth"
directory       /var/lib/ldap
dirtyread
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

答案1

我認為這意味著消費者沒有有效的 TGT。

是的,這正是它的意思。

如何配置消費者以獲得有效的 TGT?我讀過一些建議使用 k5start 或 cron 作業的舊資料。這仍然是這樣做的方法嗎?

不確定 cron,但 k5start 仍然是一個好方法。

但最近 MIT Kerberos 支援一種名為客戶端密鑰表啟動,設定起來要簡單得多:只需添加$KRB5_CLIENT_KTNAME到 slapd 的環境中,並將其指向與$KRB5_KTNAME. (這是假設您有一個單獨的密鑰表ldap/*。您應該這樣做。)

最後,您可以告訴 slapd 使用 gss-proxy,這類似於 Kerberos 的 ssh-agent。設定GSS_USE_PROXY=1並設定 /etc/gssproxy 以將 slapd 識別為發起方(客戶端)和接受方(伺服器)。

slapd.conf 手冊頁指出 authcid 和 authzid 可以與 bindmethod=sasl 結合使用,但沒有指定如何格式化它們。我應該在此處放置 DN、kerberos 主體還是其他內容?我需要指定這些嗎?

我不記得有什麼目的授權者與 GSSAPI(如果有的話)一起服務 – IIRC,此機制會自動使用從您的票證確定的身份,因此無需手動指定它。

在接受端,slapd 會將收到的 Kerberos 主體轉換為偽 DN,例如uid=foo@realm,cn=gssapi,cn=auth,您可以直接在 ACL 中使用它,或使用authz-正規表示式(又名olcAuthz正規表示式)將其轉換為更好的 DN。

同時,授權者其工作方式與機制無關。它是可選的,但如果您指定它,則它必須是前綴為 的 DNdn:或前綴為 的使用者名稱u:。 (這裡的用戶名,如 authcids,被轉換為偽 DN 並通過olcAuthz正規表示式,並使用產生的 DN。

如果策略允許,那麼 slapd 將授予您 authzid 擁有的權限。 (這就像 LDAP 的 sudo。)

答案2

我使用以下配置獲得了帶有 kerberos 身份驗證的syncrepl。這個網站關於 nslcd.conf 說應該authzid採用「dn:<專有名稱>」或「u:<使用者名稱>」的形式。我還使用 k5start 為someuser@REALMat創建了一個快取文件/tmp/krb5cc_55,並且做到了chown ldap:ldap。請注意,55 是 ldap uid;但是,我不確定是否有必要將文件命名為 this.在我的提供者配置中,我指定someuser為 ,以rootdn允許它存取整個資料庫。

我只是想澄清一下,這對我有用,但我對 ldap 的了解有限,所以我不能保證它在其他地方也能工作,而且我不知道這個配置中的所有內容是否都是必要的。

syncrepl rid=1
    provider=ldap://provider.realm
    type=refreshAndPersist
    starttls=yes
    searchbase="dc=realm"
    schemachecking=off
    retry="10 +"
    tls_cacert="/path/to/ca.crt"
    bindmethod=sasl
    saslmech=gssapi
    authcid="someuser@REALM"
    authzid="uid=someuser,cn=realm,cn=gssapi,cn=auth"

相關內容