
我正在嘗試使用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
答案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@REALM
at創建了一個快取文件/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"