DB-hub Technology LDAP服务器搭建-Linux

LDAP服务器搭建-Linux

1.LDAP

1.1.概念

LDAP 是轻量级目录访问协议的简称(Lightweight Directory Access Protocol).用于访问目录服务。它是 X.500 目录访问协议的移植,但是简化了实现方法。
X.500是一套目录服务标准,定义了一个机构在全局范围内共享名称和与名称相关联的数据。X.500采用层次结构,其中的管理域可以提供这些域内的用户和资源信息,并定义了强大的搜索功能,因此查询变得更简单。由于X.500目录服务协议过于复杂,因此开发了LDAP。

目录服务类似于图书的目录,图书馆的图书放置,yahoo的网站导航,电话簿,地址簿,人员组织管理 。
目录服务就是信息查询服务,信息存储于目录中,目录是一个为查询、浏览和搜索而优化的数据库,它以树状结构(B Tree)组织数据,类似于文件目录。
目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录主要是用于查询的。
含有目录数据库,提供给用户查询、使用信息的计算机就是目录服务器

LDAP是开放的Internet标准,支持跨平台的Internet协议,在业界中得到广泛认可的,并且市场上或者开源社区上的大多产品都加入了对LDAP的支持,因此对于这类系统,不需单独定制,只需要通过LDAP做简单的配置就可以与服务器做认证交互。

现在许多产品都加入了对LDAP的支持,可以通过简单的配置与服务器做认证服务。用户只需要使用一个密码登录众多个支持LDAP协议的应用,由应用自己去LDAP Server去认证用户信息,不仅做到了用户信息的统一管理,对于应用认证也十分方便。

1.2.主要产品

1.3.目录服务和数据库的区别

  • 目录查询操作比关系数据库有更高的效率,但是更新效率比关系数据库低
  • 目录不支持关系数据库那样的复杂查询,比如两个表的连接。
  • 目录不支持多操作的事物完整性,没有方式确认一些操作是全部成功还是全部失败
  • 目录能够更好和更灵活的支持子查询和匹配查询
  • 目录协议更适合应用于广域网,比如因特网或者大型公司的网络
  • 目录的管理,配置,和调试比关系型数据库更简单
  • 在使用关系数据库之前,必须首先定义表结构(模式)才可以进行操作。而目录中所使用的模式是由 LDAP 定义好的一系列类组成的。对于目录中的每条记录中必须属于其中的一个类或者多个类。这些类定义了该记录中可以存储的信息。
  • 目录以对象的形式存储数据。信息被组织成树型结构。
  • 目录服务支持分布式存储结构,容易实现数据的扩展,能满足大容量存储的要求。
  • ACL控制表对LDAP服务器中的数据进行安全管理。ACL是一种灵活方便的用户访问权限控制方法。LDAP 是一个标准的,开放的协议,具有平台无关性。不会像关系数据库之间互不兼容的问题。

1.4.LDAP的存储规则

LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库用行和列来存取数据有根本的不同)。
LDAP中可以存储的信息, 例如:员工信息:员工的姓名、登录名、口令、员工号、经理的姓名,电子邮箱,等等。

目录树:
LDAP目录以树状的层次结构来存储数据。类似于自顶向下的DNS树或操作系统文件的目录树。
在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。

条目:
每个条目就是一条记录,每个条目有自己的唯一可区别的名称。
从叶子到根的这条“路径”是一条数据,称为条目(Entry),这条数据的全局唯一标识叫做DN(Distinguished Name)
Entry是LDAP目录存储和组织的基本数据结构,每个条目都有唯一的标识符,并有一些属性,就类似数据库中每一行代表一条数据,其中有一项是唯一的。

对象类:
与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。

属性:
描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

1.5.关键字

DN(Distinguished Name):
区分名, 类似于文件系统和电话号码簿目录的每一片叶子至少有一个独一无二的属性,这一属性可以帮助我们来区别这些叶子。
在一个目录中DN总是唯一的。
例如:“uid=asdfghoiu,ou=Marketing,dc=example,dc=com”

CN(Common Name):
公共名称,如“Thomas Johansson”(一条记录的名称);CN最长可以到80个字符,可以为中文;

UID(User ID):
对象的属性为uid,例如我司一个员工的名字为:张三,他的UID为:z02691,LDAP查询的时候可以根据cn,也可以根据uid查询。配置LDAP查询的时候需要考虑用何种查询方式。可以配置两种方式都支持。

DC(Domain Component):
域名组件,其格式是将完整的域名分成几部分。DC类似于DNS中的每个元素,例如example.com,“.”分开的两个单词可以看成两个DC。如域名为example.com变成dc=example,dc=com(一条记录的所属位置)。
DC=redmond,DC=wa,DC=microsoft,DC=com, 类比文件系统的话,类似于文件路径: com\Microsoft\wa\redmond

