OpenLDAP介绍


LDAP 入门

首字母缩略 LDAP 代表轻量级目录访问协议(Lightweight Directory Access Protocol)。
信息被集中存储在服务器上的 LDAP 目录中。LDAP 目录是一种数据库;然而,它不是关系数据库。
它的目录或数据库的结构与 UNIX 文件系统非常相似:
数据按层次存储;有“根”或“基本 DN”(专有名称,Distinguished Name);
目录被进一步细分成组织单元(Organization Units 或 OU);
在这些 OU 中是包含数据的项。
这种树-叶结构不仅使 LDAP 变得可扩展, 而且当进行简单的搜索或查询时,比传统的关系数据库更快。


LDAP 目录几乎可以存储所有类型的数据:电子邮件地址、DNS 信息、NIS 映射、安全性密钥、联系人信息列表和计算机名等。
可以通过 ACL(访问控制表,Access Control List)来控制对目录的访问。


LDAP 目录结构

DN

LDAP 目录树的“根”或顶部是基本 DN。基本 DN 通常有两种形式:organization=(例如,o=syroidmanor.com), 或者从组织的 DNS 域组件派生的 DN(dc=syroidmanor,dc=com)。

组织单元

在目录基本 DN 的下面是容器或组织单元(OU),它们从逻辑上对您的数据进行分隔或分组。


dc=foobar,dc=com
                ou=customers
                        ou=northamerica
                        ou=southamerica
                        ou=asia
                        ou=europe

个别项

项只是存储属性的地方。
属性是可用来将一种类型的信息存储在目录中的容器。
每个属性都有一种类型和一个或多个值。
LDAP 目录中的每个项都有唯一的 DN,每个 DN 都由两部分组成 ―“相对专有名称”(或 RDN)和对 LDAP 目录结构中存储记录的位置的引用。 几乎存储在 LDAP 目录中的所有数据都有一个唯一名称,这个名称通常存储在 cn 属性中。


对象类objectclass

对象类由 LDAP 目录使用来定义给定类型的对象可以有哪些属性。对象类还定义项必须有什么属性, 以及项可以有什么属性。所有对象类都从其父对象类继承需求,然后添加它们自己的需求。
对象类有五个组件:OID(对象标识)、唯一名称、父对象(SUP)、任何需要的属性(MUST)和 允许的属性列表(MAY)。
如:


objectclass ( 2.5.6.6 NAME 'person' SUP top STRUCTURAL
        MUST ( sn $ cn )
        MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

配置openLDAP

rootdn

rootdn 项控制谁可以对目录数据库进行写操作,以及他们要这样做所必须提供的密码。
您在 rootdn 项的 cn= 部分填充的任何项都是对数据库有完全读/写访问权的用户。
如果您打算存储在目录中的数据只有一点点机密性,则对密码进行散列处理。可以用 slappasswd 实用程序完成它,如下所示:



AC


access to dn=".*,dc=syroidmanor,dc=com" attr=userPassword
        by dn="cn=root,dc=syroidmanor,dc=com" write
        by self write
        by * auth
access to dn=".*,dc=syroidmanor,dc=com" attr=mail
        by dn="cn=root,dc=syroidmanor,dc=com" write
        by self write
        by * read
上面的配置仅允许 userPassword 属性的所有者修改项,但仅当所有者提供他或她的优先密码时才允许进行修改。 在所有其它情况下,只能出于认证目的来访问该项,而不能查看它。 第二个 access to… 项允许用户修改自己的电子邮件地址


插入数据

LDIF 方法


dn: uid=juser,ou=people,dc=syroidmanor,dc=com
uid: juser
cn: Joe User
givenname: Joe
sn: User
mail: juser@syroidmanor.com
objectClass: top
objectClass: mailRecipient
objectClass: person
objectClass: inetOrgPerson