带有 Kerberos 身份验证的 LDAP syncrepl

带有 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 手册页指出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 支持一种称为客户端 keytab 启动,设置起来要简单得多:只需添加$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 主体,或者其他内容?我需要指定这些吗?

我不记得验证码与 GSSAPI 一起提供服务(如果有的话)– IIRC,此机制会自动使用从您的票证确定的身份,因此无需手动指定它。

在接受端,slapd 会将收到的 Kerberos 主体转换为伪 DN,如uid=foo@realm,cn=gssapi,cn=auth,您可以直接在 ACL 中使用它,或者使用授权正则表达式(又名olcAuthzRegexp) 将其翻译为更佳的 DN。

同时,授权码以相同的方式工作,与机制无关。它是可选的,但如果您指定它,那么它必须是以 为前缀的 DNdn:或以 为前缀的用户名u:。(这里的用户名,如 authcids,被转换为伪 DN 并经过olcAuthzRegexp,并使用结果 DN。)

如果策略允许,slapd 将授予您 authzid 所拥有的权限。(这类似于 LDAP 的 sudo。)

答案2

我使用以下配置使 syncrepl 能够进行 Kerberos 身份验证。本网站关于 nslcd.conf 的说法,authzid应该是“dn:<distinguished name>”或“u:<user name>”的形式。我还使用 k5start 为someuser@REALMat创建了一个缓存文件/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"

相关内容