无法确定用于 LDAP syncrepl GSSAPI 的主体

无法确定用于 LDAP syncrepl GSSAPI 的主体

我已经配置了两个完全在 HA 中运行的 openldap(syncrepl 模式提供程序 - 从属)。在测试了简单的绑定 syncrepl 工作正常后,我尝试仅使用 GSSAPI 从头开始​​部署,以避免使用纯文本密码。我已经将客户端 (ldap.conf) 配置为使用 GSSAPI,并且运行良好,因此它应该也适用于 syncrepl。我已经配置了提供程序和消费者。

这是hdb数据库下的olcSyncrepl的配置,省略authcid和authzid不会改变最终结果:

    olcSyncrepl{0}: rid=001 
    provider="ldap://authsrv1.ex.ample.com" 
    bindmethod=sasl 
    saslmech=gssapi 
    searchbase="dc=ex,dc=ample,dc=com" 
    type=refreshAndPersist 
    retry="30 5 300 3" 
    interval=00:00:01:00 

如果将配置修改为简单绑定,则它会完美复制。krb5.keytab 已添加到 sysconfig openldap 文件中。

如果我能知道主体使用什么来尝试复制,我就能解决它,但日志没有显示该信息(LogLevel 255)。

> slapd[2091]: GSSAPI Error: Unspecified GSS failure.  Minor code may
> provide more information (No Kerberos credentials available)
> 
> slapd[2091]: slap_client_connect: URI=ldap://authsrv1.ex.ample.com
> ldap_sasl_interactive_bind_s failed (-2)

使用 kinit 之后,使用 GSSAPI 的 ldapwhoami 可以完美运行。

编辑:这是我的 /etc/sasl2/slapd.conf 配置

mech_list: gssapi diges-md5 cram-md5 external
pwcheck_method: saslauthd
keytab: /etc/ldap.keytab

ldap.keytab 包含 ldap/authsrv1.ex.ample.com 和 ldap/authsrv2.ex.ample.com 主体密钥,由用户 ldap 和组 ldap 拥有。此外,我还创建了一个 syncrepl inetOrgPerson,并添加了一个 {SASL} 机制作为密码,以检查是否可以使用专用帐户而不是 ldap/authsrv...

如果我从两个服务器都执行 kinit:

kinit -k -t /etc/ldap.keytab syncrepl
kinit -k -t /etc/ldap.keytab ldap/authsrv1.ex.ample.com
kinit -k -t /etc/ldap.keytab ldap/authsrv2.ex.ample.com

KDC 给了我一张票,然后我就可以完美地执行 ldapsearch -Y GSSAPI 或 ldapwhoami -Y GSSAPI。

此外,ldap.conf 客户端配置为使用 GSSAPI,并且在我们所有的客户端中也能完美运行。

BASE dc=ex,dc=ample,dc=com
URI ldap://authsrv1.ex.ample.com:389/,ldap://authsrv2.ex,ample.com:389/
TLS_CACERT /certs/EXAMPLE.pem
TLS_CACERTDIR /certs/
TLS_CERT /certs/authsrv1.ex.ample.com.pem
TLS_KEY /certs/authsrv1.ex.ample.com.key.pem
SUDOERS_BASE ou=SUDOers,dc=ex,dc=ample,dc=com
SASL_MECH GSSAPI
SASL_REALM EX.AMPLE.COM
GSSAPI_SIGN on
GSSAPI_ENCRYPT off
NETWORK_TIMEOUT 10
BIND_POLICY soft
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus
bind_timeout 2
nss_reconnect_tries 2
nss_reconnect_sleeptime 1
nss_reconnect_maxconntries 3

我们的网络服务器允许使用 SASLAUTHD 进行身份验证,并且运行完美。我们唯一无法配置的是通过 GSSAPI 进行 syncrepl 的。

我还尝试指定 authcid 和 authzid,并且在提供程序 cn=config 中有以下 authregex:

olcAuthRegexp: {0}uid=(.*),cn=gssapi,cn=auth ldap://dc=ex,dc=ample,dc=com??sub?(&(uid=$1)(objectClass=inetOrgPerson)

关于 ACL,我尝试使用简单的身份验证机制与同一个用户(syncrepl)进行复制,效果很好。

有任何想法吗?

太感谢了。

此致。

答案1

经过很多天、很多周……试图弄清楚到底发生了什么……

问题出在 /etc/sysconfig/openldap 中。更改:

OPENLDAP_USER="ldap"
OPENLDAP_GROUP="ldap"

到:

OPENLDAP_USER=""
OPENLDAP_GROUP=""

问题解决了。

答案2

$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
$
$
$ grep KRB5 /etc/sysconfig/slapd
KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"
KRB5_CLIENT_KTNAME="FILE:/etc/openldap/ldap.keytab"
$ ls -l /etc/openldap/ldap.keytab
-rw-------. 1 ldap ldap 346 Jun 15  2015 /etc/openldap/ldap.keytab
$
$
$  ps aux | grep slapd | grep -v grep
ldap      1121  1.2  3.9 356408 39748 ?        Ssl  22:07   0:02 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// ldaps:///

相关内容