LDAP入门和面试心得
本作品内容为LDAP入门和面试心得,格式为 doc ,大小 93696 KB ,页数为 17页
('LDAP入门如果你在计算机行业工作,那么对LDAP可能早有耳闻了。想深入地了解LDAP吗?那么可以好好地读一下这篇文章。这篇介绍性的文章是一系列介绍如何在企业中设计、实现和集成LDAP环境的文章的头一篇。主要是先让你熟悉一下LDAP的基本概念,那些比较困难的细节问题将放到以后讨论。在这篇文章中我们将要介绍:什么是LDAP?什么时候该用LDAP存储数据?LDAP目录树的结构单独的LDAP记录作为例子的一个单独的数据项LDAP复制安全和访问控制现在LDAP技术不仅发展得很快而且也是激动人心的。在企业范围内实现LDAP可以让运行在几乎所有计算机平台上的所有的应用程序从LDAP目录中获取信息。LDAP目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。通过把LDAP目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询信息的步骤,甚至连主要的数据源都可以放在任何地方。如果Oracle、Sybase、Informix或MicrosoftSQL数据库中已经存储了类似的数据,那么LDAP和这些数据库到底有什么不同呢?是什么让它更具优势?请继续读下去吧!什么是LDAP?LDAP的英文全称是LightweightDirectoryAccessProtocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPmanRFC网页中找到。怎么使用LDAP这个术语呢?在日常交谈中,你可能会听到有些人这么说:“我们要把那些东西存在LDAP中吗?”,或者“从LDAP数据库中取出那些数据!”,又或者“我们怎么把LDAP和关系型数据库集成在一起?”。严格地说,LDAP根本不是数据库而是用来访问存储在信息目录(也就是LDAP目录)中的信息的协议。更为确切和正式的说法应该是象这样的:“通过使用LDAP,可以在信息目录的正确位置读取(或存储)数据”。但是,也没有必要吹毛求疵,尽管表达得不够准确,我们也都知道对方在说什么。LDAP目录是数据库吗?就象Sybase、Oracle、Informix或Microsoft的数据库管理系统(DBMS)是用于处理查询和更新关系型数据库那样,LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线交易处理(OLTP)系统,LDAP主要是优化数据读取的性能。LDAP目录的优势现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。我在这里说的不过是一些基本的原因,请你注意一下这不过是一小部分原因。可能LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上,LDAP得到了业界的广泛认可,因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持,因为他们根本不用考虑另一端(客户端或服务端)是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器(或者还可能是具有LDAP界面的关系型数据库),因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器进行交互。与LDAP不同的是,如果软件产商想在软件产品中集成对DBMS的支持,那么通常都要对每一个数据库服务器单独定制。不象很多商用的关系型数据库,你不必为LDAP的每一个客户端连接或许可协议付费。大多数的LDAP服务器安装起来很简单,也容易维护和优化。LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能,数据库产商就会要你支付额外的费用,而且也很难管理。LDAP允许你根据需要使用ACI(一般都称为ACL或者访问控制列表)控制对数据读和写的权限。例如,设备管理员可以有权改变员工的工作地点和办公室号码,但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的,所以不用担心在客户端的应用程序上是否要进行安全检查。LDAP对于这样存储这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。例如,这些信息存储在LDAP目录中是十分有效的:l公司员工的电话号码簿和组织结构图l客户的联系信息l计算机管理需要的信息,包括NIS映射、email假名,等等l软件包的配置信息l公用证书和安全密匙什么时候该用LDAP存储数据?大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为电子商务站点的数据库服务器。如果下面每一个问题的答案都是“是”,那么把数据存在LDAP中就是一个好主意。l需要在任何平台上都能读取数据吗?l每一个单独的记录项是不是每一天都只有很少的改变?l可以把数据存在平面数据库(flatdatabase)而不是关系型数据库中吗?换句话来说,也就是不管什么范式不范式的,把所有东西都存在一个记录中(差不多只要满足第一范式)。最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很一般的。例如,一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法:如果可以把保数据存在一张张的卡片里,就可以很容易地把它存在LDAP目录里。LDAP目录树的结构LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握LDAP目录树这个概念了。就象DNS的主机名那样LDAP目录记录的标识名(DistinguishedName,简称DN)是用来读取单个记录,以及回溯到树的顶部。后面会做详细地介绍。为什么要用层次结构来组织数据呢?原因是多方面的。下面是可能遇到的一些情况:l如果你想把所有的美国客户的联系信息都“推”到位于到西雅图办公室(负责营销)的LDAP服务器上,但是你不想把公司的资产管理信息“推”到那里。l你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里,资产管理组对“asset-mgmt”部分有完全的访问权限,但是不能访问其它地方。l把LDAP存储和复制功能结合起来,可以定制目录树的结构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状况的信息,但是欧洲的销售情况就只要每小时更新一次就行了。刨根问底:基准DNLDAP目录树的最顶部就是根,也就是所谓的“基准DN”。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar的电子商务公司工作,这家公司在Internet上的名字是foobar.com。o="FooBar,Inc.",c=US(以X.500格式表示的基准DN)在这个例子中,o=FooBar,Inc.表示组织名,在这里就是公司名的同义词。c=US表示公司的总部在美国。以前,一般都用这种方式来表示基准DN。但是事物总是在不断变化的,现在所有的公司都已经(或计划)上Internet上。随着Internet的全球化,在基准DN中使用国家代码很容易让人产生混淆。现在,X.500格式发展成下面列出的两种格式。o=foobar.com(用公司的Internet地址表示的基准DN)这种格式很直观,用公司的域名作为基准DN。这也是现在最常用的格式。dc=foobar,dc=com(用DNS域名的不同部分组成的基准DN)就象上面那一种格式,这种格式也是以DNS域名为基础的,但是上面那种格式不改变域名(也就更易读),而这种格式把域名:foobar.com分成两部分dc=foobar,dc=com。在理论上,这种格式可能会更灵活一点,但是对于最终用户来说也更难记忆一点。考虑一下foobar.com这个例子。当foobar.com和gizmo.com合并之后,可以简单的把“dc=com”当作基准DN。把新的记录放到已经存在的dc=gizmo,dc=com目录下,这样就简化了很多工作(当然,如果foobar.com和wocket.edu合并,这个方法就不能用了)。如果LDAP服务器是新安装的,我建议你使用这种格式。再请注意一下,如果你打算使用活动目录(ActriveDirectory),Microsoft已经限制你必须使用这种格式。更上一层楼:在目录树中怎么组织数据在UNIX文件系统中,最顶层是根目录(root)。在根目录的下面有很多的文件和目录。象上面介绍的那样,LDAP目录也是用同样的方法组织起来的。在根目录下,要把数据从逻辑上区分开。因为历史上(X.500)的原因,大多数LDAP目录用OU从逻辑上把数据分开来。OU表示“OrganizationUnit”,在X.500协议中是用来表示公司内部的机构:销售部、财务部,等等。现在LDAP还保留ou=这样的命名规则,但是扩展了分类的范围,可以分类为:ou=people,ou=groups,ou=devices,等等。更低一级的OU有时用来做更细的归类。例如:LDAP目录树(不包括单独的记录)可能会是这样的:dc=foobar,dc=comou=customersou=asiaou=europeou=usaou=employeesou=roomsou=groupsou=assets-mgmtou=nisgroupsou=recipes单独的LDAP记录DN是LDAP记录项的名字在LDAP目录中的所有记录项都有一个唯一的“DistinguishedName”,也就是DN。每一个LDAP记录项的DN是由两个部分组成的:相对DN(RDN)和记录在LDAP目录中的位置。RDN是DN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字,这个名字通常存在cn(CommonName)这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cn值作为RDN的基础。如果我把最喜欢的吃燕麦粥食谱存为一个记录,我就会用cn=OatmealDeluxe作为记录项的RDN。l我的LDAP目录的基准DN是dc=foobar,dc=coml我把自己的食谱作为LDAP的记录项存在ou=recipesl我的LDAP记录项的RDN设为cn=OatmealDeluxe上面这些构成了燕麦粥食谱的LDAP记录的完整DN。记住,DN的读法和DNS主机名类似。下面就是完整的DN:cn=OatmealDeluxe,ou=recipes,dc=foobar,dc=com举一个实际的例子来说明DN现在为公司的员工设置一个DN。可以用基于cn或uid(UserID),作为典型的用户帐号。例如,FooBar的员工FranSmith(登录名:fsmith)的DN可以为下面两种格式:uid=fsmith,ou=employees,dc=foobar,dc=com(基于登录名)LDAP(以及X.500)用uid表示“UserID”,不要把它和UNIX的uid号混淆了。大多数公司都会给每一个员工唯一的登录名,因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫FranSmith的加入公司,如果Fran改变了她的名字(结婚?离婚?或宗教原因?),也用不着改变LDAP记录项的DN。cn=FranSmith,ou=employees,dc=foobar,dc=com(基于姓名)可以看到这种格式使用了CommonName(CN)。可以把CommonName当成一个人的全名。这种格式有一个很明显的缺点就是:如果名字改变了,LDAP的记录就要从一个DN转移到另一个DN。但是,我们应该尽可能地避免改变一个记录项的DN。定制目录的对象类型你可以用LDAP存储各种类型的数据对象,只要这些对象可以用属性来表示,下面这些是可以在LDAP中存储的一些信息:l员工信息:员工的姓名、登录名、口令、员工号、他的经理的登录名,邮件服务器,等等。l物品跟踪信息:计算机名、IP地址、标签、型号、所在位置,等等。l客户联系列表:客户的公司名、主要联系人的电话、传真和电子邮件,等等。l会议厅信息:会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。l食谱信息:菜的名字、配料、烹调方法以及准备方法。因为LDAP目录可以定制成存储任何文本或二进制数据,到底存什么要由你自己决定。LDAP目录用对象类型(objectclasses)的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中,你都要根据自己的需要扩展基本的LDAP目录的功能,创建新的对象类型或者扩展现存的对象类型。LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库用行和列来存取数据有根本的不同)。下面是我存在LDAP目录中的一部分食谱记录:dn:cn=OatmealDeluxe,ou=recipes,dc=foobar,dc=comcn:InstantOatmealDeluxerecipeCuisine:breakfastrecipeIngredient:1packetinstantoatmealrecipeIngredient:1cupwaterrecipeIngredient:1pinchsaltrecipeIngredient:1tspbrownsugarrecipeIngredient:1/4apple,anytype请注意上面每一种配料都作为属性recipeIngredient值。LDAP目录被设计成象上面那样为一个属性保存多个值的,而不是在每一个属性的后面用逗号把一系列值分开。因为用这样的方式存储数据,所以数据库就有很大的灵活性,不必为加入一些新的数据就重新创建表和索引。更重要的是,LDAP目录不必花费内存或硬盘空间处理“空”域,也就是说,实际上不使用可选择的域也不会花费你任何资源。作为例子的一个单独的数据项让我们看看下面这个例子。我们用Foobar,Inc.的员工FranSmith的LDAP记录。这个记录项的格式是LDIF,用来导入和导出LDAP目录的记录项。dn:uid=fsmith,ou=employees,dc=foobar,dc=comobjectclass:personobjectclass:organizationalPersonobjectclass:inetOrgPersonobjectclass:foobarPersonuid:fsmithgivenname:Fransn:Smithcn:FranSmithcn:FrancesSmithtelephonenumber:510-555-1234roomnumber:122Go:Foobar,Inc.mailRoutingAddress:fsmith@foobar.commailhost:mail.foobar.comuserpassword:{crypt}3x1231v76T89Nuidnumber:1234gidnumber:1200homedirectory:/home/fsmithloginshell:/usr/local/bin/bash属性的值在保存的时候是保留大小写的,但是在默认情况下搜索的时候是不区分大小写的某些特殊的属性(例如,password)在搜索的时候需要区分大小写。让我们一点一点地分析上面的记录项。dn:uid=fsmith,ou=employees,dc=foobar,dc=com这是Fran的LDAP记录项的完整DN,包括在目录树中的完整路径。LDAP(和X.500)使用uid(UserID),不要把它和UNIX的uid号混淆了。objectclass:personobjectclass:organizationalPersonobjectclass:inetOrgPersonobjectclass:foobarPerson可以为任何一个对象根据需要分配多个对象类型。person对象类型要求cn(commonname)和sn(surname)这两个域不能为空。persion对象类型允许有其它的可选域,包括givenname、telephonenumber,等等。organizationalPerson给person加入更多的可选域,inetOrgPerson又加入更多的可选域(包括电子邮件信息)。最后,foobarPerson是为Foobar定制的对象类型,加入了很多定制的属性。uid:fsmithgivenname:Fransn:Smithcn:FranSmithcn:FrancesSmithtelephonenumber:510-555-1234roomnumber:122Go:Foobar,Inc.以前说过了,uid表示UserID。当看到uid的时候,就在脑袋里想一想“login”。请注意CN有多个值。就象上面介绍的,LDAP允许某些属性有多个值。为什么允许有多个值呢?假定你在用公司的LDAP服务器查找Fran的电话号码。你可能只知道她的名字叫Fran,但是对人力资源处的人来说她的正式名字叫做Frances。因为保存了她的两个名字,所以用任何一个名字检索都可以找到Fran的电话号码、电子邮件和办公房间号,等等。mailRoutingAddress:fsmith@foobar.commailhost:mail.foobar.com就象现在大多数的公司都上网了,Foobar用Sendmail发送邮件和处理外部邮件路由信息。Foobar把所有用户的邮件信息都存在LDAP中。最新版本的Sendmail支持这项功能。Userpassword:{crypt}3x1231v76T89Nuidnumber:1234gidnumber:1200gecos:FrancesSmithhomedirectory:/home/fsmithloginshell:/usr/local/bin/bash注意,Foobar的系统管理员把所有用户的口令映射信息也都存在LDAP中。FoobarPerson类型的对象具有这种能力。再注意一下,用户口令是用UNIX的口令加密格式存储的。UNIX的uid在这里为uidnumber。提醒你一下,关于如何在LDAP中保存NIS信息,有完整的一份RFC。在以后的文章中我会谈一谈NIS的集成。LDAP复制LDAP服务器可以使用基于“推”或者“拉”的技术,用简单或基于安全证书的安全验证,复制一部分或者所有的数据。例如,Foobar有一个“公用的”LDAP服务器,地址为ldap.foobar.com,端口为389。NetscapeCommunicator的电子邮件查询功能、UNIX的“ph”命令要用到这个服务器,用户也可以在任何地方查询这个服务器上的员工和客户联系信息。公司的主LDAP服务器运行在相同的计算机上,不过端口号是1389。你可能即不想让员工查询资产管理或食谱的信息,又不想让信息技术人员看到整个公司的LDAP目录。为了解决这个问题,Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上,不复制需要隐藏的信息。为了保持数据始终是最新的,主目录服务器被设置成即时“推”同步。这些种方法主要是为了方便,而不是安全,因为如果有权限的用户想查询所有的数据,可以用另一个LDAP端口。假定Foobar通过从奥克兰到欧洲的低带宽数据的连接用LDAP管理客户联系信息。可以建立从ldap.foobar.com:1389到munich-ldap.foobar.com:389的数据复制,象下面这样:periodicpull:ou=asia,ou=customers,o=sendmail.comperiodicpull:ou=us,ou=customers,o=sendmail.comimmediatepush:ou=europe,ou=customers,o=sendmail.com“拉”连接每15分钟同步一次,在上面假定的情况下足够了。“推”连接保证任何欧洲的联系信息发生了变化就立即被“推”到Munich。用上面的复制模式,用户为了访问数据需要连接到哪一台服务器呢?在Munich的用户可以简单地连接到本地服务器。如果他们改变了数据,本地的LDAP服务器就会把这些变化传到主LDAP服务器。然后,主LDAP服务器把这些变化“推”回本地的“公用”LDAP服务器保持数据的同步。这对本地的用户有很大的好处,因为所有的查询(大多数是读)都在本地的服务器上进行,速度非常快。当需要改变信息的时候,最终用户不需要重新配置客户端的软件,因为LDAP目录服务器为他们完成了所有的数据交换工作。安全和访问控制LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制,这比用客户端的软件保证数据的安全可安全多了。用LDAP的ACI,可以完成:l给予用户改变他们自己的电话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称,经理的登录名,等等)只有“只读”权限。l给予“HR-admins”组中的所有人权限以改变下面这些用户的信息:经理、工作名称、员工号、部门名称和部门号。但是对其它域没有写权限。l禁止任何人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自己的口令。l给予经理访问他们上级的家庭电话的只读权限,但是禁止其他人有这个权限。l给予“host-admins”组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息l通过Web,允许“foobar-sales”组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理(PDA)上。(如果销售人员的软件都支持LDAP,这将非常有用)l通过Web,允许组的所有者删除或添加他们拥有的组的成员。例如:可以允许销售经理给予或禁止销售人员改变Web页的权限。也可以允许邮件假名(mailaliase)的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。“公用”的邮件列表应该允许用户从邮件假名中添加或删除自己(但是只能是自己)。也可以对IP地址或主机名加以限制。例如,某些域只允许用户IP地址以192.168.200.开头的有读的权限,或者用户反向查找DNS得到的主机名必须为.foobar.com。这不过是让你了解一下可以对LDAP目录进行怎样的访问控制,实际上真正实现起来需要做的工作比这多得多。在以后的文章中我会详细地讨论访问控制LDAP的基本概念LDAP是轻量目录访问协议(LightweightDirectoryAccessProtocol)的缩写,是一种基于客户机/服务器模式的目录服务访问协议.其实是一话号码簿,LDAP是一种特殊的数据库。LDAP目录的优势LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。LDAP同步配置:#Wheretostorethereplicalogsfordatabase#1#replogfile/var/lib/ldap/master-slapd.replogreplogfile/var/lib/ldap/master-slapd.replogreplicahost=192.168.7.108:389binddn="cn=admin,dc=ldap,dc=monkey,dc=com,dc=de"bindmethod=simplecredentials=\'password\'LDAP允许你根据需要使用ACI(一般都称为ACL或者访问控制列表)控制对数据读和写的权限。例如,设备管理员可以有权改变员工的工作地点和办公室号码,但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的,所以不用担心在客户端的应用程序上是否要进行安全检查。什么时候该用LDAP存储数据?LDAP对于存储下面这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。例如,这些信息存储在LDAP目录中是十分有效的:公司员工的电话号码簿和组织结构图客户的联系信息计算机管理需要的信息,包括NIS映射、email假名,等等软件包的配置信息公用证书和安全密匙ldap的存储规则Informationmodel描述LDAP目录结构ldap目录结构图如下ldap目录的根dc=ldap,dc=monkey,dc=com,dc=de(基准DN)/\\ouusersgroups/\\/\\ouuser1user2itother/\\/\\useradminbirdgoogqqqLDAP目录树的最顶部就是根,也就是所谓的“基准DN”。基准DN通常使用下面列出的三种格式之一1)以X.500格式表示的基准DN:o="monkey.com",c=de2)用公司的Internet地址表示的基准DN:o=monkey.com.de3)用DNS域名的不同部分组成的基准DN,这也是现在最常用的格式:dc=monkey,dc=com,dc=de在根目录下,要把数据从逻辑上区分开。大多数LDAP目录用OU从逻辑上把数据分开来。OU表示“OrganizationUnit”,在X.500协议中是用来表示公司内部的机构:销售部、财务部,等等。现在LDAP还保留ou=这样的命名规则,但是扩展了分类的范围,可以分类为:ou=people,ou=groups,ou=devices,等等。更低一级的OU有时用来做更细的归类。例如:LDAP目录树(不包括单个条目)可能会是这样的:dc=ldap,dc=monkey,dc=com,dc=deou=groupsou=itou=purchaseou=administrationou=customerou=usaou=asiaou=japanou=vendorou=usaou=asiaou=japan一个单条LDAP记录就是一个条目,即目录条目.目录条目的组成如下:dn:uid=goog,ou=Users,dc=ldap,dc=monkey,dc=com,dc=de(条目名)objectClass:topobjectClass:inetOrgPersonobjectClass:posixAccountobjectClass:shadowAccountobjectClass:sambaSamAccountcn:googsn:googuid:googuidNumber:1027gidNumber:513homeDirectory:/home/googloginShell:/bin/nologingecos:SystemUserdescription:SystemUsersambaSID:S-1-5-21-2655127250-259968048-1391940258-3054sambaPrimaryGroupSID:S-1-5-21-2655127250-259968048-1391940258-513displayName:SystemUsersambaPwdMustChange:2147483647sambaPasswordHistory:0000000000000000000000000000000000000000000000000000000000000000sambaAcctFlags:[U]sambaLMPassword:44EFCE164AB921CAAAD3B435B51404EEsambaNTPassword:32ED87BDB5FDC5E9CBA88547376818D4sambaPwdCanChange:1178523372sambaPwdLastSet:1178523372userPassword::e1NNRDV9Q3dOM3BEaStHcnVvMUMrUTEzZm1BU1BDRVl3PQ==每个条目都有一个条目名,即DN(DistinguishedName)条目是具有区别名DN(DistinguishedName)的属性(Attribute)集合,属性由类型(Type)和多个值(Values)组成,类型规定了属性允许存放的值的约束条件,同时也规定了该类型的数据进行比较时规则,LDAP中是用语法(syntax)这一概念来表式属性的取值约束和比较规则的。常用的LDAPSyntax是字符型,为了检索的需要添加了BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法(Syntax),而不是关系数据库提供的整数、浮点数、日期、货币等类型,同样也不提供象关系数据库中普遍包含的大量的函数,它主要面向数据的查询服务(查询和修改操作比一般是大于10:1),在属性的基础上LDAP还用schema进一步约束目录条目。schema是一种类型定义机制,每种类型定义又成为objectClass,它规定一个该类型的目录条目实例必须的和可选的属性等其它约束。和面向对象的编程语言相似,objectClass支持继承,并且所有的objectClass都是top的子类型,因为top定义了必须的属性objectClass,所以所有的目录条目实例都有objectClass这个属性。常见的objectClass有:InetOrgPerson,OrganizationalUnit,OrganizationextensibleObject允许任何属性。Example:objectclass(1.3.6.1.4.1.42.2.27.4.2.10NAME\'corbaContainer\'DESC\'ContainerforaCORBAobject\'SUPtopSTRUCTURALMUSTcn)对象类有五个组件:OID(对象标识)、唯一名称、父对象(SUP)、任何需要的属性(MUST)和允许的属性列表(MAY)。OID是由LDAP目录的内部数据库机制使用的数据标识符。从概念上讲,它们与IP地址相似,因为每个对象类都必须有一个唯一数字。并且象DNS和IP之间的关系那样,由创建它们的个人进行注册,并由这些人“拥有”。有关注册OID的更多信息,请参阅InternetAssignedNumbersAuthority(或IANA)。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库专用名词解释:DN=DistinguishedName一个目录条目的名字CN=CommonName为用户名或服务器名,最长可以到80个字符,可以为中文;OU=OrganizationUnit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;O=Organization为组织名,可以3—64个字符长C=Country为国家名,可选,为2个字符长L=Location地名,通常是城市的名称ST州或省的名称O=Orgnization组织名称OU=OrgnizagionUnit组织单位STREET街道地址UID用户标识LDAP客户端和LDAP服务器端交互的一般过程1.LDAP客户端发起连接请求与LDAP服务器建立会话,LDAP的术语是绑定(binding)。在建立绑定时客户端通常需要指定访问用户,以便能够访问服务器上的目录信息。2.LDAP客户端发出目录查询、新建、更新、删除、移动目录条目、比较目录条目等操作3.LDAP客户端结束与服务器的会话,即解除绑定(unbinding)LDAP的操作基本上有三类:查询、更新和认证查询是LDAP中最复杂的操作,它允许客户端指定查询的起点、查询的深度、属性需要满足的条件以及最终返回的目录条目所包含的属性。查询的起点是通过baseDN来指定的,查询的深度即范围有三种baseObject,singleLevel,wholeSubtree。baseObject只对baseDN指定的目录条目进行查询;singleLevel只对baseDN的直接子节点进行查询;wholeSubtree对baseDN(包括baseDN)的所有子节点查询。属性需要满足的条件是用searchfilter来表达的。此外,还可以指定别名的解析(AliaseDereferrencing)和查询的结果集大小限定和查询时间限定。searchfilter的基本语法是:attributeoperatorvalue主要的操作符有:=,>=,<=,=,~=其中=可以表示匹配子字符串,~=近似相等。例子有sn=表示sn有值的所有目录条目。cn=JSmi,sn~=smit。多个简单filter可以用关系操作符组成复合表达式,基本语法是:(&(filter1)(filter2)...(filtern))((filter1)(filter2)...(filtern))(!(filter))例子有:((sn=Miler)(sn=Smith)),((sn=Miler)(&(ou=Austin)(sn=Smith)))更新操作LDAP定义了以下更新操作:add创建新的目录条目到目录树种delete删除目录条目,只有叶子节点可以删除,删除别名并不影响被引用的节点modify修改目录条目的属性,包括增加、删除属性modifyDN移动目录树认证操作LDAP定义了以下认证操作:bind该操作用于在LDAP的客户端和服务器之间建立会话unbind该操作用于结束LDAP会话abandon该操作用于放弃前一个操作LDAP权限管理可以通过ACL(访问控制表,AccessControlList)来控制对目录的访问。accesstoattrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChangebydn="cn=admin,ou=DSA,dc=ldap,dc=monkey,dc=com,dc=de"writebydn="cn=smbldap-tools,ou=DSA,dc=ldap,dc=monkey,dc=com,dc=de"writebydn="cn=nssldap,ou=DSA,dc=ldap,dc=monkey,dc=com,dc=de"writebyselfwritebyanonymousauth(needtobind)bynone(noaccess)LDAP+APACHE如果让ldap支持apache,你需要做:1)在编译apache时,加上以下参数:--with-ldap--enable-ldap--enable-auth-ldap2)配置apache,在httpd.conf里加上如下配置:
提供LDAP入门和面试心得会员下载,编号:1700774814,格式为 docx,文件大小为17页,请使用软件:wps,office word 进行编辑,PPT模板中文字,图片,动画效果均可修改,PPT模板下载后图片无水印,更多精品PPT素材下载尽在某某PPT网。所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系963098962@qq.com进行删除处理。