Ldap

帶有 kerberos 身份驗證的 LDAP syncrepl

  • August 3, 2020

我正在嘗試使用 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 手冊頁說明authcid並且authzid可以與 結合使用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

我使用以下配置獲得了帶有 kerberos 身份驗證的 syncrepl。這個關於 nslcd.conf 的網站說authzid應該採用“dn:<distinguished name>”或“u:<user name>”的形式。我還使用 k5start 為someuser@REALMat創建了一個記憶體文件/tmp/krb5cc_55,並且做到了chown ldap:ldap。注意 55 是 ldap uid;但是,我不確定是否有必要將文件命名為 this。在我的提供程序配置中,我指定someuserrootdn允許它訪問整個數據庫。

我只是想澄清一下,這對我有用,但我對 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"

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

是的,這正是它的意思。

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

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

但是最近的 MIT Kerberos 支持一種稱為客戶端密鑰表啟動的內置方法,它的設置要簡單得多:只需添加$KRB5_CLIENT_KTNAME到 slapd 的環境中,並將其指向與$KRB5_KTNAME. (這是假設你有一個單獨的 keytab ldap/*。你應該。)

最後,您可以告訴 slapd 使用 gss-proxy,這就像 Kerberos 的 ssh-agent。設置GSS_USE_PROXY=1和配置 /etc/gssproxy 以將 slapd 辨識為發起者(客戶端)和接受者(伺服器)。

slapd.conf 手冊頁聲明 authcid 和 authzid 可以與 bindmethod=sasl 一起使用,但它沒有指定如何格式化它們。我應該在這裡放一個 DN 還是放一個 kerberos 主體或其他東西?我需要指定這些嗎?

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

在接受方面,slapd 會將接收到的 Kerberos 主體轉換為偽 DN uid=foo@realm,cn=gssapi,cn=auth,您可以直接在 ACL 中使用它,或者使用authz-regexp(又名olcAuthzRegexp)將其轉換為更好的 DN。

同時,authzid的工作方式與機制無關。它是可選的,但如果您確實指定了它,那麼它必須是前綴為 的 DN dn:,或者是前綴為 的使用者名u:。(此處的使用者名,如 authcids,被轉換為偽 DN 並通過olcAuthzRegexp,並使用生成的 DN。)

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

引用自:https://serverfault.com/questions/686800