RH423-1 openldap基础介绍

简介:

openldap介绍

一、LDAP定义 
    LDAP是Lightweight Directory Access Protocol的缩写,顾名思义,它是指轻量级目录访问协议(这个主要是相对另一目录访问协议X.500而言的;LDAP略去了x.500中许多不太常用的功能,且以TCP/IP协议为基础)。目录服务和数据库很类似,但又有着很大的不同之处。数据库设计为方便读写,但目录服务专门进行了读优化的设计,因此不太适合于经常有写操作的数据存储。同时,LDAP只是一个协议,它没有涉及到如何存储这些信息,因此还需要一个后端数据库组件来实现。这些后端可以是bdb(BerkeleyDB)、ldbm、shell和passwd等。
    LDAP目录以树状的层次结构来存储数据(这很类同于DNS),最顶层即根部称作“基准DN”,形如"dc=mydomain,dc=org"或者"o=mydomain.org",前一种方式更为灵活也是Windows AD中使用的方式。在根目录的下面有很多的文件和目录,为了把这些大量的数据从逻辑上分开,LDAP像其它的目录服务协议一样使用OU(Organization Unit),可以用来表示公司内部机构,如部门等,也可以用来表示设备、人员等。同时OU还可以有子OU,用来表示更为细致的分类。
    LDAP中每一条记录都有一个唯一的区别于其它记录的名字DN(Distinguished Name),其处在“叶子”位置的部分称作RDN;如dn:cn=tom,ou=animals,dc=mydomain,dc=org中tom即为RDN;RDN在一个OU中必须是唯一的。
二、LDAP的四个基本模型
    LDAP的体系结构由4中基本模型组成:信息模型描述LDAP的信息表达方式;命名模型描述LDAP的数据如何组织;功能模型描述LDAP的数据操作访问方式;安全模型描述LDAP的安全机制。
    1.信息模型
    LDAP信息模型定义能够在目录中存储的数据类型和基本的信息单位。
    2.命名模型
    LDAP中的命名模型,即LDAP中的条目定位方式。在LDAP中每个条目均有自己的DN(Distinguished Name,标识名)和RDN(Relative Distinguished Name,相对标识名)。DN是该条目在整个数中唯一名称标识。RDN是条目在父节点下唯一名称标识,如同文件系统中,带路径的文件名就是DN,文件名就是RDN.
    3.功能模型
    LDAP功能模型说明了能够使用LDAP协议对目录执行某些操作。在LDAP中共有4类操作(共10种):
    (1)查询类操作,如搜索,比较;
    (2)更新类操作,如添加条目,删除条目,修改条目和修改条目名;
    (3)认证类操作,如绑定,解绑定;
    (4)其它操作,如放弃和扩展操作。
    4.安全模型
    LDAP的安全模型主要是基于绑定操作的,绑定操作的不同使得安全机制有所不同。3种:
    (1)无认证
    (2)基本认证:当使用LDAP的基本安全认证时,客户进程通过网络向服务进程发送一个分辨名(DN)和口令来标识自己。服务进程检查客户进程发送的分辨名(DN)和密码是否与目录中储存的分辨名(DN)和密码相匹配,如果匹配则认为通过了认证。
    (3)SASL认证:即LDAP提供的在SSL和TLS安全通道基础上进行的身份认证,包括数字证书的认证。
三、LDIF
    LDIF(LDAP Interchange Format)是指存储LDAP配置信息及目录内容的标准文本文件格式,之所以使用文本文件来格式来存储这些信息是为了方便读取和修改,这也是其它大多数服务配置文件所采取的格式。LDIF文件常用来向目录导入或更改记录信息,这些信息需要按照LDAP中schema的格式进行组织,并会接受schema的检查,如果不符合其要求的格式将会出现报错信息。LDIF文件样例如下:
#LDIF file example
dn: dc=mydomain,dc=org
objectClass: domain
dc: mydomain
LDIF格式:
1、一个entry(条目)必须列出所有属性,每个entery必须以一个空行隔开
2、一个条目的必须以dn为第一行,以“#”号开头的为注释行;
3、第二行起的行中,冒号左边为属性,右边是属性的值(冒号后必须以一个空格与属性值隔开),这类同于编程中的变量及为其所赋的值,但属性可以被重复赋值。
4、属性一行无法表达时,下一行以空格开头以示续接上行值
 
四、objectClass 
    LDAP中,一条记录必须包含一个objectClass属性,且其需要赋予至少一个值。每一个值将用作一条LDAP记录进行数据存储的模板;模板中包含了一条记录中数个必须被赋值的属性和一系列可选的属性。如上述LDIF文件中的记录所示,objectClass的值为domain。
    objectClass有着严格的等级之分,最顶层的类是top和alias。例如,organizationalPerson这个objectClass隶属于Person,而Person又是top的子类。
    objectClass大致分为三类:结构型的(如:person和organizationUnit)、辅助型的(如:extensibeObject)和抽象型的(这类不能直接使用)。官方定义的objectClass,如下所示:
