首页 LDAP使用手册

LDAP使用手册

举报
开通vip

LDAP使用手册LDAP使用手册 1. LDAP介绍 LDAP就是一种目录,或称为目录服务。LDAP的英文全称是Lightweight Directory Access Protocol,即轻量级目录访问协议,是一个标准化的目录访问协议,它的核心规范在RFC中都有定义[16][17]。LDAP基于一种叫做X.500的标准,X.500是由ITU-T和ISO定义的目录访问协议,专门提供一种关于组织成员的电子目录使得世界各地因特网访问权限内的任何人都可以访问该目录。在X.500目录结构中,需要通过目录访问协议DAP,客户机通过DAP...

LDAP使用手册
LDAP使用手册 1. LDAP介绍 LDAP就是一种目录,或称为目录服务。LDAP的英文全称是Lightweight Directory Access Protocol,即轻量级目录访问协议,是一个标准化的目录访问协议,它的核心规范在RFC中都有定义[16][17]。LDAP基于一种叫做X.500的标准,X.500是由ITU-T和ISO定义的目录访问协议,专门提供一种关于组织成员的电子目录使得世界各地因特网访问权限内的任何人都可以访问该目录。在X.500目录结构中,需要通过目录访问协议DAP,客户机通过DAP查询并接收来自服务器目录服务中的一台或多台服务器上的响应,从而实现对服务器和客户机之间的通信控制。然而DAP需要大量的系统资源和支持机制来处理复杂的协议。LDAP仅采纳了原始X.500目录存取协议DAP的功能子集而减少了所需的系统资源消耗,而且可以根据需要进行定制。 在实际的应用中,LDAP比X.500更为简单更为实用,所以LDAP技术发展得非常迅速。目前在企业范围内实现的支持LDAP的系统可以让运行在几乎所有计算机平台上的所有应用程序从LDAP目录中获取信息,LDAP目录中也可以存储各种类型的数据,如:电子邮件地址、人力资源数据、公共密匙、联系人列表,系统配置信息、策略信息等。此外,与X.500不同,LDAP支持TCP,这对当今Internet来讲是必须的。目前己有包括微软、IBM在内的几十家大型软件公司支持LDAP技术。1997年发布了第三个版本LDAPV3[17],它的出现是LDAP协议发展的一个重要转折,它使LDAP协议不仅仅作为X.500的简化版,同时提供了LDAP协议许多自有的特性,使LDAP协议功能更为完备,安全性更高,生命力更为强大。 1.1组成LDAP的四个模型 组成LDAP的四个模型是:信息模型,命名模型,功能模型,安全模型。 1.1.1信息模型 LDAP信息模型定义能够在目录中存储的数据类型和基本的信息单位。这个基本的信息单位是条目(entry)——即关于对象的信息集合。通常,条目中的信息说明真实世界的对象,比如人员、部门、服务器、打印机等真实对象。 条目是属性的集合,每个属性描述对象的一个特征。每个属性有一个类型和一个或多个值。属性类型说明包含在此属性中的信息的类型,而值包含实际的数据。所有条目都有一个必须属性集合和一个可选属性集合,属性的约束用来限制作为属性值的数据的类型和长度。例如一个描述人的条目必须有一个cn属性和一个sn属性。人的条目中还有许多其他属性是可选的,而不是必须的。所有关于必须属性和可选属性的信息集合统称为模式(schema),目录模式对存储在目录中的信息的类型和值保持控制和维护。 1.1.2命名模型 LDAP命名模型定义用户如何组织和引用数据。目录中的所有目录条目按照层次模型进行排列,它是一个分级或类似树状的结构,主要是为了更好的存储和搜索目录树中的对象。 命名模型描述的就是目录信息树(Directory Information Tree,DIT),DIT包含网络环境信息,子树能从主干上分枝。这与DNS的分级结构是相似的。DIT中的每个对象,如用户,就成为目录服务条目(Directory Service Entry,DSE),简称条目。条目是信息模型的基本单位。DIT中的每个对象在LDAP结构中必须是唯一的,因此用户必须使用辨识名(Distinguished Name,DN),用它在DIT范围内代表一个对象的完整名称,辨识名由目录名和该目录条目到目录根部的路径所组成。在最顶层的目录条目代表的是国家或者国际组织,比如US(美国),CN(中国)等,而在每个国家的目录条目下是省或州。在最底层的目录条目代表的是人或者某些具体资源。这是传统的X.500遵循的命名模型,是以地理位置和国家区域为基础的。LDAP支持X.500的命名模型,同时也引入新的基于域名系统DNS的命名模型,可以利用dc域组件(domain Component)属性将DN以DNS的方式表示,例如“SJTU.edu”被表示为“dc=SJTU,dc=edu”。我们采用LDAP的这种DNS的方式组织LDAP中的条目,上面的条目来表示上海交通大学。 LDAP命名模型提供了较大的灵活性,使用户可以用一种易于管理的方式把条目放入目录。可以创建一个条目描述一个组织,再把描述组织中人的信息的所有条目都放在这个条目之下。 1.1.3功能模型 LDAP功能模型说明了能够使用LDAP协议对目录执行的操作。LDAP功能模型包含一个可以分成三类的操作集合: 1)查询类操作允许用户搜索目录并取回目录数据。 2)更新类操作允许用户对目录条目进行添加、删除和修改和重命名,即修改RDN。 3)认证和控制类操作允许客户端向目录证明自己的身份。 除了这三类主要的操作,LDAPv3协议通过LDAP扩展操作定义了添加新操作的框架。扩展操作以一种有序的方式对协议进行扩展来满足新的需要。 1.1.4安全模型 LDAPv3是一个功能强大的目录访问协议,它还定义了一组安全功能,在所有的LDAP客户机和服务器之间保持这些功能的互操作性非常重要。有三种安全等级可供选择,其安全性依次增加: 1. 无认证(匿名):这是最简单的一种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,只在没有数据安全问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 并且不涉及访问控制权限的时候才能使用。例如,当目录是任何人都可以浏览的地址簿时,就是这种情况。 2. 基本认证(简单密码):当使用LD妙的基本安全认证时,客户进程通过网络向服务进程发送一个DN和口令来标识自己。服务进程检查客户进程发送的DN和口令是否与目录中存储的DN和口令相匹配,如果匹配则认为通过了认证。 3. SSL/TLS安全套接字层:安全套接字层协议的意图是提供认证和数据的安全性,包括完整性和保密性,它封装了TCP/IP套接字,以便于每个TCP/IP应用都能够使用它保证通讯的安全。SSL由Netscape开发,当前版本是3.0,SSL/TLS支持服务器认证(客户机确认服务器)、客户机认证(服务器认证客户机)、或双向认证。 1.2 LDAP schema 1.2.1 schema的概念 在LDAP中把对象类、属性类型、语法和匹配规则统称为模式(schema),在LDAP中有许多系统对象类、属性类型、语法和匹配规则,这些系统schema在LDAP相关的RFC标准中进行了定义,不同的应用领域也定义了自己的schema。在实际应用,需要 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 目录模式描述将要存储在目录中的数据类型。如果有的数据无法用服务器支持的标准模式来表示,这就需要对模式进行扩展和自定义。这有些类似于XML,除了XML标准中XML定义外,每个行业都有自己标准的DTD或DOM定义,用户也可以自扩展;也如同XML在LDAP中也鼓励用户尽量使用标准的schema,以增强信息的互联互通。 1.2.2 schema的目的 目录的模式(schema)是一组规则,用来确定目录能存储什么以及服务器和客户端在进行目录操作时如何对待数据。schema被各个LDAP组件包括服务器、客户端、应用程序,用来作为数据交换的标准,以保证对数据理解的正确性,从而保证了LDAP协议的开放性。schema也被用作目录中存储的数据的长度、范围和格式的强制约束,也用于目录中数据的规整和对访问者权限的控制。 1.2.3 Schema元素的格式 在LDAPv3中,其构成是由RFC2252定义的。schema元素有系统定义的和用户定义两类。一般用户只能定义属性类型attribute type和对象类object class,系统定义的schema元素最小集合由RFC2252[18]和RFC2256[19]规定,这是所有的LDAP server实现都必须支持的,除此之外,各LDAP server的实现还会提供一些其他RFC定义的和生产商自行制定的属性类型和对象类,同时还支持用户自定义,但提供的语法和匹配规则基本都是RFC规定的,极少增减。 1.2.4 OID(object identifier,对象标志符) 每一个schema元素由一个OID来做唯一标志,不同用户自定义的schema元素名称可能冲突,但只要设置正确,OID是全球唯一、不会冲突。OID是由1段或多段十进制数字组成,段之间以点“.”分隔,例如“1.2.3.4”。其中第1段(或称根OID,base OID)需向IANA免费申请。 申请OID的IANA网址:http://pen.iana.org/pen/PenApplication.page IANA的OID清单网址:http://www.iana.org/assignments/enterprise-numbers 如果用户需要自定义schema要素,应申请自己组织的根OID,不要使用其他组织的或臆想的根OID,这可能导致非常隐蔽和费解的错误,OID的分段是为了体现树状层次关系,即1.2.3.4是1.2.3的直接子类,1.2.3是1.2的直接子类。 1.2.5 Schema元素的名称 用户自定义的schema元素的名称由不同组织设置,没有机制能保证不发生冲突。所以,在本组织外或跨服务器使用自定义的schema元素时,应使用OID而不是名称。同时,应该尽量在自定义的schema元素名称前冠以标志本组织的单词,以提供更加清晰的表示。 1.2.6构成Schema的元素 构成schema的元素有属性类型(attribute types)、对象类(object classes)、语法(syntaxes)、匹配规则(matching rules)、目录信息树内容规则(DIT content rules)、目录信息树结构规则(DIT structural rules)和命名形式(name forms)。下面分别介绍这些元素: 1. 属性类型(attribute types) 属性类型控制属性格式,包括属性的语法、匹配规则、是否可以多值、修改权限和用法等。属性类型也是可以继承的,可直接由0或多个属性类型继承而来,形成属性类型的层次关系树。每个目录条目包含一组属性,用来存储现实世界中某种对象的信息,如人、某个组织等。每个属性有一个类型以及与之对应的一个或多个值,含有一个值的属性,例如人的生日等被称为单值属性;含有多个值的属性,例如人们都会有多个电话号码或联系地址,这些被称为多值属性。属性值的取值依赖于属性类别,例如mail类型的属性只可以用来存放电子邮件地址,而jpegphoto类型的属性则专门用来存放jpeg格式的图像。每个属性均有一个属性语法,用来决定该属性值的类型,如字符串、二进制码等。有的属性还规定了匹配规则(matching rules),这些规则决定属性的值应该如何进行比较,例如相等规则、取子串规则或者决定属性查询时应该如何排序的排序规则。 2. 对象类(object classes) 现实世界中的实体之间往往具有一些相同或相似的特性,被划分为不同的类,在LDAP中称作对象类。对象类是共享某些特性的对象的识别家族,即对象的模板,是通过定义条目中所含的属性来定义目录中的条目类型。在LDAP目录服务中,每个目录条目均包含一个或多个对象类属性object class,指示该目录条目的类型。该类型决定了目录条目中必需或可能包含的属性,其中必需包含的属性被称为强制的mandatory,可能包含的属性被称为可选的optional。对象类的定义遵循继承机制,子类继承父类所有的强制属性和可选属性。Top类是对象类层次的根,所有其它对象类都直接或间接地由它派生出来,top类中定义的强制属性objectclass保证了每一个目录条目至少有一个objectclass属性,目录条目只有在至少满足一个对象类的要求时才能被添加到目录中。 LDAP中有三种对象类,包括:(1)抽象类:提供基础特性以供其它对象类继承,抽象类只能继承自抽象类,结构类都是直接或间接继承自抽象类top。单独的抽象类不能定义条目。(2)结构类:用来定义DIT的结构,只有结构类能独立定义条目,所以一个条目必须包含结构类。条目一旦经由某个结构类定义,其结构类不能改变。(3)辅助类:用来增加条目的特性,通常被用来增加条目的必须和可选属性,每个条目可以属于任意数量的辅助类。辅助类不像结构类,条目附加了辅助类之后辅助类是可以改变的。 3. 语法(syntaxes) 语法没有名称,所以在使用时应引用OID。语法主要指的是数据类型,LDAP中大部分数据类型是字符型,为了检索的需要,添加了BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法(syntax),这些和关系数据库提供的整数、浮点数、日期、货币等类型既有一些相似的地方也略有不同。 4. 匹配规则(matching rules) 这是LDAP中为了加快查询的速度,针对不同的数据类型,可以提供不同的匹 配方 学校职工宿舍分配方案某公司股权分配方案中药治疗痤疮学校教师宿舍分配方案医生绩效二次分配方案 法。如针对字符串类型的相等、模糊、大于、小于、子串包含等,这样就为服务器在搜索操作过程中如何比较字符串提供了 准则 租赁准则应用指南下载租赁准则应用指南下载租赁准则应用指南下载租赁准则应用指南下载租赁准则应用指南下载 。在查询过程中,匹配规则告知服务器所用的对照顺序及运算符。 除上述元素以外,schema可能还包括目录信息树内容规则(DIT content rules)、目录信息树结构规则(DIT structural rules)和命名形式(name forms),但这些都不是LDAP服务端的实现所必须支持的,有很多LDAP服务不支持这三种元素。 1.3 LDAP API 要想在应用程序中使用LDAP服务,需要在程序中加上LDAP支持。程序对LDAP服务的支持主要通过调用LDAP API函数来完成的。要想调LDAP API函数,系统中要安装LDAP的库文件,微软、Netscape、OpenLDAP等都提供LDAP的库文件,它们都遵从RFC1823[20]定义的LDAP API函数的规范,因此可以根据需要选择适当的LDAP函数库。 JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API[21]。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。命名服务是很常见的,我们在web浏览器输入URL时,DNS这个符号URL名转换成通讯标识IP地址。目录服务是命名服务的自然扩展,两者之间的关键差别是目录服务中对象不但有名称,还有属性。例如,描述人员信息的对象在拥有自己名字的同时,还可以有email地址,而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。通过JNDI提供的对命名或目录服务的访问操作,我们可以集中存取公共信息,这一点在策略管理中是很重要的。这使得策略信息更协调、更容易管理,还可以为其他网络应用提供公共信息服务。 2. LDAP配置和使用 2.1 安装服务端和客户端 这里,我们使用Apache Directory。安装步骤如下: 1) 安装LDAP服务器端:Apache Directory Server。 2) 确认已经在控制面板(管理工具(服务中开启Apache Directory Server服务 3) 安装LDAP客户端:Apache Directory Studio。 关于LDAP服务端和客户端详见http://directory.apache.org/ 2.2 LDAP使用 在使用之前,我们先看看LDAP的专用名词: DN=Distinguished Name 一个目录条目的唯一标识名 CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文; OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文; O=Organization 为组织名,可以3—64个字符长 C=Country为国家名,可选,为2个字符长 L=Location 地名,通常是城市的名称 ST 州或省的名称 O=Orgnization 组织名称 OU=Orgnizagion Unit 组织单位 STREET 街道地址 UID 用户标识 下面给出LDAP的基本操作: 1) LDAP的连接 import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class LDAP { private DirContext ctx; private Hashtable env; // 服务器地址 private String LDAP_URL = "ldap://localhost:10389"; // 管理域的dn private String MANAGER_DN = "uid=admin,ou=system"; // 管理域的密码 private String MANAGER_PASSWORD = "secret"; // 管理域的验证方式 private String AUTH_TYPE = "type"; // private String CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; public LDAP(){ connectLDAP(); } public void connectLDAP(){ try{ env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY); env.put(Context.PROVIDER_URL, LDAP_URL); env.put(Context.SECURITY_AUTHENTICATION, AUTH_TYPE); env.put(Context.SECURITY_PRINCIPAL, MANAGER_DN); env.put(Context.SECURITY_CREDENTIALS, MANAGER_PASSWORD); ctx = new InitialDirContext(env); System.out.println("LDAP建立连接成功!"); }catch(NamingException e){ System.out.println(e); } } } 2) LDAP连接的关闭 // 关闭到LDAP服务器的连接 private void closeConnection() { try { ctx.close(); } catch (NamingException ne) { System.out.println(ne); } } 3) 创建一个分组OU // 创建一个OU(当用户组不存在时创建) public Boolean createOU(String ouName,String baseDN,ArrayList names) throws NamingException { try { // load the attributes BasicAttributes attrs = new BasicAttributes(); attrs.put(addObjclassSet(names)); attrs.put("ou", ouName); ctx.createSubcontext("ou="+ouName+","+baseDN, attrs); return new Boolean(true); } catch (NamingException ne) { System.out.println(ne); return new Boolean(false); } } //生成Objectclass属性 BasicAttribute addObjectclassSet (ArrayList names){ BasicAttribute objclassSet = new BasicAttribute("objectclass"); objclassSet.add("top"); for(Iterator iterator = names.iterator();iterator.hasNext();) objclassSet.add(iterator.next()); // load the attributes return objclassSet; } 4) 添加一个UID //添加一个uid entry public boolean addUID(String uidName, String baseDN, ArrayList names) throws NamingException{ try{ BasicAttributes attrs = new BasicAttributes(); attrs.put("uid",uidName); attrs.put(addObjectclassSet(names)); ctx.createSubcontext("uid=" + uidName + "," + baseDN, attrs); return true; }catch(NamingException e){ e.printStackTrace(); } return false; } 5) 删除Entry //传入entity的DN,删除这个entity public boolean delEntity(String DN){ try { ctx.destroySubcontext(DN); System.out.println("del Entity success!"); return true; } catch (NamingException e) { System.out.println("del Entity error!!"); e.printStackTrace(); return false; } } 6) 修改entity的名字 //修改entity名字,传入entity的DN public boolean reName(String oldDN,String newDN){ try { ctx.rename(oldDN, newDN); System.out.println("rename Entity success!"); return true; } catch (NamingException e) { System.out.println("rename Entity error!!"); e.printStackTrace(); return false; } } 7) 获取UID的DN // 传入uid的名字,查找目录DN,得到 的这个entity的 DN public String getUIDDN(String uidName,String baseDN) throws NamingException{ String DN = new String(); SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); String searchFilter = "(&(uid=%1))"; searchFilter = searchFilter.replaceAll("%1", uidName); // Search for objects that have those matching attributes NamingEnumeration answer; try { answer = ctx.search(baseDN, searchFilter, constraints); while (answer.hasMore()) { SearchResult sr = (SearchResult) answer.next(); DN = sr.getNameInNamespace(); } } catch (NamingException e) { e.printStackTrace(); } return DN; } 8) 获取OU的DN // 传入ou的名字,查找目录DN,得到 的这个entity的 DN public String getOUDN(String ouName,String searchDN) throws NamingException{ String DN =new String(); SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); String searchFilter = "(&(ou=%1))"; searchFilter = searchFilter.replaceAll("%1", ouName); // Search for objects that have those matching attributes NamingEnumeration answer; try { answer = ctx.search(searchDN, searchFilter, constraints); while (answer.hasMore()) { SearchResult sr = (SearchResult) answer.next(); DN = sr.getNameInNamespace(); } } catch (NamingException e) { e.printStackTrace(); } return DN; } 3. LDAP举例 附件给出了LDAP的一个例子,供参考。
本文档为【LDAP使用手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_530844
暂无简介~
格式:doc
大小:72KB
软件:Word
页数:10
分类:互联网
上传时间:2012-03-30
浏览量:31