忆风
光是知道是不够的,必须要加以应用;光是希望是不够的,非去做不可。
BlogJava
首页
新随笔
联系
聚合
管理
随笔-84 评论-56 文章-0 trackbacks-0
LDAP基础
一、Directory
Services(目录服务)能做什么?
我们知道,当局域网的规模变的越来越大时,为了方便主机管理,我们使用DHCP来实现IP地址、以太网地址、主机名和拓扑结构等的集中管理和统一分配。同样,如果一个局域网内有许多的其它资源时,如打印机、共享文件夹等等,为了方便的定位及查找它们,一种集中定位管理的方式或许是较好的选择,DNS和NIS都是用来实现类似管理的方法。
对于局域网内的一个用户来讲,工作等其它应用需要,我们必须凭帐号登录主机、用帐号收发E-mail,甚至为了管理需要公司还需要维护一个电子号码簿来存储员工的姓名、地址、电话号码等信息。随着时间的增长,我们会为这些越来越多的帐号和密码弄的头晕脑胀。同时,如果一个员工离开,管理员就不得不翻遍所有的记录帐号信息的文件把离职员工的信息删除。这些将是一个繁琐而效率低下的工作。那么,如果能将此些帐号信息等统一到一个文件中进行管理,无疑会大大提高员工及管理员的工作效率。目录服务(LDAP是其实现的一种)正是基于这些应用实现的。
二、什么是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中必须是唯一的。
三、什么是LDIF?
LDIF(LDAP
Interchange
Format)是指存储LDAP配置信息及目录内容的标准文本文件格式,之所以使用文本文件来格式来存储这些信息是为了方便读取和修改,这也是其它大多数服务配置文件所采取的格式。LDIF文件常用来向目录导入或更改记录信息,这些信息需要按照LDAP中schema的格式进行组织,并会接受schema的检查,如果不符合其要求的格式将会出现报错信息。LDIF文件样例如下:
#LDIF
file
example
dn:
dc=mydomain,dc=org
objectClass:
domain
dc:
mydomain
其中,以“#”号开头的为注释行;第二行起的行中,冒号左边为属性,右边是属性的值,这类同于编程中的变量及为其所赋的值,但属性可以被重复赋值。
四、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
dcOrganizationalUnitName
Form
person
organizationalPerson
inetOrgPerson
uidOrganizationalPersonN
ameForm
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等。分别介绍如下:
c:国家;
cn:common
name,指一个对象的名字;如果指人,需要使用其全名;
dc:domain
Component,经常用来指一个域名的一部分,如:dc=mydomain,dc=org;
givenName:指一个人的名字,不能用来指姓或者middle
name;
l:指一个地名,如一个城市或者其它地理区域的名字;
mail:电子信箱地址
o:organizationName,指一个组织的名字;
objectClass:一个LDAP
server要想启用必须能够识别每一个对象的Attribute,objectClass
Attribute正是用来描述一个对象应该具有的Attribute及可选Attribute。因此,每个objectClass“模板”的Attribute中必然含有一条objectClass
Attribute,我不知道用“自包含”称呼这个算不算合适。
ou:organizationalUnitName,指一个组织单元的名字。
sn:surname,指一个人的姓;
telephoneNumber:电话号码,应该带有所在的国家的代码;
uid:userid,通常指一个人的登录名,这个不同于Linux系统中用户的uid;
如果可以这样类比的话,我想,我们不妨把objectClass理解为关系数据库的表,而attribute则类同为表中的字段。而下面即可介绍的schema或许可以类比作一个数据库,但它的这个类比或许从逻辑上说更合适些。
六、什么是schema
好了,现在可以说说到底什么是schema了。LDAP中,schema用来指定一个目录中所包含的objects的类型(objectClass)以及每一个objectClass中的各个必备(mandatory)和可选(optional)的属性(attribute)。因此,[color=Orange]Schema是一个数据模型,它被用来决定数据怎样被存储,被跟踪的数据的是什么类型,存储在不同的Entry下的数据之间的关系。[/color]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的验正等四种方式。
posted on 2008-09-21 02:40
忆风
阅读(666)
评论(0)
编辑
收藏
所属分类:
Java EE
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
RBAC模型(转载)
HttpClient POST的中文编码问题
tomcat 的jvm 内存溢出问题的解决
Struts 2 + Spring 2 + JPA + AJAX
JSTL经常用法
Web在线编辑器
中材技术数字信息管理系统界面
1亿动态pv/天的超级数据库缓存解决方案,开源了,还有测试代码。
LDAP基础
LDAP介绍(转)
以无法为有法;以无限为有限
<
2008年9月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
Ajax(7)
DataBase(1)
Div & CSS(5)
English
Flex(1)
IDE(13)
Java EE(18)
Java SE(2)
JavaScript(4)
Rails&Ruby
WebService&SOA(2)
数据结构与算法(3)
武术(3)
生活感悟(13)
设计模式(2)
软件工程(6)
随笔档案
2014年8月 (3)
2010年5月 (1)
2009年12月 (1)
2009年11月 (1)
2009年10月 (2)
2009年8月 (1)
2009年2月 (1)
2009年1月 (2)
2008年12月 (12)
2008年11月 (10)
2008年10月 (11)
2008年9月 (18)
2008年8月 (21)
相册
MyPhoto
图片库
Blogroll
Anders Norås' Blog
anotherbug的博客
DBA notes
ESB zone
James Gosling's
Java夜未眠
SIMONE
wakaleo
冉翔的技术专栏
千鳥志
哥哥的Blog
成都心情
截拳道行者
林信良(良葛格)的专栏
爪哇人
臧圩人
邢红瑞的blog
邱老师的Blog
镜花水月
阿蜜果
参考手册
51chm
CSS手册
DHTML手册
HTML手册
JScript手册
MSDN
SQL手册
我的其他博客
忆风 blog
我的学习链接
Cwiki Apache Software Foundation
IBM开发者工作室
JavaWorld@TW
JAVA中文世界社区
Java堂
JAVA开源
Java开源大全
java最大交流社区
JBoss ESB Introduction (written in chinese)
jBPM3 Wiki
J道
LinuxSir
Maven权威指南
Sun 中国技术社区
w3school
XML实用大全
博客园 - 程序员的网上家园
正则表达式
满江红开源
良葛格的學習筆記
搜索
最新评论
1. re: HttpClient POST的中文编码问题[未登录]
评论内容较长,点击标题查看
--hp
2. re: IntelliJ IDEA 目录技巧[未登录]
误人子弟,哪个告诉你idea不能热部署不能自动编译的,发表文章分享值得鼓励,但是也请自己先学会了再来发表,你这样会初学者走很多弯路。
idea绝对比eclipse在用户体验方面强N多倍
--naruto
3. re: HttpClient POST的中文编码问题
对方是个玩
--阿斯蒂芬
4. re: HttpClient POST的中文编码问题
sd
--sd
5. re: HttpClient POST的中文编码问题
评论内容较长,点击标题查看
--zuidaima
阅读排行榜
1. IntelliJ IDEA 目录技巧(52814)
2. HttpClient POST的中文编码问题(44351)
3. 使用IntelliJ IDEA自动在线升级服务(8422)
4. Vibrant Ink Theme for IntelliJ IDEA(7200)
5. 1亿动态pv/天的超级数据库缓存解决方案,开源了,还有测试代码。(4073)
评论排行榜
1. 《截拳道之道-李小龙》(Tao of Jeet Kune Do - Bruce Lee)英文原著[pdf] (10)
2. HttpClient POST的中文编码问题(9)
3. 1亿动态pv/天的超级数据库缓存解决方案,开源了,还有测试代码。(8)
4. IntelliJ IDEA 目录技巧(6)
5. java面试题及答案(基础题122道,代码题19道) (3)