alias 
applicationEntity 
dSA 
applicationProcess 
bootableDevice 
certificationAuthority 
certificationAuthority-V2 
country 
cRLDistributionPoint 
dcObject 
device 
dmd 
domain 
domainNameForm 
extensibleObject 
groupOfNames 
groupOfUniqueNames 
ieee802Device 
ipHost 
ipNetwork 
ipProtocol 
ipService 
locality 
dcLocalityNameForm 
nisMap 
nisNetgroup 
nisObject 
oncRpc 
organization 
dcOrganizationNameForm 
organizationalRole 
organizationalUnit 
dcOrganizationalUnitNameForm 
person 
organizationalPerson 
inetOrgPerson 
uidOrganizationalPersonNameForm 
residentialPerson 
posixAccount 
posixGroup 
shadowAccount 
strongAuthenticationUser 
uidObject 
userSecurityInformation
五、Attribute
    如上文所述,Attribute类同于编程语言中的变量,它可以被赋值,就像是可以存放一个单一类型信息的容器。官方声明了许多常用的Attribute,如果其中没有你所需要的,你可以自己定义,但要避免重名。objectClass是一种特殊的Attribute,它包含其它用到的Attribute以及它自身。常见的Attribute如:givenName、l、objectClass、dc、ou、cn、c、mail、telephoneNumber、sn、uid等。分别介绍如下:
dc:domain Component,经常用来指一个域名的一部分,如:dc=mydomain,dc=org;
cn:common name,指一个对象的名字;如果指人,需要使用其全名;
sn:surname,指一个人的姓;
givenName:指一个人的名字,不能用来指姓或者middle name;
c:两位数的国家代码;
o:organizationName,指一个组织的名字;
objectClass:一个LDAP server要想启用必须能够识别每一个对象的Attribute,objectClass Attribute正是用来描述一个对象应该具有的Attribute及可选Attribute。因此,每个objectClass“模板”的Attribute中必然含有一条objectClass Attribute,我不知道用“自包含”称呼这个算不算合适。
ou:organizationalUnitName,指一个组织单元的名字。
l:指一个地名,如一个城市或者其它地理区域的名字;
mail:电子信箱地址
telephoneNumber:电话号码,应该带有所在的国家的代码;
uid:userid,通常指一个人的登录名,这个不同于Linux系统中用户的uid; 
六、schema
    LDAP中,schema用来指定一个目录中所包含的objects的类型(objectClass)以及每一个objectClass中的各个必备(mandatory)和可选(optional)的属性(attribute)。因此,Schema是一个数据模型,它被用来决定数据怎样被存储,被跟踪的数据的是什么类型,存储在不同的Entry下的数据之间的关系。schema需要在主配置文件slapd.conf中指定,以用来决定本目录中使用到的objectClass。管理员可以自己设计制定schema,一般包括属性定义(AttributeDefinition)、类定义(ClassDefinition)以及语法定义(SyntaxDefinition)等部分。  
    LDAP V3中在x.500标准的基础上定义了一个包含了网络中大多常见对象的schema,这些对象包括国家、所在地、组织、人员、小组以及设备等。同时,LDAP V3中可以很方便的从目录中提取出schema,它正是一条记录中关于属性的声明部分。
七、对象标识符(Object Identifiers)
     对象标识符(OID)是被LDAP内部数据库引用的数字标识。Attribute的名字是设计为方便人们读取的,但为了方便计算机的处理,通常使用一组数字来标识这些对象,这类同于SNMP中的MIB2。例如,当计算机接收到dc这个Attribute时,它会将这个名字转换为对应的OID:1.3.6.1.4.1.1466.115.121.1.26。
八、使用LDAP做身份验正
    验正主要是用来确定一次会主中客户端用户所具有的权利,即用来确立用户能否登录以及登录具有使用哪些资源以及如何使用资源的权限。验正过程中的修改、查询等操作由认证级别来控制。
    objectClass中的person可以用来作linux系统中用户登入的身份验正,此时需要指定userPassword属性的值,即指定用户登入时使用的密码。密码可以使用的加密方式有MD5、CRYPT、SHA、SSHA等。在LDAP V3中,验正客户端时可以使用的验正机制有匿名验正、简单验正、基于SSL/TLS的验正和基于SASL的验正等四种方式。


本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/537752
相关文章
|
监控 安全 网络协议
|
应用服务中间件 nginx Shell
|
Shell 数据安全/隐私保护 Unix
|
网络安全 数据格式 XML
|
数据安全/隐私保护