
syncrepl を使用して LDAP のレプリケーション サーバーをセットアップしようとしています。コンシューマーの認証には Kerberos を使用したいと思います。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 に、Kerberos の ssh-agent のような gss-proxy を使用するように指示できます。/etc/gssproxy を設定してGSS_USE_PROXY=1
、slapd をイニシエーター (クライアント) とアクセプター (サーバー) の両方として認識するように構成します。
slapd.conf のマニュアル ページには、authcid と authzid は bindmethod=sasl と組み合わせて使用できると記載されていますが、これらをどのようにフォーマットするかは指定されていません。ここに DN または Kerberos プリンシパル、あるいは何か他のものを配置する必要がありますか? これらを指定する必要がありますか?
目的は思い出せない認証GSSAPI で提供されます (存在する場合) - 私の記憶が正しければ、このメカニズムはチケットから決定された ID を自動的に使用するため、手動で指定する必要はありません。
受け入れ側では、slapdは受信したKerberosプリンシパルを のような疑似DNに変換しuid=foo@realm,cn=gssapi,cn=auth
、それをACLで直接使用したり、authz正規表現(別名olcAuthz正規表現) を使用して、より適切な DN に変換します。
その間、承認済みメカニズムに関係なく同じように動作します。これはオプションですが、指定する場合は、 で始まるDNdn:
か、 で始まるユーザー名のいずれかにする必要がありますu:
。(ここでのユーザー名は、authcidと同様に、擬似DNに変換され、olcAuthz正規表現結果の DN が使用されます。
ポリシーで許可されている場合、slapd は authzid が持つ権限を付与します。(LDAP の sudo のようなものです。)
答え2
次の設定で Kerberos 認証を使用した syncrepl が動作しました。このウェブサイトnslcd.conf には、 はauthzid
「dn:<識別名>」または「u:<ユーザー名>」の形式にする必要があると書かれています。 また、 のキャッシュ ファイルを作成するために k5start を使用しsomeuser@REALM
、/tmp/krb5cc_55
を実行しましたchown ldap:ldap
。 55 は ldap uid であることに注意してください。ただし、ファイルにこの名前を付ける必要があるかどうかはわかりません。 私のプロバイダー構成では、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"