关于这个的我记得很少有介绍的 有也不大详细。
那就看看这个吧 :)
信息来源:绿盟
LDAP是指轻便目录访问协议。
要听懂本讲座,须先对目录概念有一个基本的认识。本讲座的难度水平是300。你们今天将要学到的东西包括:LDAP基本原理;诸如端口、参考、控制、rootDSE及管理查询策略等。我们也将学到使用各种LDAP工具,以帮助进行故障诊断并管理活动目录。我们还将深入探讨捕捉并解释各种LDAP错误的方法。
下面是我们今天不予讲授的内容。它们是:Microsoft活动目录、ADSI、名字解析技术、规划管理,以及如何对LDAP客户进行编程。
何谓目录服务?它是一种在分布式环境中发现目标的方法。目录具有两个主要组成部分。第一部分是数据库。数据库是分布式的,且拥有一个描述数据的规划。第二部分则是访问和处理数据的各种协议。
目录服务与数据库之间的主要区别是什么呢?其实,二者有许多共同点,比如,它们都允许对存储数据进行访问;但是,在目录服务与数据库之间仍存在着一些基本差异。目录主要用于读取,数据库则是为读写而设计的。
目录服务不适于进行频繁的更新,而且,在本质上属于典型的分布式结构。
何谓LDAP?LDAP是一个目录服务协议。目前,存在众多版本的LDAP,而最常见的则是Ver 2和Ver 3。它们分别于1995年和1997年首次发布。为什么此二者如此出众呢?LDAP在四方面有过人之处:特性、标准、各种实现工具和LDAP API。
与X.500协议对比,LDAP优势何在呢?LDAP从根本上简化了X.500协议。在LDAP中,我们仅需付出10%的努力即可获得X.500协议90%的功能。而且,二者在传输方面也有所不同。LDAP直接运行于IP之上——不是TCP就是UDP。如前所述,它通过排除低级使用特性对X.500协议的功能进行简化。LDAP所使用的数据表示法非常简单。它基本上采取简单的字符串格式。而与X.500协议相比,LDAP所使用的编码规则也是非常简单的。
LDAP都有哪些模式呢?第一个是信息模式,它描述了信息的结构。第二个是命名模式,它说明了信息的组织和调用方式。第三个是功能模式,它从基本上描述了使用信息的方法及其所产生的效果。最后是安全模式,即目录服务中的信息是如何进行保护的。
让我们先来讨论第一种模式——信息模式。该模式源自X.500协议,且引入了目录信息树的概念。由若干条目构成的访问是由一个或多个LDAP服务器提供的。稍后,我们将在第一个演示中对LDAP信息树进行介绍。目录服务代理(即DSA)基本上是一个为LDAP需求提供服务的服务器。信息模式还引入了规划这一概念。
规划是什么呢?它不过是数据蓝图罢了。规划分为4类——抽象类、结构类、辅助类和88类。在1993年版的X.500标准之前,88类即已被界定,它今天的存在仅仅是由于历史原因。辅助类就像一个内建的属性文件,而抽象类则基本上是结构类的一个模板。在活动目录中,这些类的大多数都是结构化的,而其目录信息树中的条目也是基于结构类的。
类由属性构成。属性不过就是一个对象所保有的信息类型,它们视每个属性所能存储的数据类型来定义语法。
目录信息树有许多对象。它们也称为条目,任何对象不是一个容器,就是一个叶结点。容器中还会包含其它对象,而叶结点则不再包含任何对象。如前所述,所有的条目均源自结构类。Microsoft将条目视为对象,每个条目均具有相应的属性,因此,容器和叶结点也就具有属性。非常有趣的是,属性既可以是单值的,也可以是多值的。
关于活动目录,我们需要确认已理解了下列概念。一些是关于GUID的概念。GUID是一个128位的全局唯一标识符文件。它在时间和空间意义上都是唯一的。我们也拥有用来标识类或属性的对象标识符。它就如同在整个企业范围内独一无二的TCP/IP地址。美国所有公司都拥有一个以1.2.840打头OID。以下是一些由登记机构提供的OID。我们可以看到,Microsoft DS中所有的OID均以1.2.840.113556.1打头。而语法则定义了你可以在属性中存储的数值类型。这些值是用OID来定义的。这里有一些语法举例:属性中可存储DN、二进制数、数字串或UTC时间。
让我们就对条目所做的剖析进行回顾。如果我们有一个条目,它就拥有属性。这些属性中的一部分是强制性的,而决定上述属性对于某一条目是否具有强制性的因素是在规划中定义的。如前所述,这些属性可以是单值的,也可以是多值的。另一套属性是可选属性。可选属性也是为规划中的条目而定义的。最后,我们还有一些叫做操作属性的东西。这些属性不是在清除条目时设置的,它们由系统在创建过程中设置,并可在任何必要时进行更新。例如,当系统创建时,随着对象的清除,操作属性将被设置。让我们进行第一个演示——剖析条目。
好的。让我们首先调出LDP工具,我们会在以后的所有演示中用到这个工具。LDP工具是Windows 2000支持工具的组成部分。它使用全部LDAP API与活动目录进行对话。我们要做的第一件事是连接到我们的域上,这个域是streetmarket.net。请注意这个LDAP编号为389的端口。我们稍后将谈到所有这些参数。接着,我将连接到活动目录,这样,我就建立了一个针对活动目录的连接。请注意,该工具描绘出了全部由LDAP API所产生的调用。例如,这个由LDAP API产生的叫做ldap_open的调用。我们稍后将对各种LDAP API进行简述。我们要做的下一件事是绑定。我将把自己赋值为管理员。我们将在稍后的演示中谈及各种认证规划。好的,我已被认证为管理员了。
下一件要做的事是显示目录信息树。这是一个目录信息树。如前所述,它拥有许多对象或条目,让我们单击user容器。你可以看到所显示的各种对象。让我们在管理员用户条目上进行单击。请看右侧的窗格。它显示了管理员对象的所有关联属性。这些数字意味着属性成员拥有5个值。例如,它在这儿表示着,CN域管理员是管理员对象的组成部分。
让我们也来看一下操作属性。当一个操作属性创建时,我还同时简要提及了GUID对象。这些就是活动目录用来在目录信息树中区别所有对象的唯一值。
下一节是相对识别名称,即RDN。这里是相对识别名称的参数表。它基本上相当于一个文件名。例如,让我们以第一个为例,CN等于RTHOM,这就是一个名为RTHOM的RDN。CN是在规划中定义的,它是个别或平等的,它也是LDAP语法的组成部分。于是,我们就有了各种RDN,第一部分正定义着规划,它包括CN、DC和OU。OU代表着组织单元,而DC代表着域控制器。识别名称相当于文件系统中具有完整路径的文件名。条目在目录信息树范围内根据DN进行组织安排。让我们举一些例子说明。在这儿,CN相当于RTH表,OU相当于PSS,等等,等等,这些加起来,就是RTHROM对象的完整DN。你可以看到,等于RTHROM的CN就是该DN的RDN。让我们进入下一个演示,它将更清楚地解释这一事实。
我这里有一个叫做Test的对象。你可以看到第一个对象。我以高亮度显示的是完整的DN(识别名称),你们可以看到,相当于Test的CN就是RDN,而它也是该对象的属性之一。这里,DN自身也是该对象的一个属性。让我们单击位于等于Test的CN之下的这个对象。你会看到,它的RDN与前者相同,但是,其识别名称是不同的。是什么能使这些对象成为唯一的呢?不仅是DN,而且还有它们的GUID。请看一看第二个对象的GUID,并将其与第一个对象的GUID进行比较。你会看到它们是唯一的。让我们接着进入功能模式。
功能模式在3个方面有9种操作。第一个方面是认证,该方面包括的操作有:打开、绑定和拆分。第二个方面是询问,它拥有一个搜索操作和一个比较操作。最后,第三个方面是更新,与之相关的操作有添加、删除、修改和修改RDN。第一个方面是认证,其中,打开操作是指打开一个通向目录服务代理的连接,绑定操作是一个将客户认证至DSA的过程。认证的各种方法均由LDAPv3支持。最后,拆分操作用来终结客户会话,并释放有关资源。
让我们继续进行演示。在这个演示中,我将向你展示与询问相关联的各种操作,它们是:打开、绑定和拆分。我在右侧窗格上清空整个屏幕。这个连接过程基本上说是打开操作。请注意,我们在这儿有一个无连接选项。当我们选定无连接选项时,所有操作都将针对UDP协议,而非TCP协议。好的,我们有了一个连接器,让我们绑定吧。
如前所述,有许多可供选择的机制来执行绑定操作。我现在选用的是SSPI方法。好的,我已经完成了绑定。你要做的第三件事是拆分。让我们尝试一种不同的机制来进行绑定。首先要打开一个连接。第二是选定一种认证方法。我这里选择SASL。你会看到我没能绑定成功。LDAP的另一个反馈就是该认证方法不受支持。我们怎样才能发现哪些认证方法能够得到DSA的支持呢?稍后谈到RootDSA时,我们将涉及有关内容,接着,我们还将讨论如何查询一个DSA以找出所有受支持的方法。
接下来,我将向你们展示在认证过程中所进行的各种网络捕捉活动。Windows 2000 Server和Windows 2000 Advanced Server集成了网络监视器。这里,我将展示一些刚才进行的捕捉。让我们单击打开连接选项卡。在这里,你会看到,当处于基于连接状态时,所用协议为TCP。让我们在刚才所做的无连接捕捉上执行打开。让我们单击打开。你会看到在无连接状态下使用的协议是UDP。现在,让我们看一看绑定捕捉。这儿有一个绑定SSPI,网络监视器已显示出与LDAP相关联的各种框架。因此,我将单击以打开它们中的一些。你会看到产生了绑定请求。你会从这些捕捉中获得许多信息。你也会看到当绑定请求产生时,是哪一版本的LDAP正在被调用。你还会发现规划使用的到底是哪一种认证方法。在这里,SASL DSS SB机制被激活使用。让我们转向PowerPoint演示计算机。
功能模式询问有一种叫做搜索的重要操作。搜索是一种从目录信息树中选择条目的操作。它返回每个条目的指定属性。以下是与搜索操作相关联的参数。你需要指定一个基本对象。该对象是你进行搜索的出发点。接着,你还应定义一个搜索的范围和一个过滤器。你想要根据在过滤器中所设置的参数限定返回条目的数量吗?最后,你希望与搜索返回条目相关联的全部属性一并被返回吗?你可能需要对返回属性的数量加以限定。另一种操作是比较操作。它是用来判定一个条目是否包含具有特定值的给定属性这种极其简单的操作。返回的信息基本上是真或假这样的逻辑值。你需要定义一个基本对象。该对象应具有一个识别名称,而你的搜索将从这个识别名称开始。第二个参数是范围。稍后,我们将讨论范围的不同级别。第三个参数是过滤器。我们稍后也会对此进行深入讨论。最后是属性。哪些属性将包括在搜索结果中呢?你可以在选项中进行设定。
第一个参数是基本对象。它基本上是一个定义了搜索起始点的DN。如前所述,该对象是目录信息树上的一个结点。这儿有一些例子。你需要为成功的搜索设定的第二个参数是范围。这儿有一个基本DN,如果你将范围设定为基本范围,那么,搜索结果返回的唯一对象便是该基本对象,当然,搜索结果还会一并返回基本对象的属性。如果你将搜索范围设定为一级,那么,该基本DN对象的全部直系子对象都将在搜索结果中被返回。最后,如果你将搜索范围设定为子树,那么,在基本DN之下的全部对象(包括基本DN在内)都将在搜索结果中返回。
好的,让我们使用范围参数进行一个关于最新LDAP搜索的演示。好的,我将断开先前的连接并清除对象。现在,搜索结果已被清空,让我们再次连接。我正在绑定。我将回到我的SSPI上。现在,我已绑定成功。
让我们执行一些LDAP搜索。我已选定的基本DN对象是DC,它等于Street Market。DC是一个等价物。过滤器我们稍后再讲。而我已选定的范围则是基本范围。稍后,我们还将就各种搜索选项进行讨论。现在,我姑且将其设为1.1,随着讲座的进行,我这样做的原因会慢慢清楚起来。最后,让我清空屏幕并单击运行。
我以基本范围进行搜索所得到的结果仅包含一个条目,即同一基本DN。让我在这里删除它,并运行同一结果……同一搜索。我仍旧得到一个条目,仍旧是同一基本DN。当然,我还得到了与该对象相关联的各种属性。既然我想要对显示在屏幕上的信息量加以限制,我就输入1.1,以此告知DSA不返回与该对象有关的任何属性。让我清空这一屏。
让我们做一个一级搜索。基本DN对象仍保持不变。现在,我得到了9个条目,这些条目均为直系条目,而且,都是等于Street Market的DC。DC是一个等价物。我们尚未得到包含在其中的配置,因为,配置是前后互为参照的……是截然不同的划分。
让我们执行一个子树搜索。你会看到这儿有104个条目,它们都是位于根对象下的子对象。让我们转向网络监视器来查看在搜索操作期间捕捉到的一些信息。好的,打开。让我们看看范围……好的。这儿已经有一个搜索请求被产生了。事实上,你将会看到是哪种请求被提出。而你之所以能看到这些,是因为搜索指定的基本范围。你会看到,基本DN是DC等于Street Market,而_dc则等于net,你还会看到诸如过滤器类型等不同的东西。让我们看一下搜索响应。这儿有一个搜索响应。它所返回的信息主要上是基本对象本身。让我们继续我们的演示。
过滤器是你能在搜索操作中设定的另一个参数。这儿有各种不同的过滤器。等式过滤器主要用来滤出符合等式条件的对象。例如,等于Dan的SN将你的搜索结果限定于姓氏等于Dan的特定对象范围内。我们还拥有一个近似过滤器。关于它,我们必须提及的是,Microsoft活动目录不支持该过滤器。第三个过滤器是子串过滤器。例如,你可以设定SN等于DS Todd,它将把搜索范围限定于姓氏为Dan或其它以DN前两个字母开头的对象范围内。我们还拥有大于等于过滤器。等于Dan的SN将使你通过搜索得到所有姓氏以D及其以上字母开头的对象。而小于等于过滤器则是对大于等于过滤器的补充。当前过滤器是非常重要的。面向所有搜索的缺省过滤器是对象类,这意味着对全部对象进行搜索,因为目录信息树中的所有对象都拥有对象类属性。
你也可以创建复杂的搜索过滤器。这儿有几个例子。例如,令对象类等于user,并使SN等于Dan。这会使你搜索到所有姓氏为Dan的用户对象。你也可以在过滤器上设定或操作。这儿有一个例子。最后,我们还可以在过滤器上设定非操作。让我们到演示计算机上使用过滤器执行一些搜索。
好的,我将清空屏幕。我已选中了子树选项并将得到随搜索结果返回的全部属性。这是缺省过滤器,它告知DSA提供给我在Street Market下的全部条目。让我就字符串CNE做一次搜索。我得到了两个条目,第一个是等于Street Market的CN,它等于Net;第二个是它下面的子对象。它们两者都包含CN,这也就是搜索结果包括这两个条目的原因。让我们搜索到基本DN下的所有用户。好的,我已在对象类过滤器的等号后输入了user。让我清空屏幕。于是,我们得到了8个条目。这儿共有8个用户,你可以看到其中的一个是Kerberos用户标签对象。因此,我们实际得到了7个条目。就搜索真实用户而言,这无疑是一个更好的过滤器。前一个的搜索结果包括计算机对象,因为计算机对象也在……它们是与这些相同的用户对象类一并创建的。如果你将过滤器限定为对象类的附加,你将会……比如,令对象类别等于个人,那么,你将得到更好的搜索结果。让我们再定义几个过滤器。我使用一个大于等于过滤器,你会看到我们搜索到了全部……不仅包括测试对象,而且包括TS Internetuser及其它有关字母T的条目。让我们继续演示文稿。
我们如何限定与搜索操作返回对象相关联的属性呢?你可以指定需要随同每个对象返回的属性,或精确指定LDAP显示名称。例如,如果你只需要一个CN,你就可以在属性列表中指定CN,或者,如果你了解OID的话,也可以指定相关的OID。如果你还记得前面讲过的内容,你会明白我在属性列表中输入1.1的含义,那就是,告知DSA不返回与搜索结果相关联的任何属性。让我们进行下一个演示,来看一看如何对搜索返回属性加以限定。这儿有一个搜索操作。我将把过滤器改回缺省设置,也就是指定为全部对象。在这儿进行操作。这就是选项。让我们设定仅显示返回对象的CN属性。接着,让我们清空屏幕。我将执行这个搜索。好的,你看到了。我搜索到了所有等于Street Market的条目(它等于Net),同时,我们也看到随这些条目仅返回了一个属性,那就是CN。如果你已如前所示,将搜索限定于1.1,你会看到没有属性随条目返回。在此,让我们结束附带属性选项的搜索演示,再次回到文稿演示上来。
询问方面的另一种操作是比较。这是一项非常简单的操作。它用于就对象属性的存在及赋值进行校验。该项操作所需的参数即是对象的识别名称。你还应指定需进行赋值检验的属性以及需要与之进行比较的值。该操作返回的信息基本上是真或假之类的逻辑值。让我们到演示电脑上做一个简单的LDAP比较操作。让我们看一看这个对象……我对它加下划线。这儿是关于对象的属性。让我们看一看描述属性。该描述将这个值内建于对Internet信息服务进行匿名访问的帐户中。我将这个值拷贝下来。我将把这个值与另一对象进行比较(这两个对象基本上属于同类对象)。于是我得到了一个“真”值。这是一个非常简单的操作,它主要是将一个属性的值与你所提供的另一个值进行比较。
让我们对这个值进行一些修改并再次执行比较操作。当然,因为修改后的值不再与该对象的实际值相匹配,你便得到了一个“假”值。让我们继续文稿演示。
好的,让我们对各种搜索组件进行一次回顾。开始定义搜索时,你需要首先指定基本对象。该对象是搜索开始的结点。它基本上是搜索开始处结点的识别名称。第二个需要提供的参数是搜索范围。对于搜索范围可设定3个不同的级别,它们是基本、一级和子树。
我们需要提供的第三个参数是过滤器。在前面进行的演示中,我们看到了各种过滤器。对象类是缺省的过滤器,在这种意义上,因为所有对象均拥有对象类属性,故而,通过提供缺省过滤器,搜索将命中全部对象。最后,我们了解了如何对随同搜索结果返回的属性加以限定。当执行搜索时,你可以定义一个属性列表,而搜索操作将只返回你在列表中指定的那些属性。你不仅可以为那些属性指定LDAP显示名称,同时,还能就上述属性的OID进行定义。
功能模式的下一个方面是更新。它有4项基本功能。第一项是添加操作,该操作主要用于在目录信息树中创建新的条目。第二项操作是修改。一个修改操作能改变现存条目的有关属性。它既能向现有对象中添加新的属性,也能对现有对象中现有属性的值进行修改。第三种操作是修改RDN(即相对识别名称)。它主要用于对目录信息树中的现存条目进行重命名。我们还将看到修改RDN操作的一个非常有趣的方面,那就是将对象迁至另一个容器中的移动操作。最后,第四项功能是删除操作。它主要用于将条目从目录信息树中删除。让我们在添加操作上多花费一些篇幅。
添加操作有两个参数。第一个参数显然是新添对象的识别名称。第二个参数则是与新添对象相关联的属性及属性值列表。这里列出了成功执行添加操作的关键要领。第一个关键是父对象必须以容器的形式存在。你不可能清除存在于任何地方的对象,但是,在容器中的对象是能够被清除的。DN必须是唯一的。这是添加操作获得成功的关键因素之一。第三个关键是新对象必须与规划保持一致。正如前面讨论过的那样,规划为对象定义了强制属性,因此,为成功地进行对象添加操作,你需要向所有强制属性赋予正确的值。最后,访问控制必须允许进行添加操作。您必须拥有添加对象的权限。让我们到演示电脑上执行一个LDAP添加操作。
我将要向目录信息树中添加的是用户对象,正如你们在机器上看到的,所有的用户对象均存在于user容器中,因此,我要做的只是在同一user容器内添加一个新的用户对象。让我们开始做吧。我们为新对象提供的第一个参数是DN。我将其命名为new user,并把它提供给user容器。好的,我已提供了新DN。我们要做的第二件事是为所有的强制对象以及与用户对象相关联的强制属性提供赋值,那么,首先应赋值的属性是对象类。于是,我为它赋值。通过阅读规划,我还知道,保存在用户对象下的另一强制属性是Sam帐户名。这里,我也将其赋予new user。于是,我就在这儿创建了一对属性值。在执行之前,我将清空屏幕。让我们运行吧。好的,新对象添加成功了。我将通过查看活动目录用户和MMC中的电脑来检查添加操作是否真的成功了。
好的,让我们看看这个new user吧。你会注意到,这里并不存在与new user相关联的属性。所有这些属性都是可选的,而我们在创建new user时并没有对它们进行过设置。你还会看到new user目前存在于user容器之下。请看一下由系统添加的其它属性。例如,运行修改或运行创建。这些都是我们先前提到过的操作属性。让我们再看一看对象类。尽管我们已将对象类设定为一个用户,请注意,它仍拥有包括顶级人员在内的4个值。而这些则是从用户对象中继承下来的。鉴于我们感兴趣的协议是LDAP,因此,你会看到添加请求得到了确保。你会了解应如何获得有关添加请求、相关属性及发往DSA赋值列表的大量信息。这儿有一个对象名,你会看到我们已将对象类和Sam帐户发送给DSA。让我们迅速查看一下有关响应。这儿是添加操作响应,结果代码是成功。让我们回到文稿演示中。
我们要集中讨论的下一个功能是修改操作。与该操作相关联的参数有两个。第一个理应是所需修改对象的识别名称,而第二个则是需要执行的修改项目。它们包括:是否需要添加新属性,是否需要修改与现有属性相关联的值,以及是否需要彻底删除一个属性。这儿有一些成功的要领。首先是对象必须存在。其次是所有的属性修改必须成功。设想你是能够试图修改一个并不存在的属性的值呢,还是能够试图修改一个已存在的属性的值呢?于是,整个操作就会失败。实际上,结果条目必须也合乎规划。最后,你必须拥有就目录信息树中的对象进行修改的权限。让我们回到演示电脑上执行这些LDAP修改操作。
既然我们刚才已创建了new user对象,那么,就让我们对该对象的一些属性进行修改吧。我们需要的第一件东西是对象的DN。通过阅读规划,我们知道有一个叫做邮件的属性,该属性是可选的。我将把该属性添加到new user对象中,并将其赋值为
newuser@streetmarket.net。请看我所选定的操作。我选择了添加操作,该操作通知DSA我试图添加一个叫做邮件的属性,而该属性的值为
newuser@streetmarket.net。我清空屏幕并执行操作。好的,修改成功了。让我们到活动目录的user部分去看一看与new user相关联的属性吧。好的,这儿就是了。让我们查看电子邮件属性。你会看到该属性已被赋值为
newuser@streetmarket.net。下面,让我们在此基础上执行另一个修改操作。让我们删除当前属性值并将其替换为enduser。好的,让我们执行操作。好的,修改成功了。我们迅速查看一下……在这儿,你能看到……new user的电子邮件地址已被修改为
enduser@streetmarket.net。最后,让我们来执行删除操作。我将删除先前的列表,该操作不需要设定属性值。因此,我将一并将邮件属性删除。现在,让我们执行删除操作。操作成功了。让我们再次调出new user。好的,你已看到我们已不再有电子邮件地址了。让我们继续进行文稿演示。
功能模式的下一项操作是修改RDN(即相对识别名称)。该操作有4个相关参数。第一个参数仍然是需要进行修改操作的对象的识别名称(DN)。第二个参数是你想要设定的相对识别名称。第三个参数是可选的,它是新的父对象的DN。最后,你已删除了OID RDN标识选项,这基本上意味着你已删除了对象并使用新的RDN对该对象进行了重新构建。这儿有一些成功的要领。首先是对象必须存在;其次是新的DN必须唯一;最后是你必须拥有执行修改操作的访问许可。让我们到演示电脑上执行一个RDN修改操作。
我将清空屏幕并修改new user的RDN。
演讲者:这就是我已经输入的内容。我将赋予该对象的新DN值是OID user。让我们执行修改操作。好的,你看到它成功了。让我们通过刷新user容器来进行校验。你会看到我们现在已拥有了OID user。也就是说,new user已被OID user替换。而与这个OID user相关联的其它全部属性均同new user的相应属性相同。我要做的下一件事是将OID user移到另一个容器中。这是与修改RDN操作有关的重要操作之一。现在,我们已知CN等于OID user。让我们将CN的值改为OID DN。请仔细观察我正在新DN文本框中设定的DN值,那就是CN等于OID user,CN等于test,等等。这是一个test容器。让我们执行修改操作。好的,修改成功了。让我们在user容器下迅速查看。你会注意到OID user不再存在于user容器之下。我们还看到CN等于test。该对象已被移至一个不同的容器中。因此,修改RDN的副作用就是将对象移动到另一的容器中。让我们继续进行文稿演示。
与功能模式相关的最后一项操作是删除操作。它是一项非常简单的操作,且只需指定一个参数。这个参数就是对象的DN。这儿照旧列出了一些成功的要领。对象必须存在且不能有子对象。LDAP技术规范不支持后台删除。最后,你必须拥有执行删除操作的访问许可。让我们再到演示电脑上执行一个简短的LDAP删除操作。
我将把OID user的DN拷贝下来。让我们试着删除OID user。你在此看到的是,由于你的选项是基于客户的,因此,它不被LDAP所支持,但是,该工具事实上仍对容器下的每个进行搜索并能够将它们删除。这并不是一项符合LDAP技术规范的操作。让我们着手删除这个OID user吧。现在,我清空屏幕。好的,好的,现在开始删除。删除成功了。让我们看一看CN等于test下面的部分。OID user不复存在了。让我们继续文稿演示。
接下来,让我们讨论一下LDAP的安全模式。该模式包含一个关于认证机制的洽商。在前面的演示中,我们已经学会了如何在不同的认证机制中进行选择。所有的条目及其属性均拥有访问控制列表,这就使特定用户能够在这些条目上执行特定的操作。具有签名机制的LDAP协议为Kerberos会话键所支持,这是Microsoft的独家专利。让我们到演示电脑上转储并访问与特定对象相关联的安全描述符控制列表。
我首先清空屏幕。让我们转储访问控制列表或与对象相关的安全描述符,并令CN等于test。许多信息被转储到右侧的窗格中。你能够看到与该对象相关的一些属性。例如,你会看到内建的管理员对该对象拥有完整的控制权。这项对安全描述符或访问控制列表进行转储的操作是通过一个LDAP控制来实现的。该控制不是LDAP技术规范的组成部分,但它却受到活动目录的支持。稍后,我们将对LDAP控制做进一步的讨论。让我们继续文稿演示。
为深入理解LDAP的高级特性,我们应先对该协议的某些特定概念有所了解。现将它们中的一些列示如下:端口号,我们已经在前面的演示中看到了所使用过的389号LDAP端口。我们还将在后面的幻灯片中对端口号做进一步讨论。LDAP既支持同步操作,也支持异步操作。我们将通过一些演示来执行异步搜索。而用来转储条目并将其引入目录服务中的导入导出工具则寥寥无几。最后,LDAPv3支持下列特性:RootDSE对象及其相关属性的概念(在后面的幻灯片中述及)。我们还将谈到管理查询策略以及参考与链锁之间的区别。最后,我们将讨论何谓LDAP控制以及如何利用等值线在活动目录中扩展基本LDAP的功能。
端口号:这儿有一个关于重要端口号的列表。如前所述,389是标准LDAP端口号。如何你使用SSL,预先定义的端口号则为636。你也许清楚,活动目录支持全局分类表。全局分类表是一个关于整个企业目录信息的简单映射或局部映射。为查询全局分类表,你需要使用端口号3268。最后,如果SSL被用来查询全局分类表的话,端口号3269则应予使用。
同步与异步操作。同步调用经常被阻塞,而与API相关联的同步操作则用下划线清楚地标记出来。只有搜索结果不受限制,才能确保调用不被阻塞,进而获得全套的搜索结果,这时,同步操作应被采用。而异步操作则用来产生多重API调用。这样生成的调用将无一阻塞。系统会马上返回一个消息ID,这样,你就能够使用该消息ID对先前的调用状态进行查询。例如,在异步搜索完成后,搜索结果能否被调用。让我们在演示电脑上执行一个异步搜索。
我先清空屏幕。接下来要做的第一件事是执行一个同步操作,以展示在全部结果返回之前API全面阻塞所导致的延迟状态。我将对基本对象执行一次子树级搜索。我要求返回的搜索结果包括全部属性。现在运行搜索,请注意,在搜索结果产生之前,API处于全面阻塞状态。看这儿,好的,让我们开始吧。于是我们得到了全部结果。在搜索操作从DSA中取回全部结果之前,系统出现了一个间歇。下面要做的是使用异步方式执行同一操作。因此,我选择异步调用并执行同一操作。搜索结果马上就返回了,当然,返回的结果是没有结果。你会看到被使用的API是ldap_search_ext。这些属于外部API。由于我们执行的是一个异步操作,因此,在结果的尾部,你将不会看到_yes。系统为我们提供了一个消息ID。我们看一下这个消息ID。它的号码是82,这也就是我们所执行的搜索。现在,我们应求助于系统以取回与异步操作生成的消息ID相关的搜索结果。这样,我们就结束了异步搜索演示。让我们回到文稿演示中。
活动目录包括两个重要的导入导出工具。它们是LDIFDE和CSVDE。LDF意指LDAP交换格式或数据交换格式,它是一个用来描述格式的标准,而这里所说的格式则是与活动目录中各种对象的转储操作一并声明的。CVS代表共用个体值。当然,你也可以经常使用ADSI来导入导出对象。让我们到演示电脑上执行一个特定用户对象的导入导出操作。
好的,让我们调出命令行方式。这儿有一个关于LDIFDE工具的参数列表。该列表的内容可谓面面俱到,其中,我们将用到三个参数:一个是-D,它提供了搜索的起点;另一个是-R,它提供了将被转储的对象种类;最重要的是-M,如果你在活动目录电脑上将转储文件作为导入编辑器的话,该参数将确保LDIFDE工具不会对那些无法被导入至活动目录中的特定操作属性进行转储。让我们继续演示,使用LDIF就部分用户对象进行转储。
现在,我需要指定起始点的DN。令DC等于Street Market,指定名为user的对象类,进而指定一个文件。让我们开始执行吧。好的,它已被连接到域上。它是通过使用SSBI以一个当前用户的身份进行登录的。当然,当前用户是一个管理员。LDIF工具搜索那些条目并对其进行转储。让我们看一看转储文件。好的,这就是被LDIF工具转储的用户。你能够看到,这儿有第一个用户对象的DN、该用户对象的属性及属性值。有意思的是,LDAP的格式的确非常简单,对此,我将在后面的演示文稿中进行阐述。我所做的就是选定这个文件并对它进行修改,从而使我能够添加一个名为New User 2的新用户。让我们看一下这个文件。这儿是我为New User 2指定的DN,我还将把New User 2赋值给CN和SAM帐户。让我们试着使用LDIFD工具来导入这个文件,并查看该用户是否已经成功地创建了。
这里,还有两个需要传递给LDIFDE工具的参数:-I用来提示导入;-F用来指定包含信息的文件名。在就上述参数进行定义之后,我将运行LDIFDE工具。现在,它已经连接到对方电脑上,而有关条目也已经成功地添加。让我们看一看是否能在user容器内找到New User 2。于是,我们刷新显示,并使用user容器。我们可以看到,New User 2访问已经成功地添加了。接下来,让我们使用CSVD来执行相近的操作。
让我们先来看一看CSVD工具拥有的参数。这些参数与LDIFDE使用的参数较为相似,因此,让我们先来解决那些使用CSVD -M -D用户的疑问。令CN等于user,令DC等于Street Market和Net,并将文件名指定为users.csv。好的,CSVD工具已转储了全部用户。让我们看一看users.csv文件。你会看到,该文件采用的是以逗号分隔数值的格式。第一行是你所调用的内容……它包含一个属性列表,当然,列表中的属性已经被转储了。这儿是DN。你还会注意到,我们先前使用LDIFDE工具所创建的新用户工具也已经转储了。事实上,你可以非常顺利地将该文件导入至电子数据表中。让我们使用CSV来创建一个新用户。
我已于早些时候对该文件进行了适当的编辑,以便使用CSV添加名为New User 3的新用户。好的,这就是我所创建的文件,该文件将使用CSV导入这个等于New User 3的CN。让我们执行导入。有关参数为-I -F New User 3.CSV。好的,一个条目已经被成功地添加了。让我们对New User 3是否已经成功地添加进行校验。让我们刷新user容器。好的,New User 3已经在这儿了。如果在文件编辑引入的格式脚本中存在错误的话,一个对出错原因进行解释的日志将在运行目录中创建。这里提到的错误是在对全部用户进行转储并添加新用户时出现的。通常情况下,对CVS而言,日志文件名为CSV.log;而就LDIF而言,日志文件名则为LDIF.log。你可以查阅该日志并找出错误的特性。让我们回到文稿演示中。
RootDSE是LDAPv3中一个非常重要的对象。它是由LDAPv3定义的一个标准属性。它包含了目录服务器的全部定制信息——比如,它有哪些功能、它如何进行配置等等。通过对RootDSE对象进行查询,你能够发现许多关于DSA的信息。这些信息是通过执行一个附带其它DN的根区基本对象搜索而取得的,需要说明的是,该搜索使用了将对象类赋值为start的过滤器。我们将在下一个演示中看到其实现过程。但是,请先看看这些资料,它们将有助于你理解RootDSE中所发布的对象属性。RFC 2251指定了与LDAPv3相兼容的DSA应在RootDSE下发布的属性内容。Windows 2000发布了关于RootDSE对象的更多属性,而所有这些属性都是在Q Article 219005中定义的。这里是一些关于RootDSE对象特定属性。这些则是在相关环境中进行命名所需的术语:子规划、子条目、全体服务器、支持的服务器扩展、支持的控制、支持的SASL机制以及支持的LDAP版本。我们还将清楚地看到与这些属性相关联的值。
以下是一些仅在Microsoft定制的DSE中发布的关于活动目录的属性。它们包括当前时间、缺省服务名、缺省命名上下文、规划命名上下文、配置命名上下文以及支持的LDAP策略。再往下就是高级调用的USN、DNS主机名、LDAP服务器名等等。让我们到演示电脑上对RootDSE对象进行查询。我要做的第一件事是再次调出LDP。好的,我正在进行连接。在引用root.exe时,一件非常有趣的事便是,你不必将其绑定到DSA上。事实上,无须绑定,你就可以执行查询并找出你正在与之对话的DSA所支持的功能。让我们对RootDSE对象进行查询。我们是通过发布另一个DN来进行查询的,而这还需将搜索范围限定在基本级上。让我们开始执行吧。由于在先前的调用中,我们选择了异步操作方式,故该程序没有响应。而通常情况下,我们是使用同步操作方式的。为此,让我们以同步操作方式再次运行该程序。好的,我们得到了与RootDSA对象相关联的全部属性。如前所述,当前时间是由Microsoft定制的。让我们看一些有趣的属性。你会发现,你与之连接的DSA事实上是一个全局分类表。在这个演示中,我们还应找出该DSA所支持的机制。你可以看一下。该机制与GSS API和GSS SP有关。与其它任何关于DSA的对象相比,你能够从该对象中得到更多的信息,这是不言而喻的。让我们继续进行文稿演示。
何谓管理查询策略?这些策略控制着DSA的行为。我们应如何配置它们呢?最简便的方法就是使用与Windows 2000一并发布的Ntdsutil.exe工具。你可以在IP Deny列表中进行选择,也可以就各种LDAP策略进行设定。你还可以使用Modify LDAP.vbs对策略进行创建、修改或删除操作。你可以将策略应用到特定的网站或服务器。最后,所有管理策略都在Q Article 217773中进行了明确地定义。
查询策略中的部分属性值如下所示。通过最大连接对象进行设定,你将能够设置与特定DSA实现的最大连接数。在任何时候,你都能对查询的精确度进行设置。你还可以按自己的愿望为最大连接等待时间赋值。下一页列出了更多可以在查询策略中设定的属性,包括最大查询持续期间和最大临时表容量等。一个有趣的属性是最大假脱机线程数。如果你拥有一台多处理器电脑,该属性的存在对于根据处理器数量设定最大假脱机线程数的决策是十分有价值的。好的,让我们到演示电脑上设置一些查询策略。
NT DS Utility工具是与Windows 2000一同发布的。它包括在缺省设置中。先让我们看一看该工具支持的所有命令。你会看到……通过使用NT DS Utility,你将能制作许多素材,但这次,我们则主要将精力集中在LDAP策略上。让我们看一看LDAP策略。
你会看到,在LDAP下存在着许多可供查看当前属性值的命令。在查看当前属性值之前,你需要连接到DSA上。为此,我将连接到streetmarket.net域上。好的,我们已实现了与管理员的连接。让我们退出连接方式并进入LDAP策略方式。让我们再看一看有关命令。好的,我们再看一下与查询策略相关联的属性值。你会发现最大假脱机线程数缺省设定为4,起始接收时间上限被设为120秒,最大页容量为1000,而最大连接数为50。让我们将最大连接数改为5000。于是,我们将最大连接数设定为5000。让我们再对以上属性值进行一次确认。好的,你会看到该属性原值为50,而经过设置,你能够支持的最大连接数的已变为5000。除非你执行一次连接,否则,这些属性值将不会生效。既然我们要使上述修改生效,那么,让我们再对这些值进行一次确认,然后开始连接。连接数的新设值为5000。NT DS Utility是一个非常强大的工具。你可以使用它执行多种不同的操作,比如,恢复数据库。让我们看一看文件操作。该操作仅仅是……为使用NT DS Utility执行特定操作,你需要处于DS维护方式下。让我们继续进行文稿演示。
参考。参考是LDAP中一个非常重要的概念。DSA对被视为知识的目录层次信息进行管理。DSA会告知客户对象位于名称空间的哪个位置。MSFT DSA知识来源于配置命名上下文和DNS名称空间。让我们看一看活动参考。
设想你有这样一个客户,它正在针对某一特定的DSA产生对象请求,同时,此客户并不拥有这个对象,但又知道该对象所处的位置。DSA会将参考信息发送给该客户,于是,客户就能将所得到的信息告知有关的DSA进而取回需要的对象。在X.500中,我们使用了链锁概念。利用自身拥有的知识,一个DSA能够对其它DSA进行查询以获取信息,并由此最终发现特定客户。这个概念就叫做链锁,而在LDAP中,链锁是不受支持的。
知识参考。辅助参考是关于DSA下一个分区的知识。前后参照是关于存储在前后参照对象中的一个分区的知识。前后参照非常重要,为此,我们稍后将为此专门进行一个演示。高级参考则是DA在对搜索基础一无所知的情况下披露出的知识参考。
何谓前后参照?前后参照来源于前后参照类。它拥有两必要的属性:一个是NC name,即被引用的目录分区标识名;另一个是DNS root,它是针对给定分区的DSA的DNS域名。你能够以两种方式创建前后参照——在内部,通过系统创建;在外部,由管理员通过参考外部对象信息创建。我们将在下面的演示中创建一个前后参照。让我们到演示电脑上去。
我先执行绑定。好的,我通过了认证。我将向streetmarket.net之外的名称空间添加一个新的前后参照。我将其命名为xyzcrossref。所有的前后参照都是在partitions容器中创建的,而该容器则处于配置命名上下文中。因此,对象类是与前后参照(即xyzcrossref)相关联的。我们还需要杀死xyzcrossref所引用的命名上下文。让我们将这个XYZ公司的命名上下文杀死,而我们还需知道这个公司的DNS root是什么。好的,让我们清空屏幕并执行操作。好的,我们已成功地添加了cross-ref。现在,让我们看一看这个cross-ref的效果。现在,我将就等于_____的CN 和存在于company.net名称空间上的DC执行一个搜索。我们知道,该对象并不存在于这个DSA的目录信息树上,但我们还知道,在这个能够指出其名称空间的OID中有一个cross-ref。让我们清空屏幕并执行搜索。我们遇到了一个错误,这个错误基本上是一个参考错误。参考能够被返回给客户,请注意一下返回的信息。该信息事实上指明了DSA的DNS名称,要知道,客户就是在DSA中就特定对象进行搜索的,而且,如果需要的话,DSA还可以使用上述信息。该信息还涉及到我们在搜索期间获得的全部错误代码。让我们继续进行文稿演示。
LDAP中的下一个重要概念是控制。控制是扩展LDAP功能的一个方法。我们知道,LDAP技术规范提供了丰富的功能,但我们仍不免要根据服务器或客户的需求对LDAP的功能进行扩展。它是通过OID进行描述的。Windows 2000支持许多控制,它们都在Q Article 222560中予以发布。其中一些受Windows 2000活动目录支持的控制列示如下。首先是树删除控制。正如我们在上一个演示中所提到的,LDAP技术规范并不支持条款约束或删除操作。我们拥有一个目录同步控制。它允许客户在上一个目录同步控制运行完之后对目录进行修改。我们还拥有通知控制。它为就对象所进行的修改提供通知。接下来的一页列出了另一些控制。跨域控制在与LDAP修改DN请求配合使用的情况下,将允许对象在Windows NT域之间被移动。你也可以……在活动目录中,当你对一个对象进行删除操作时,该对象事实上并没有完全删除。该对象会在一个可设定的天数期间内以外套黑框的状态继续存在,而这项控制(即显示删除控制)允许客户要求系统将已删除的对象与LDAP的搜索请求一并返回,从而实现对已删除对象(以黑框方式显示)的恢复。我们还拥有安全描述符标识控制,该控制可被用来为对象间接地设置访问控制元件。校验标识名控制可列举出在DN已知的情况下DSA所能校验的各种对象。无参考控制能够告知DSA不生成参考。你还拥有各种服务器搜索选项控制,该控制允许客户将搜索选项传递给DSA。分页结果控制——在要求客户在小区域内检索信息时非常有用。服务分类控制可用来将搜索结果以特定顺序进行分类索引。属性范围控制还能将多值属性按单值属性进行读取。再下一页首先列示了返回扩展DN控制。该控制能够返回对象的GUID和SID。最后是获取服务器状态控制。这是Microsoft的独家专利。该控制执行DSA搜索状态,而LDP则拥有用于解析搜索结果的代码。让我们到演示电脑上执行去一个显示删除控制。
如前所述,一个对象被删除后,就处于黑框显示状态,并继续存在于一个叫做deleted objects的隐含容器下。现在,就让我们就该对象进行搜索。你需要做的一件事就是使用扩展的……当你调用控制时,你需要使用扩展的API,这儿就有一个需要你为其指定API的控制。我已经输入了与显示删除控制相关联的OID值——1.2.840, 113556.1.4.417。这是基于服务器的控制。让我们将其登记并予以扩展。你需要指定一个关于该对象的子树搜索,而针对基本DN,你还需要指定那些以黑框方式显示的被删除对象所位于的隐含容器,因此,我将CN赋值为deleted objects container。当然,该容器是隐含的,因此,在浏览目录信息树时,你将不会看到它。你还需要在此将搜索范围设定为基本级。好的,搜索结果出来了。这是一个隐含容器。既然我们将搜索范围设定为基本级,且刚刚找到这个隐含容器,就让我们转到并选取中一个子树,以便得到所有的被删除对象。我们来看。在隐含容器下,我们找到了18个条目。让我们进行一次快速浏览。它们是被先前操作删除的对象中的一部分。请注意这个特殊字符。它不是一个ASCII字符。而这个被删除对象是……它的名称是由被删除前所关联的GUID加上这个非ASCII字符组成的。你还可以看一下该对象上一个名为显示删除的属性,当然,该属性被设定为激活状态,因为它是被删除对象的墓碑(删除标志)。这个演示向你展示了如何使用一个控制来执行针对服务器地址的特定操作,该操作虽未由LDAP在其技术规范中予以定义,但却是LDAP的一项扩展功能。让我们回到文稿演示中来。
LDAP错误。这儿有两个文件,它们列出了所有能被返回的LDAP错误。第一个文件是RFC 2251,它列出了由LDAP技术规范定义的全部错误。而如果你正在为一个LDAP客户进行编程,你必须阅读并籍此对错误形成感观认识的最重要的文件便是winldap.h。错误家族中包括:操作错误,这类错误在所有错误中处于核心地位;属性错误;对象基础错误;安全错误;命名错误以及连接/定时错误。一个LDAP错误得到……你能够从LDAP中获得一个结果代码。例如,你没有提供正当的信用凭证,或者,你取得了一个无效的信用凭证。你得到一个代码,而通过使用LDAP API,该代码能够被翻译成一个字符串。你还能得到以16进制表示的出错提示,该提示是由Windows自定义的。Windows 2000生成的最重要的LDAP代码是DSID。DSID能够被映射到活动目录中某一确切的代码行上。我们将在稍后的演示中看到它。如何你遇到一个难以描述而又需要从PSS中求解的问题,你需要提供的最重要的代码便是DSID,通过该代码,你将能够看到活动目录中的相关代码。
演讲者:让我们执行一个关于LDAP错误的演示,在演示中,请特别注意理解DSID。
眼前这个LDAP工具能为你提供一些非常有用的信息,当然,这还有赖于你对其选项进行正确的设置。例如,让我们在搜索操作过程是打开调试跟踪输出。当你进行设置时,你会看到,在LDAP中,API实际上是被用来对调试跟踪进行设定的。
我们清空屏幕并执行一些明知不能成功的搜索。例如,让我们搜索一个名为Foo的对象,当然,我们知道该对象并不存在。在错误发生且调试跟踪处于打开状态的情况下,你会看到由LDAP输出的全部信息。我们得到了一个等于32的LDAP错误代码,它已经翻译为字符串,该字符串显示搜索对象不存在。你还得到了一个我们刚才谈到过的DSID。当DSID代码被提供给PSS时,如前所述,PSS会使用该代码来定位当错误返回时在活动目录中所执行的实际代码。
让我们再看一下随错误同时产生的捕捉信息。这儿有一条在输入错误口令时所捕捉到的信息。一个二进制过程被执行而你能够……让我们看一下到底是生成了何种代码。已知条件是,我们使用LDAPv3,自动指示类型是SASL,而一套错误的信用凭证已经输入。我们来看一看系统产生了什么响应。好的,这儿有一个来自DSA的响应。它是一个绑定响应,其书写代码为无效信用凭证。你还会看到各种返回的错误代码,而其中当然包括与操作相关的DSID。因此,如果你难以对面临的问题进行描述,最好的选择就是启动捕捉网络图表或网络框图,进而对其进行深入挖掘以找出相应的错误代码。从错误代码中,你或许能……得到一个解释操作失败的原因。让我们回到文稿演示电脑上。
如前所述,LDAP拥有一套丰富的API,任何人都能够通过使用这套API为客户编程达到执行针对DSA操作的目的。例如,LDAP工具本身就使用各种LDAP API来执行我们刚才所演示的操作。这儿有一些与认证操作相关的API,它们是ldap_open()、绑定API和拆分API。接着是与询问操作相关的API——搜索与比较。更新操作的API包括修改、添加、修改RDN及删除。此外,还有一些与异步API类似的API。它们与你在屏幕上看到的这些API完全相同,只是在尾部没有_yes。让我们对前面所讲授的内容进行一下回顾。
LDAP是什么?它是一个RFC兼容的目录访问协议。
你为何要使用LDAP?你使用它访问并修改活动目录中的属性。
LDAP都有哪些模式?它有4种模式:信息模式、命名模式、功能模式和安全模式。
你如何理解LDAP错误?在为客户进行编程时,我们会用到winldap.h文件;在打开调试跟踪或执行网络捕捉的情况下,我们还可以使用LDAP工具来查看输出的错误。
如何令LDAP为我们工作?通过使用Microsoft LDAP API或ADSI。
以下是一些Microsoft DSA所不支持特性。Microsoft DSA不支持别名条目。也就是说,Microsoft DSA不支持从一个条目到另一个条目的指示器。别名条目没有在规划中进行定义,因此,如果我们想要设置别名的话,则需要在管理方面付出努力。近似搜索过滤器也不受Microsoft DSA支持。链锁是一个X.500概念,它当然也不受Microsoft DSA支持。
这儿列出了各种针对LDAPv2的RFC。如果你对使用LDAP API感兴趣的话,RFC1777和RFC1823是最关键的两个。
针对LDAPv3的RFC——RFC2251是一个关键,它对LDAP进行了描述;RFC2253则对标识名称的字串表示法进行了描述。你还会发现LDAP URL格式,它是由RFC2255描述的。
这儿有一些参考资料:《理解LDAP》,这是由Dan Thompson编撰的一份白皮书,它包括在CD/Whitepapersupportdirectory中。
www.microsoft.com/ntServer中也提供了大量关于活动目录的信息。《Windows 2000资源工具》也包含了许多关于活动目录和LDAP的信息。
要得到更多相关信息,请访问
www.microsoft.com/TechNet;而Windows 2000技术中心则拥有大量与Windows 2000——特别是活动目录——相关的各方面信息。
好的,在此我还要感谢Jim Stewart、Michael MacWilliams和Dan Thompson。Jim Stewart和Michael MacWilliams制作并编辑了本次讲座,而Dan Thompson则负责对本次讲座的内容进行审阅。