OU(Organization Unit):
组织单位,组织单位可以包含其它各种对象(包括其它组织单元),如“Marketing”(一条记录的所属组织)。
例如:CN=test,OU=developer,DC=domainname,DC=com
在上面的代码中 cn=test 可能代表一个用户名,ou=developer 代表一个目录中的组织单位。这句话的含义可能就是说明 test 这个对象处在domainname.com 域的 developer 组织单元中。
LDAP目录用OU从逻辑上把数据分开来。例如,表示公司内部的机构:销售部、财务部,等等。

RDN(Relative DN):
相对区分名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn=Thomas Johansson”

1.6.LDAP的基本模型

信息模型:
描述LDAP 中信息的表达方式及数据的存储结构。
在LDAP中信息以树状方式存储,信息的基本数据单元是条目,每个条目由属性构成,属性中存储有属性值。

LDAP 信息模型包含三部分:

  1. Entries
    Directry 中最基本的信息单元,Entry 中所包含的信息描述了现实世界中的一个真实的对象,在目录系统中它可以理解为,目录树中的一个节点 。在目录中添加一个 Entry 时,该 Entry 必须属于一个或多个 object class ,每一个 object class 规定了该 Entry 中必须要包含的属性,以及允许使用的属性。Entry 所属的类型由属性 objectclass 规定。每一个 Entry 都有一个 DN(distinguished name) 用于唯一的标志 Entry 在directory 中的位置。RDN: 是目录树中节点的相对分辨名。如 :People节点的DN:ou=People,dc=example,dc=com而该节点的 RDN:ou=People。

  2. Attributes
    每个 Entry 都是由许多 Attribute 组成的。每一个属性(Attribute)描述的是对象的一个特征。

  3. Values

命名模型:
描述数据在LDAP目录中如何进行组织与区分。即LDAP中条目的定位方式。每个条目都有自己的DN。DN是该条目在整个树中的唯一名称标识,如文件系统中,带路径的文件名就是DN。

第一个节点DN命名为:dn:dc=example,dc=com
第二个节点DN命名为:dn:ou=People,dc=example,dc=com
第三个节点DN命名为:dn:uid=bjensen,ou=people,dc=example,dc=com
每一个Entry的DN是唯一的,就是因为这种数形结构决定了,从根节点到其它
任何一个节点的路径是唯一的。
RDN:在 DN 中最左边的内容称为相对域名。如 ou=People,dc=example,dc=com其 RDN 为 ou=People对于共享同一个父节点的所有节点的 RDN 必须是唯一的。如果不属于同一个节点则节点的 RDN 可以相同。

功能模型:
定义了LDAP中有关数据的操作方式,类似于关系型数据库SQL语句。
查询操作:搜索,比较
更新操作:添加条目,删除条目,修改条目,修改条目名
认证操作:绑定,解绑定
其它操作:放弃和扩展操作,扩展操作是LDAP为了增加新的功能提供的一种标准扩展框架,当前已经成为LDAP标准的扩展操作有,修改密码和StartTLS扩展,在新的RFC标准和草案中正在增加一些新的扩展操作,不同的厂商也定义的自己的扩展操作。

安全模型:

LDAP中的安全模型主要通过身份认证、安全通道和访问控制(ACL)来实现。
LDAP是一个面向连接的协议,在能够对LDAP目录进行任何操作之前,LDAP客户端必须获得一个到LDAP服务端的一个连接,在这个过程中需要对LDAP客户端的身份进行验证,这一过程可以理解为用户绑定。
LDAPV2 只支持简单的密码验证。
LDAPV3 实现了SASL安全框架,SASL为多种验证协议提供了一种标准的验证方法,对于不同的验证系统,可以实现特定的SASL机制。SASL机制代表了一种验证协议。在用户通过验证之后,可以为该用户分配附加的权限,比如一些用户只能查看特定的 Entry,而不能修改。一些用户可以查看并且修改所有的Entry等。这一过程可以理解为访问控制。

1.7.LDAP的应用

统一身份认证主要是改变原有的认证策略,使需要认证的软件都通过LDAP进行认证,在统一身份认证之后,用户的所有信息都存储在LDAP Server中。终端用户在需要使用公司内部服务的时候,都需要通过LDAP服务器的认证。

那么程序中是如何访问的呢? 我们以PHP脚本作为例子:

$ldapconn = ldap_connect(“10.1.8.78")
$ldapbind = ldap_bind($ldapconn, 'username', $ldappass);
$searchRows= ldap_search($ldapconn, $basedn, "(cn=*)");
$searchResult = ldap_get_entries($ldapconn, $searchRows);
$ldap_close($ldapconn);
  1. 连接到LDAP服务器;
  2. 绑定到LDAP服务器;
  3. 在LDAP服务器上执行所需的任何操作;
  4. 释放LDAP服务器的连接;