Ldap概念

最近在公司做一个ldap项目,自己在学校从来没有接触过ldap,自己从零开始收集资料开始学习ldap,接下来的博客会记录一下自己的学习成果,当然有些都是网上各路大牛的研究成果,也有自己的理解。

一、Ldap是什么?

师父将任务分配给我后,一脸懵逼,Ldap是什么?就开始网上各种找。

LDAP:Lightweight Directory Access Protocol 轻量级目录访问协议

Ldap是一种目录式的数据存储方式,类似于数据库,区别于常用的关系型数据库,都是用来存储数据的,知识存储的方式不同而已;

ldap区别于关系型数据库的最大不同就是其是目录结构形式的,网上有的说是类似于电话簿,我想了半天感觉又不像,自己感觉最像的应该是计算机存储路径:

 

根目录的表示:                            C:\                       ----->代表的是C盘

根目录下文件的表示:                   C:\Users                ------>代表C盘下的Users文件夹

                                               C:\Windows           ------->代表C盘下的Windows文件夹

Users文件夹下的文件的表示:        C:\Users\Administrator ---->代表C盘下的Users文件夹下的Administrator文件夹

 

其实这一个个路径就是一个文件的Id,我们可以直接在计算机中通过路径找到所要找的文件。

现在明白了计算机的文件目录了,那么基本上也就懂了ldap了。

计算机中的目录代表的是一个个文件或者是文件夹,而在ldap中也是用目录的形式表示存储的数据,但是他的存储数据不是文件或者文件夹了,可以看做一条数据对象。

目录结构

      

二、数据唯一标识符--->DN

要想存储这个公司的信息,首先要有一个基准DN,LDAP目录树的最顶部就是根,也就是所谓的“基准DN”。

现在最常用的格式,用公司的域名作为基准DN。例如:  “DN:dc=某公司, dc=com”  就是上图公司ldap的基准DN,也就是根节点吧,而 “DN:dc=某公司, dc=com  这个字符串就是这个根节点的id。

根节点下面就是  : 某公司的数据信息了, 某公司这个节点就用 :      “DN:ou=某公司,dc=某公司, dc=com”         这样一个字符串来表示;

可以看出来某公司这个节点隶属于“DN:dc=某公司, dc=com”这个根节点;

接下来:表示某公司下的一个部门---研发部:  “DN:ou=研发部,ou=某公司,dc=某公司, dc=com”   ,从Dn中也能看出研发部隶属于某公司这个节点下的,因为研发部的Dn,包含了某公司的Dn;

再来表示研发部下面的  王二 员工:   “DN:uid=王二,ou=研发部,ou=某公司,dc=某公司, dc=com” 

从上面Dn表示的例子可以很明白的看出ldap目录的表示很类似于计算机中文件目录的表示;

记住:Dn是ldap中数据的ID

现在应该明白什么是DN了,也就是数据对象的id

DN分析

我们再来看一下刚才的几个DN:

BASE Dn (root Dn):     “DN:dc=某公司, dc=com

某公司的DN:                      “DN:ou=某公司,dc=某公司, dc=com

研发部的DN:                     “DN:ou=研发部,ou=某公司,dc=某公司, dc=com

王二员工的DN:                  “DN:uid=王二,ou=研发部,ou=某公司,dc=某公司, dc=com” 

肯定会有个疑问:DN的组成?上面这几个DN中,dc,ou,uid都是些什么含义?

这些都是DN的属性:

以下是常用的属性名和它代表的意义(在LDAP中属性名大小写不敏感):
CN    ----->常用名称,常常是DN的一部分
L      ----->地名,通常是城市的名称
ST    ----->州或省的名称
O     ----->组织名称
OU  ------>组织单位
C    ------>国家名称
STREET –>街道地址
DC   ------>域名成分
UID  ------>用户标识

三、对象类和属性

刚才说了,在ldap中存储着一个个数据对象,从这个例子中我们也看到,这个数据对象可以是一个公司或者部门,也可以一个个员工,当然ldap也可以存储其他类型的对象,那ldap是怎么区分的呢?

LDAP存储各种类型的数据对象,这些对象可以用属性来表示。LDAP目录用对象类(objectClasses)的概念来定义运行哪一类的对象使用什么属性。在几乎所有的 LDAP服务器中,都要根据需要扩展基本的LDAP目录的功能,创建新的对象类或者扩展现存的对象类。所有对象类都从其父对象类继承。

LDAP中,一个条目必须包含一个objectClass属性,且需要赋予至少一个值。每一个值将用作一条LDAP条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。objectClass有着严格的等级之分,最顶层是top和alias。例如,organizationalPerson这个objectClass就隶属于person,而person又隶属于top。

objectClass可分为以下3类:


结构型(Structural):如person和organizationUnit;
辅助型(Auxiliary):如extensibeObject;
抽象型(Abstract):如top,抽象型的objectClass不能直接使用。

在OpenLDAP的schema中定义了很多objectClass,下面列出部分常用的objectClass的名称。


● account
● alias
● dcobject
● domain
● ipHost
● organization
● organizationalRole
● organizationalUnit
● person
● organizationalPerson
● inetOrgPerson
● residentialPerson
● posixAccount
● posixGroup


了解Attribute

属性(Attribute)类似于程序设计中的变量,可以被赋值。在OpenLDAP中声明了许多常用的Attribute(用户也可自己定义Attribute)。常见的Attribute含义如下:
● c:国家。
● cn:common name,指一个对象的名字。如果指人,需要使用其全名。
● dc:domain Component,常用来指一个域名的一部分。
● givenName:指一个人的名字,不能用来指姓。
● l:指一个地名,如一个城市或者其他地理区域的名字。
● mail:电子信箱地址。
● o:organizationName,指一个组织的名字。
● ou:organizationalUnitName,指一个组织单元的名字。
● sn:surname,指一个人的姓。
● telephoneNumber:电话号码,应该带有所在的国家的代码。

提示:objectClass是一种特殊的Attribute,它包含其他用到的Attribute以及其自身。


对于不同的objectClass,通常具有一些必设属性值和一些可选属性值。例如,可使用person这个objectClass来表示系统中一个用户的条目,对于系统中用户通常需要有这样一些信息:姓名、电话、密码、描述等。如下图所示,对于person,通过cn和sn设置用户的名和姓,这是必须设置的,而其他属性则是可选的。

下面列出部分常用objectClass要求必设的属性。
● account:userid。
● organization:o。
● person:cn和sn。
● organizationalPerson:与person相同。
● organizationalRole:cn。
● organizationUnit:ou。
● posixGroup:cn、gidNumber。
● posixAccount:cn、gidNumber、homeDirectory、uid、uidNumber。

posted @ 2017-11-11 15:40  Actexpler  阅读(15575)  评论(0编辑  收藏  举报