LDAP 服务器守护进程称为 Slapd。Slapd 支持多种不同的 数据库后端供您使用。
它们包括首选的 BDB,一个高性能的事务数据库后端;LDBM,一个轻量级的基于 DBM 的后端;SHELL,一个连接到任意 shell 脚本的后端接口;以及 PASSWD,一个连接到 passwd(5) 文件的简单后端接口。
BDB 使用 Sleepycat Berkeley DB 4。LDBM 使用 Berkeley DB 或 GDBM。
BDB 事务后端适用于多用户读/写数据库访问,支持任意混合的读写操作。BDB 适用于需要以下特性的应用
事务,包括原子性地对数据库进行多次更改,并在必要时回滚未提交的更改。
能够从系统崩溃和硬件故障中恢复,而不会丢失任何已提交的事务。
在本文档中,我假设您选择 BDB 数据库。
为了在基于 LDAP 的目录服务器之间导入和导出目录信息,或者描述要应用于目录的一组更改,通常使用称为 LDIF(LDAP 数据交换格式)的文件格式。LDIF 文件以面向对象的条目层次结构存储信息。您将获得的 LDAP 软件包附带一个实用程序,用于将 LDIF 文件转换为 BDB 格式
一个常见的 LDIF 文件看起来像这样
dn: o=TUDelft, c=NL o: TUDelft objectclass: organization dn: cn=Luiz Malere, o=TUDelft, c=NL cn: Luiz Malere sn: Malere mail: malere@yahoo.com objectclass: person |
如您所见,每个条目都由一个唯一的专有名称(DN)标识。DN 由条目的名称加上一个名称路径组成,该路径将条目追溯到目录层次结构的顶部(就像一棵树)。
在 LDAP 中,对象类定义了可用于定义条目的 属性集合。LDAP 标准提供了以下基本类型的对象类
目录中的组,包括个人对象或对象组的无序列表。
位置,例如国家名称和描述。
目录中的组织。
目录中的人员。
一个条目可以属于多个对象类。例如,一个人员条目由 person 对象类定义,但也可能由 inetOrgPerson、groupOfNames 和 organization 对象类中的属性定义。服务器的对象类结构(即其模式)决定了特定条目的必需和允许属性的完整列表。
目录数据以属性-值对的形式表示。任何特定的信息都与一个描述性属性相关联。
例如,commonName 或 cn 属性用于存储人员的姓名。名为 Jonas Salk 的人可以在目录中表示为
cn: Jonas Salk |
目录中输入的每个人员都由 person 对象类中的属性集合定义。用于定义此条目的其他属性可能包括
givenname: Jonas surname: Salk mail: jonass@airius.com |
必需属性包括在使用对象类的条目中必须存在的属性。所有条目都需要 objectClass 属性,该属性列出了条目所属的对象类。
允许属性包括在使用对象类的条目中可能存在的属性。例如,在 person 对象类中,cn 和 sn 属性是必需的。description、telephoneNumber、seeAlso 和 userpassword 属性是允许的,但不是必需的。
每个属性都有一个对应的语法定义。语法定义描述了属性提供的信息类型,例如
bin 二进制。
ces 大小写精确字符串(比较时大小写必须匹配)。
cis 忽略大小写字符串(比较时忽略大小写)。
tel 电话号码字符串(类似于 cis,但在比较时忽略空格和破折号“-”)。
dn 专有名称。
注意:通常 objectclass 和 attribute 定义位于模式文件,在 OpenLDAP 安装目录下的 schema 子目录中。