我对 LDAP 和目录服务还不熟悉(我的目标是从公钥目录(pkddownloadsg.icao.int/download)导入包含证书的 ldif 文件)。
但是我已经无法在 Ubuntu 中正确设置 OpenLDAP。我遵循了以下指南:https://ubuntu.com/server/docs/service-ldap 设置过程似乎运行正常,但是当我想查看整个 DIT 时,rootDN 却不知为何缺失了:
user1@computer:~$ ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com dn
dn: dc=example,dc=com
应该有第二行:
dn: cn=admin,dc=example,dc=com
这可能是我无法添加 ldif 文件的原因:
user1@computer:~$ sudo ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f icaopkd.ldif -v
ldap_initialize( <DEFAULT> )
Enter LDAP Password:
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
知道这可能是什么原因造成的吗?
答案1
OpenLDAP 的 rootDN 不需要存在于 DIT 中。特殊情况下,即使不存在 rootDN,您也可以绑定,只要您使用olcRootPW:
在 slapd DB 后端配置中指定的密码即可。
(如果你做决定创建与 rootDN 相对应的条目,然后照常根据该条目的用户密码检查密码,尽管它将保留其“root”权限。)
首先使用sudo -u ldap slapcat -n 1
直接将数据库内容转储为 LDIF(绕过 slapd 的访问控制,因为默认情况下不可访问的条目也是不可见的)。
如果“cn=admin”条目确实不存在,并且您希望将其作为 DIT 中的真实条目,则使用
sudo -u ldap slapadd...
从 LDIF 手动插入它。如果该条目不存在,并且您更喜欢更简单的方法,则使用将后端条目的属性
ldapmodify
更新为您想要的密码 - 请参阅 Ubuntu 文档中的“更改 RootDN 密码”部分以获取示例。olcRootPW:
olcDatabase={1}mdb,cn=config
(所有slap*
工具都直接针对 DB 文件进行操作,因此应该对拥有它们的用户进行 sudo;通常ldap
或openldap
或slapd
- 我不记得 Ubuntu 使用哪一个。
ldap*
同时,除非命令专门用于本地套接字身份验证(即,除非它们使用),否则您不必使用 sudo 命令-H ldapi:/// -Y EXTERNAL
。在所有其他情况下,这些工具都应以您的普通用户身份运行。)