帶有 kerberos 身份驗證的 LDAP syncrepl
我正在嘗試使用 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@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"
我認為這意味著消費者沒有有效的 TGT。
是的,這正是它的意思。
如何配置消費者以獲得有效的 TGT?我已經閱讀了一些建議使用 k5start 或 cron 作業的舊資料。這仍然是這樣做的方法嗎?
不確定 cron,但是 k5start 仍然是一個好方法。
但是最近的 MIT Kerberos 支持一種稱為客戶端密鑰表啟動的內置方法,它的設置要簡單得多:只需添加
$KRB5_CLIENT_KTNAME
到 slapd 的環境中,並將其指向與$KRB5_KTNAME
. (這是假設你有一個單獨的 keytabldap/*
。你應該。)最後,您可以告訴 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。)