LDAP 构建脚本在 openLDAP-2.4.31 上失败( ldapmodify -Y EXTERNAL -H ldapi:/// )

LDAP 构建脚本在 openLDAP-2.4.31 上失败( ldapmodify -Y EXTERNAL -H ldapi:/// )

原始问题:

我想设置后端管理员的密码,这样我就可以将 LDAP ACL 更改为我需要的...不用说,我不希望我的配置到处发布,而且 .ldif 文件是正确的。我只是无法连接到服务器。ldapi:///(只是...)

直到上次更新为止,我的 LDAP 构建脚本一直很好(除了一点点小问题),使用此版本的 openLDAP,我在错误报告和这里看到了很多问题,但没有一个解决这个问题(而且我找不到解决方法……)。

我正在运行最新的 Ubuntu MATE。防火墙已关闭。尝试访问服务器,如下所示:

ldapi://localhost:389
ldapi:///
ldapi:///:389
ldapi://:389` 
tried `ldapadd ...

以下是对数据库的调用以及服务器出现以下情况时的错误消息ldapi://localhost:389

sudo ldapmodify -Y EXTERNAL -H ldapi://localhost:389 -f ./mcUser/management/LDAP/LDIFs/RPW.ldif
MODIFICATION attempt of ROOTPWD: ./mcUser/management/LDAP/LDIFs/RPW.ldif
 stdout:
 stderr:
ldap_url_parse_ext(ldapi://localhost:389)
ldap_initialize( ldapi://localhost:389/??base )
ldap_create
ldap_url_parse_ext(ldapi://localhost:389/??base)
ldap_sasl_interactive_bind: user selected: EXTERNAL
ldap_int_sasl_bind: EXTERNAL
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_path
ldap_new_socket: 5
ldap_connect_to_path: Trying localhost:389
ldap_connect_timeout: fd: 5 tm: -1 async: 0
ldap_ndelay_on: 5
ldap_close_socket: 5
ldap_msgfree
ldap_err2string
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)

对于服务器引用如下ldapi:///

    sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f ./mcUser/management/LDAP/LDIFs/RPW.ldif
    MODIFICATION attempt of ROOTPWD: ./mcUser/management/LDAP/LDIFs/RPW.ldif
     stdout:
     stderr:
    ldap_url_parse_ext(ldapi:///)
    ldap_initialize( ldapi:///??base )
    ldap_create
    ldap_url_parse_ext(ldapi:///??base)
    ldap_sasl_interactive_bind: user selected: EXTERNAL
    ldap_int_sasl_bind: EXTERNAL
    ldap_new_connection 1 1 0
    ldap_int_open_connection
    ldap_connect_to_path
    ldap_new_socket: 5
    ldap_connect_to_path: Trying /var/run/slapd/ldapi
    ldap_connect_timeout: fd: 5 tm: -1 async: 0
    ldap_ndelay_on: 5
    ldap_ndelay_off: 5
    ldap_int_sasl_open: host=birraleef
    SASL/EXTERNAL authentication started
    ldap_sasl_bind
    ldap_send_initial_request
    ldap_send_server_request
    ber_scanf fmt ({it) ber:
    ber_scanf fmt ({i) ber:
    ber_flush2: 26 bytes to sd 5
    ldap_msgfree
    ldap_result ld 0x7f2d73ca8b40 msgid 1
    wait4msg ld 0x7f2d73ca8b40 msgid 1 (infinite timeout)
    wait4msg continue ld 0x7f2d73ca8b40 msgid 1 all 1
    ** ld 0x7f2d73ca8b40 Connections:
    * host: (null)  port: 0  (default)
      refcnt: 2  status: Connected

      last used: Fri Jul  3 15:01:53 2015
    ** ld 0x7f2d73ca8b40 Outstanding Requests:
     * msgid 1,  origid 1, status InProgress
       outstanding referrals 0, parent count 0
      ld 0x7f2d73ca8b40 request count 1 (abandoned 0)
    ** ld 0x7f2d73ca8b40 Response Queue:
       Empty
      ld 0x7f2d73ca8b40 response count 0
    ldap_chkResponseList ld 0x7f2d73ca8b40 msgid 1 all 1
    ldap_chkResponseList returns ld 0x7f2d73ca8b40 NULL
    ldap_int_select
    read1msg: ld 0x7f2d73ca8b40 msgid 1 all 1
    ber_get_next
    ldap_err2string
    ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
    ldap_free_request (origid 1, msgid 1)
    ldap_free_connection 1 1
    ldap_free_connection: actually freed

我已经调试了一段时间,所以我的脚本几乎把所有东西都吐出来了。所有其他数据库修改都工作正常,DIT、其他管理员的添加、组和成员的添加。只有与 ldapi:/// 服务的连接(在 /etc/default/slapd 中)。我只安装了 ldap-util 和 slapd。

(另外:当它再次工作时,我在 Python 中有一个非常好的 LDAP 库……尽管它有点简单)

编辑:

Utrecht 是正确的,端口 389 处于 LISTEN 状态:

ss -nat |grep 389

收听 0 128 *:389
收听 0 128 :::389 :::*

我正在运行 LDAP 服务器的框上运行该命令。

实际上我不再确定为什么我以 sudo... 的身份运行该命令,没有 sudo... 的行为是相同的。我记得把它放在那里是为了看看在写入 /etc/ldap/... 目录(由 root 拥有)时行为是否发生了变化,在这种情况下,没有发生实际的 LDAP 身份验证来提供访问权限,只是把它留在那里,因为没有行为变化。

编辑2:

ss -lp | grep slapd

u_str LISTEN 0 128 /var/run/slapd/ldapi 20860 * 0

sudo netstat -lxp | grep slapd

unix 2 [ ACC ] 流侦听 20860 - /var/run/slapd/ldapi

我想象 84104 的目的是我用 替换,ldapi:///所以/var/run/slapd/ldapi我这样做了,并且:

ldapmodify -Y EXTERNAL -H /var/run/slapd/ldapi

无法解析 LDAP URI(s)=/var/run/slapd/ldapi (3)

ldapmodify -Y EXTERNAL -H ldapi:/var/run/slapd/ldapi

无法解析 LDAP URI=ldapi:/var/run/slapd/ldapi (3)

和(健全性检查):

ldapmodify -Y EXTERNAL -H ldapi:///var/run/slapd/ldapi

DNS SRV:无法将 DN="var/run/slapd/ldapi" 转换为域

所以,没戏了。我猜想 slapd 会将 ldapi:/// 解析为正确的文件路径,以保持调用数据库的方式一致,因为 ldap 通常用作远程身份验证系统。

/var/run/slapd/ldapi 存在,但我看不到其中的内容,并且:

sudo find / -name ldapi

/运行/ldapi
/运行/slapd/ldapi

ls -ao /var/run/slapd

srwxrwxrwx 1 root 0 7 月 13 日 10:38 ldapi
-rw-r--r-- 1 openldap 84 7 月 13 日 10:38 slapd.args
-rw-r--r-- 1 openldap 5 7 月 13 日 10:38 slapd.pid

cat /var/run/slapd/slapd.args

/usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d

cat /var/run/slapd/slapd.pid

1340

更新的问题:

我已设法将 olcRootPW 和 olcRootDN 插入到 olcDatabase{0}config,cn=config 范围中:

`ldapmodify -Y EXTERNAL -H ldapi:/// -f ./mcUser/management/LDAP/LDIFs/RPW.ldif`

并将 ACL.ldif 拆分为 ACL_add.ldif 和 A​​CL_del.ldif,将所需的 ACL 放入数据库的范围。

ldapmodify -b <config_admin> -w <admin_pwd> -f ./mcUser/management/LDAP/LDIFs/ACL_<add/del>.ldif

但是,原始 olcAccess 行仍保留在 olcDatabase{1}hdb.ldif 中,并且没有任何密码或 dn 组合授予删除它们所需的权限。

现在的问题变成了:我需要使用哪个管理范围来删除 olcDatabase{1}hdb 中的 olcAccess 行?

olcDatabase{0}config.ldif 中的 olcRootDN/PW 组合抛出 (53),这基本上意味着 DN/PW 超出范围,而 olcDatabase{1}hdb.ldif 中的 olcRootDN/PW 组合抛出 (49),这要么是“访问级别不正确”,要么是“pwd/dn 组合不正确”(但事实并非如此)。

ACL_del.ldif 文件在 ACL_add.ldif 之前应用

相关内容