5.1. 在线创建数据库

OpenLDAP 软件包自带一个名为 ldapadd 的实用程序,用于在 LDAP 服务器运行时添加条目。 如果您选择在线创建数据库,则可以使用 ldapadd 工具添加条目(您也可以使用 OpenLDAP 软件包之外的其他客户端来添加条目,例如 Ldap Browser)。 添加初始条目后,您仍然可以使用 ldapadd 添加更多条目。 在启动 slapd 之前,您应确保在 sladp.conf 文件中设置以下配置选项

suffix <dn> 

正如 第 3.4 节 中所述,此选项指定此数据库将保存哪些条目。 您应将其设置为您尝试创建的子树根的 DN。 例如

suffix "o=TUDelft, c=NL" 

您应确保指定一个目录,用于创建索引文件。

directory /usr/local/tudelft 

您需要创建此目录并设置适当的权限,以便 slapd 可以写入。

您需要配置 slapd,以便您可以作为具有添加条目权限的目录用户连接到它。 您可以将目录配置为支持专为此目的的特殊超级用户或根用户。 这可以通过数据库定义中的以下两个选项完成。

rootdn <dn> 
rootpw <passwd>   /* Remember to use a SHA password here !!! */ 

这些选项指定一个 DN 和密码,可用于作为数据库的“超级用户”条目进行身份验证(即,允许执行任何操作的条目)。 此处指定的 DN 和密码始终有效,无论命名的条目是否实际存在或是否具有给定的密码。 这解决了在任何条目存在之前如何进行身份验证和添加条目的先有鸡还是先有蛋的问题。

Slapd 本身可以理解您是否在 rootpw 指令上使用 SHA-1 加密密码。 我使用 Java 类来生成 SHA-1 密码,但也可以使用命令 slappasswd 来生成密码。

slappasswd -h {SHA}
rootpw    "{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ="

例如

        rootdn "cn=Manager,dc=example,dc=com"
        rootpw "{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ="

slappasswd 的默认输出是生成安全哈希密码 {SSHA},在这种情况下,您不需要传递 -h 参数,只需直接调用 slappasswd 即可。

如果您使用 SASL 作为针对 LDAP 进行身份验证的机制,则可以忽略 rootpw 行。 有关更多详细信息,请参阅 第 3.4 节第 6.2 节

最后,您应确保数据库定义包含您想要的索引定义。

index {<attrlist> | default} [pres,eq,sub,none] 

例如,要索引 cn、sn、uid 和 objectclass 属性,可以使用以下索引配置行。

index cn,sn,uid pres,eq,sub
index objectClass pres,eq

注意: 请注意,并非所有索引类型都适用于所有属性类型。 有关示例,请参阅 第 3.6 节

一旦您根据自己的喜好配置了所有内容,请启动 slapd,使用您的 LDAP 客户端连接,然后开始添加条目。 例如,要使用 ldapadd 工具添加 TUDelft 条目,然后添加 Postmaster 条目,您可以创建一个名为 /tmp/newentry 的文件,内容如下

o=TUDelft, c=NL 
objectClass=organization 
description=Technical University of Delft Netherlands 

cn=Postmaster, o=TUDelft, c=NL 
objectClass=organizationalRole 
cn=Postmaster 
description= TUDelft postmaster - postmaster@tudelft.nl 

然后使用如下命令实际创建条目

ldapadd -f /tmp/newentry -x -D "cn=Manager, o=TUDelft, c=NL" -w secret 

上述命令假定您已将 rootdn 设置为 "cn=Manager, o=TUDelft, c=NL",并将 rootpw 设置为 "secret"(可能在 slapd.conf 中进行了 SHA-1 加密)。 如果您不想在命令行中键入密码,请使用 ldapadd 命令的 -W 选项而不是 -w "password"。 系统将提示您输入密码。

ldapadd -f /tmp/newentry -x -D "cn=Manager, o=TUDelft, c=NL" -W 
Enter LDAP Password: