原始问题:
我想设置后端管理员的密码,这样我就可以将 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 和 ACL_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 之前应用