针对 UNIX 的 Microsoft Windows 安全和目录服务解决方案指南

简介

转于Microsoft 官方网站(http://www.microsoft.com/china/technet/itsolutions/migration/unix/usecdirw/00wsdsu.mspx)

在本章中,您将了解到网络安全和目录服务的基本原则。您还将了解到本指南中说明的安全和目录服务标准:Kerberos 和轻型目录访问协议 (LDAP)。

本章简要介绍这些主题。以后各章介绍更详细的信息。通过阅读所提供的参考资料,读者可以找到有关这些主题的更全面的讨论。

本章分为三部分:

身份验证和授权的安全原则介绍

目录服务和标识管理的概念介绍

安全和目录服务标准

返回页首

身份验证和授权概述

当讨论计算机安全时,有一些关键概念是普遍适用的,无论用户采用何种操作系统和实施。数据安全的三大要求是:

保密性

完整性

可用性

个人银行业务领域的一个示例提供了对这些概念的简单解释。保密性是指一则信息仅限于在选定的人群中传达--通常,只有您才可以知道自己的银行余额。完整性是指限制更改信息的能力--其他人不能从您的银行帐户取钱。可用性是指在需要时提供信息的能力--您能够按时支付帐单。对于银行帐户的基本要求对于计算机安全同样重要。本指南的其他部分详细说明了确保所有这些要求得到满足的步骤。

身份验证的原则

身份验证是指验证实体身份(是用户、计算机还是程序)的过程。该过程确定实体是它所声称的身份,从而可以正确应用保密性、完整性和可用性三个原则。实现身份验证的方式可以分为三组。

第一组依赖于该实体具备的知识。该组中最简单的例子是密码。这是只有尝试进行身份验证的实体知道的一部分知识,它可以被身份验证方证实为正确。其他更复杂的系统包括质询/应答系统。它将询问一个问题,只有该实体知道其答案。这种身份验证方法的局限性是,如果某人获取了该实体所掌握的知识,即可冒充该实体而通过身份验证过程。众所周知,人们并不擅长记忆密码,因此他们选择的密码往往非常简单而容易被猜出(比如:姓名或生日),而且往往将密码写下来以防忘记。

第二组依赖于对象。该对象可以是某种形式的智能卡或密钥标志,它是唯一的,可由实体用来证明身份。这种身份验证方法的局限性是,如果对象失窃,则拥有该对象的人立即获得实体的身份。

第三组依赖于属于实体自然特征的唯一标识符。在大多数情况下,本组中的实体是人,而唯一的自然特征是该人身体的某个方面。这些身份验证方法包括生物遗传学访问控制(比如:视网膜扫描和指纹)。此外还包括某人如何完成任务,比如签名(其他人很难复制)。

有可能构建一个使用任意或全部这些方法的组合的身份验证过程。取决于使用这些方法的数量,这还可以称为单因子、双因子、三因子或多因子身份验证。包括的测试越多,您就可以越安全地验证实体的身份。没有准确的身份验证,就不可能控制授权。

授权的原则

当实体已经经过身份验证并且证明其身份符合身份验证器的要求,它就能够完成任务。允许实体访问资源的范围称为授权。拥有有限访问权限的实体将被允许执行选定部分的具体任务。这些任务的记录由授权方拥有。这个选定部分可能包括读、写或修改文件的权限;打印权限;或访问网络上的其他计算机的权限。没有经过适当的身份验证,授权是无用的,因此任何用户都将可以轻松地冒充具有更大权限的用户。然而,经过适当的身份验证,授权可以进一步限制用户访问受限资源的能力,从而提高系统及其数据的安全性。

网络环境中的身份验证和授权

使用网络极大增加了身份验证和授权过程的复杂性。除了各种身份验证方法中固有的一般弱点之外,网络的引入还带来了新的问题。这些问题包括:

很难在没有进行检测或干涉的情况下,在网络上传送身份验证和授权数据

提供远程客户端实体的标识

加密技术在网络身份验证系统中广泛用于加密数据。其加密方式使得要想通过计算解密而得以使用数据的方法是不可行的。然而,这些技术还不足以提供有效的网络身份验证系统。网络身份验证系统还需要解决易用性、单一登录、密钥创建和分发等相关问题。如本章中后面所介绍的 Kerberos 那样,这些问题的解决方案通常非常复杂。

目录服务和标识管理概述

您和您的组织需要信息以便开展活动。例如,当您希望通过电话与某人进行联系时,您必须首先通过某种办法获得他的电话号码,通常是通过查看电话簿。同样,当您的组织希望为员工提供访问其计算机系统的能力时,系统管理员必须能够在某处存储员工的凭据和授权详细信息,通常是在中央网络服务器上的用户数据库中。

电话簿和网络服务器用户数据库就是两个可以存储有关个人信息的地方。还有许多其他地方可供您或您的组织存储有关个人、组织或事物的信息。例如,电子邮件地址簿、个人数字助理 (PDA)、产品目录和人力资源数据库。

您最好把所有这些信息存储在一个地方。在一个地方存储数据使您可以:

避免重复的数据,从而无需在不同地点同时保存数据。

通过使用单一系统代替不同的数据管理系统和技术,简化数据的管理。

通过单点访问数据和实施一致的访问控制方法,提高数据安全性。

通过消除多种存储格式和系统,降低成本。

目录服务和标识管理标准旨在实现使用统一的目录服务,从而使您能够从上面列举的优点中获利。以下各小节介绍了实施统一目录服务的技术和标准。

对目录服务的需求

通过确定您的组织所拥有的不同电话簿、电子邮件地址簿和产品目录的数量,可以知道它使用的信息的广阔范围。除此之外,您的组织的计算机系统还存储着广泛的信息,包括帐户明细、电子邮件地址、计算机配置设置、网络信息以及您的计算机系统所提供服务的相关参考信息。组织已经从在基于计算机的系统中存储这些不同类型的信息之中获得了巨大利益。信息随后准备就绪,可以在应用程序中使用。例如,在计算机数据库中存储的电子邮件地址簿使得计算机用户可以很容易地搜索收件人的电子邮件地址并向该收件人发送电子邮件。可惜,即使对于如此广泛使用的应用程序(比如:电子邮件),存储电子邮件地址的许多不同方法已经被开发出来,但彼此之间互不兼容。

该解决方案看上去似乎是要创建标准的目录服务,以便存储电子邮件地址。虽然这是有用的,而且也确实存在面向该特殊应用程序的标准,但是如果标准只存储电子邮件地址而不允许将其他个人信息合并在相同地方,则会导致数据的重复,从而增加额外的管理开销。

要想实现单一、统一数据存储的利益,目录服务必须能够用于范围不受限制的数据。目录服务还应是跨越所有操作系统和应用程序的标准。

目录服务已经发展到允许以可访问的方式存储广泛的数据类型。现代目录服务至少为您提供以下优势:

将对象(人、组织和事物)组织到层次结构中的方法。层次结构允许将具有共同特性的对象编组,从而简化对象的管理,并提高您在目录中查找对象的能力。

描述能在目录中存储哪些事物的常用方法。这通常称为目录架构,是可以在目录中存储的信息的模型。架构定义每个对象拥有哪些特征,包括它可以存储的信息;如何在目录中查找它;以及有关它如何行动的规定。

允许将精确的访问控制应用于对象的安全模型。

具有恢复能力的分布式服务。目录必须具有恢复能力,能够处理错误和繁重的负载。在多台服务器上分布服务有助于改善这一点。分布式服务还允许独立管理目录的各部分。

本指南将在后面更详细地解释所有这些概念。

标识管理

目录服务提供了标识管理的基础。标识管理涉及与个人有关的信息。标识管理包括计算机用户帐户的管理、用户帐户的详细联系信息、门户系统用户帐户、应用程序用户帐户,电子邮件系统用户地址和帐户等等。

在一个典型组织中,该信息以不同方式存储在广大不同且往往不兼容的系统中。很难保证与个人有关的信息在所有系统上同步;例如,当个人被调动到不同部门时,可能需要修改大量目录。处理大型组织中的这种修改的管理开销可能非常巨大。在某些环境中,确保在多个系统上保持一致性也是非常困难的,特别是在与具体个人的安全和访问控制相关的情况下。

标识管理解决了这些问题。将个人信息存储在一个地方,并以一致的方法进行管理。本章后面讨论的 LDAP 标准定义了一种目录服务,它可用作标识管理解决方案(比如本指南所介绍的解决方案)的基础。

 

基于标准的安全和目录服务

以下章节涉及 Kerberos 和轻型目录访问协议的开发和使用,它们分别被用于安全和目录服务。这两个标准在一起使用,构成了本指南中所述的异类安全和目录解决方案的基础。

Kerberos 协议

本节介绍作为标准出现的 Kerberos 协议,以及作为网络身份验证服务的用途。Kerberos 设计用于在客户端/服务器环境中提供强大的身份验证。该协议的基础是共享密钥加密系统,允许客户端向服务器验证其标识。

Kerberos 的发展历史

1983 年,Massachusetts Institute of Technology (MIT) 着手开展一项大规模的网络项目。Athena 项目与当时的网络系统的标准实施不同,它充分利用了客户端/服务器模型。早期的网络实施都使用时间共享模型,其中所有终端都通过串行电缆直接连接到中央计算机。图 1.1 提供了该模型的示意图。

Figure 1.1 Time-sharing model

图 1.1 时间共享模型

该模型拥有简单的用户管理结构:有一台计算机,所有帐户都在其上进行控制。它不考虑通信安全方式,因为终端只与时间共享计算机连接,因此偷听将需要在串行线路上设置物理分接头。只要系统管理员能够控制对串行线路的访问,并确保它们不会受到危害,就能保证通信的安全。

在更新的客户端/服务器模型中,用户可以访问其办公桌上的计算机。该计算机连接到网络中的所有其他计算机,并提供对共享资源的访问能力。图 1.2 提供了该模型的示意图。

Figure 1.2 Client/server model

图 1.2 客户端/服务器模型

模型的变化带来一个重大问题:没有直接串行连接提供的安全性,客户端计算机不再受信任。现有的安全过程和应用程序不足以适用于新模型,因为它们不是设计用于此不受信任的环境。

为了克服这个问题,开发人员开发了 Kerberos。该协议基于下文中所说明的安全身份验证系统:“使用加密在大型计算机网络中进行身份验证 (Using Encryption for Authentication in Large Networks of Computers)”(作者:Needham 和 Schroder,1978 年)。Kerberos 版本 1、2 和 3 过去只被用于内部开发和测试。第一个不属于 Athena 项目的 Kerberos 版本是 Kerberos 版本 4。Kerberos 4 在下文中进行详细介绍:Kerberos 身份验证和授权系统”(Miller、Neuman、Schiller 和 Salzer,1988 年)。该文档可从 MIT Kerberos 网站上下载:http://web.mit.edu/kerberos/www/。Kerberos 5 是 Kerberos 的最新版本。本章中讨论了版本 4 和版本 5。

Kerberos 4 概述

Kerberos 利用加密技术来保护其网络消息。Kerberos 网络消息可使用加密算法进行加解密。该算法将 Kerberos 数据转变成极难解密成原始形式的格式。加密密钥用于加密数据和解密数据。Kerberos 还使用称为散列的数学技术以确保未经加密的任何数据的完整性。

Kerberos 4 包括许多用户必须知道的专门术语和概念:

主体 (Principal).Kerberos 中的所有实体(包括用户、计算机和服务)都被称为主体。主体名称是独一无二的,能够保证唯一性。存在一个面向主体的层次命名结构。

领域。主体是领域的成员之一。按照惯例,领域名是转换为大写字母的 DNS 名,因此例如 example.com 域将变成 EXAMPLE.COM 领域。虽然大写字母的领域不是必须的,使用不同的大小写字符能够简化区分域名和领域。

票证.票证是 Kerberos 身份验证的基本单位。它是严谨构造的、在计算机之间传递的消息,其中包括身份验证信息。本节后面将更深入地说明票证及其结构。

密钥分发中心。密钥分发中心 (KDC) 包含三个组件:

主体(包括用户、计算机和服务)数据库

身份验证服务器,授权票证的票证 (TGT)

授权服务的票证 (TGS),颁发授权客户端访问特定服务的服务票证。

本节后面将详细说明身份验证服务器和 TGS 的功能。每个领域需要至少一个 KDC 以便运行。Kerberos 身份验证依赖于使用票证。票证在客户端、KDC 和所需的服务器之间传递,以确认身份验证和授权。

图 1.3 显示了在使用 Kerberos 协议进行身份验证期间发生的交换:

Figure 1.3 Kerberos authentication server exchange

图 1.3 Kerberos 身份验证服务器交换

最初,某个客户端联系 KDC 的身份验证服务器组件。客户端向身份验证服务器发送一个请求,其中包括以下内容:

主体名称

时间戳

客户端所请求的票证的生命周期

授权票证的服务 (TGS) 的名称

身份验证服务器随后产生一个会话密钥,并生成两个副本:一个面向客户端,另一个面向 TGS。

身份验证服务器随后向客户端发回包含以下内容的授权票证的票证 (TGT):

会话密钥的副本

客户端身份

时间戳

客户端 Internet 协议 (IP) 地址的详细信息

票证生命周期的详细信息

TGT 被返回到客户端,它已经使用 TGS 的密钥进行了加密。在将加密的 TGT 返回客户端的同时,身份验证服务器还返回:

会话密钥的副本

TGS 主体名称

票据的生命周期

对客户端的整个响应在返回客户端之前用客户端密钥进行加密。

Figure 1.4 Formats of the exchanged tickets

图 1.4 交换票证的格式

客户端接收到加密回复中的信息,因为回复是使用客户端的密钥进行加密的,所以客户端能够解密该信息。这为客户端提供了其会话密钥以及仍然由 TGS 密钥加密的 TGT。

客户端现在将 TGT 转发给授权票证的服务器,以及对要访问的服务的请求和使用从身份验证服务器获得的会话密钥加密的时间戳。该时间戳的作用是防止回复攻击。当黑客捕捉到来自客户端的服务请求并在日后重新发送时就会发生这种攻击。

注意 第 2 章“UNIX 和 Windows 环境中的身份验证和授权”详细解释了对 Kerberos 协议的攻击。

TGS 处理该请求并进行响应,提供以下内容:

一组新的会话密钥

所请求服务的主体名称

票证的生命周期

使用服务密钥加密的服务票证

服务票证类似于 TGT;它包含以下内容:

新的会话密钥

客户端的主体名称

票证生命周期

时间戳

客户端的 IP 地址

随后,所有这些都使用客户端密钥进行加密并被返回。

取决于被请求的服务和服务器,身份验证过程的最后阶段有所不同,因为每个应用程序都定义了自己的服务票证交换方法。

一个服务示例就是网络文件系统 (NFS)。NFS 允许主机访问(“安装”)远程服务器上保存的目录。假定 NFS 服务器已经启用了 Kerberos 身份验证,访问 Kerberos 保护的 NFS 服务的过程如下所示:

1.

在客户端计算机上,用户使用 kinit 命令获取面向根用户的 Kerberos 票证(安装文件系统通常需要根权限)。

2.

用户安装远程文件系统,而客户端计算机上的 Kerberos 守护程序代表客户端从密钥分发中心上的授权票证的服务 (Ticket Granting Service) 自动获取服务票证。

3.

客户端计算机现在拥有两个有效的票证,一个面向根,另一个面向 NFS 服务。客户端计算机使用所获得的服务票证来验证 NFS 服务器的身份,而客户端计算机安装目录。

4.

当用户结束使用该目录时,使用 kdestroy 命令来反安装该目录并销毁票证,以防止对其进行重复使用。

Kerberos 5

Kerberos 5 是 Kerberos 4 的扩展,包含以前版本的所有功能,此外还包括许多增强功能:

支持凭据转发。当客户端连接到应用程序服务器时,它将转发其 TGT 副本,从而用户可以透明地从应用程序服务器对其他 Kerberos 服务进行身份验证。在 Kerberos 4 下,用户必须请求新的 TGT 以便从应用程序服务器进行身份验证。

多种加密类型。Kerberos 4 被限制为使用数据加密标准 (DES) 加密机制。Kerberos 5 允许实施不同的加密类型以增强安全性。

可更新的票证。Kerberos 4 下的票证生命周期是有限的,当到期时必须获取新的票证。在 Kerberos 5 下,票证可以通过在到期之前重新提交给 KDC 而获得更新。这个过程可以一直重复,直到更新生命周期也到期为止。

预身份验证。在 Kerberos 4 中,KDC 通过提供票证来响应任何请求。该票证使用请求主体的密钥进行加密。这使它容易受到尝试确定主体的密钥的攻击。恶意用户能够伪造请求,然后尝试破解所返回的加密密钥。Kerberos 5 通过引入预身份验证改善了这种情况;这包括在 KDC 颁发票证之前证明用户标识的主体。这可以通过发送一个使用用户密钥进行加密的时间戳来完成。

Kerberos 5 的分发包括一个称为 krb524 的实用程序,用于在 Kerberos 5 和 4 之间转换票证,从而使 Kerberos 5 票证可被用于对 Kerberos 4 服务进行身份验证。krb524 实用程序作为守护程序(UNIX 系统服务)来运行,接受来自客户端的请求,解密 Kerberos 5 服务密钥,使用来自初始票证的会话密钥创建新的 Kerberos 4 服务密钥。

警告 因为 Kerberos 4 内在的安全问题,Microsoft 建议不要使用 krb524 实用程序。

Kerberos 5 是面向 Windows Server 2003 中的服务和应用程序的默认网络身份验证方法。

相关的 RFC

下面的注释请求 (RFC) 说明了 Kerberos 协议以及通过通用安全服务应用程序编程接口 (GSS-API) 使用 Kerberos 的方法:

RFC 1510,“Kerberos 网络身份验证服务(版本 5)”

RFC 1964,“Kerberos 版本 5 GSS-API 机制”

Kerberos 分发

有大量 Kerberos 协议分发可用,包括商用和开放源代码的产品。大多数主要的 UNIX 分发都包含作为标准安装组成部分的 Kerberos 实施。还有两个开放源代码的 Kerberos 5 分发:MIT 和 Heimdal。MIT 的 Kerberos 5 开放源代码分发和 Kerberos 5 协议的 Windows Server 2003 实施将在本指南中讨论。本指南未涉及 Heimdal,但是用户可以从以下网址获得其相关信息:http://www.pdc.kth.se/heimdal/

MIT 是最初开发 Kerberos 的地方,MIT 仍然维护和开发其开放源代码版本。在撰写本文之时,MIT Kerberos 1.3.1 版是最新版本。MIT Kerberos 1.3.1 很很容易就能在所有平台上编译,并且能够与所有其他实施配合工作。虽然可以从其他来源下载预编译版本,但是建议您下载并验证源文件的完整性,以确保安全。MIT Kerberos 可从 http://web.mit.edu/kerberos/www/ 免费下载。

注意 某些国家或地区在使用加密技术上有限制。建议您在实施 Kerberos 解决方案之前,确定 Kerberos 在您所在国家或地区的加密技术限制下是可接受的。

轻型目录访问协议

本节讨论作为标准出现的 LDAP 及其在身份验证和作为目录服务方面的用途。OSI 目录服务 X.500 的发展过程以及 LDAP 作为访问 X.500 目录的简单方法的创建过程已经做过说明。本节包括对 LDAP 协议和 LDAP 目录服务的简介。

LDAP 的发展历史

LDAP 是在国际电报电话咨询委员会 (CCITT) 和国际标准化组织 (ISO) 联合开发的许多标准的基础上建立的。CCITT 现在称为国际电信联盟 (ITU)。ITU 和 ISO 的目标是定义一个通用的目录标准,尽可能包括最广泛的目录服务。所开发的标准将构成面向 CCITT 和 ITU 开发的开放系统互连 (OSI) 网络模型的目录服务。

当开发该目录标准时,标准委员会中的 ITU 和 ISO 成员考虑问题的优先顺序不同。大部分 ITU 成员是全国性的电话运营商,他们希望获得将提供电话号码和电子邮件地址目录服务的标准。相反,ISO 成员最感兴趣的是提供面向 OSI 应用程序的命名服务。最终的标准--X.500--是一个既复杂又全面的标准,很难实施,而且成本高昂,需要运行复杂的 OSI 网络协议。

X.500 的出现

该标准旨在拥有一个分布全球的目录,并且带有标准访问接口。X.500 目录标准极其复杂。作为其设计操作平台的 OSI 网络协议也比现在通常使用的传输控制协议/Internet 协议 (TCP/IP) 套件复杂得多。

X.500 标准最初由 CCITT 于 1990 年作为《X.500 蓝皮书建议》发布并由 ISO 于 1991 年作为《ISO/IEC 9594:目录》发布。从那时起,X.500 已经得到发展和增强,并在 1993 年和 1997 年两次更新。

X.500 拥有四个核心组件模块:

信息模块

信息模块定义了目录存储信息的方式。X.500 在“属性”中存储信息,它是“对象类”的成员。每个属性都有语法定义、搜索规则和排序规则。

命名模型

命名模型定义引用每个条目的方式。在 LDAP 目录中,条目被组织在一个称为“目录信息树 (DIT)”的层次树中。

功能模型

功能模型是目录客户端与目录进行通信的方法。在 X.500 中,称为“目录用户代理 (DUA)”的客户端使用称为“目录访问协议 (DAP)”的复杂协议,与称为“目录系统代理 (DSA)”的目录服务器进行通信。DAP 在 OSI 网络协议堆栈上运行。

安全模型

安全模型提供了根据目录进行身份验证的方法,以及授权客户端访问目录的方法。

前面列表中的大部分特性已经被转移给 LDAP。下面的小节和第 3 章“作为 UNIX 和 Windows 环境中的标识存储区的 Active Directory 和 LDAP”详细讨论了它们的实施以及与 LDAP 的相关性。

到 LDAP 的过渡

X.500 接受和实施的主要问题是其过于复杂,并且实施和管理相关成本非常高。为了提高 X.500 目录的可接受性,Internet 工程任务组 (IETF) 决定定义新的访问协议。该协议更简单,不依赖于 OSI 堆栈,而使用 TCP/IP 堆栈。这产生了两个新协议:目录辅助服务(Directory Assistance Service,DAS)和有效实施 X.500 的目录接口(Directory Interface to X.500 Implemented Efficiently,DIXIE)。

DAS 和 DIXIE 的问题是它们是针对与 X.500 的某一具体实施配合工作而设计的。LDAP 由 IETF 开发,用于消除这一限制。LDAP 使用 TCP/IP 作为其网络传输协议,与目录实施无关,并使用 DAP 中的一小部分操作。

LDAP 旨在作为访问 X.500 目录的轻型方法。然而,随着时间的推移,情况越来越明显,对 X.500 目录服务器的访问大部分是通过 LDAP 协议进行的。当这一情况变得清晰时,目录服务器被设计和实施成只能通过 LDAP 访问。这些服务器不再有 X.500 目录服务器中的复杂性,其实施和管理费用也更低。其副作用是,LDAP 服务器还拥有比 X.500 目录服务器更出色的性能。

LDAP 的当前版本是 LDAPv3。LDAPv1 没有作为标准发布。LDAPv2 于 1995 年 3 月公布,并在三个 RFC 中进行了定义:RFC 1777、RFC 1778 和 RFC 1779。LDAPv2 在 RFC 3494 中停止作为标准使用。

IETF 中的目录访问、搜索和索引 (ASID) 工作组开发了 LDAPv3。LDAPv3 对 LDAPv2 的增强包括:

使用面向所有文本字符串属性的 UTF-8,以便支持扩展的字符集。

目录保留以便自己使用的可操作属性(例如,当其他属性被修改时记录日期和时间)。

检索,允许服务器将客户端导向可能拥有该客户端所请求的信息的其他服务器。当客户端进行的操作不能得到本地服务,并且 LDAP 服务器知道其他 LDAP 服务器可以处理此操作时,LDAP 服务器可以将索引返回到 LDAP 客户端。

目录中发布的架构,允许客户端发现服务器所支持的对象类和属性。这是通过根对象 (rootDSE) 上的对象提供,供客户端使用。

使用了 X.500 (93) 架构的主要部分。

注意 X.500 (93) 是指 1993 年发布的 X.500 版本。在 OSI 社区中使用这种方法来指标准的版本。

扩展搜索操作,允许对结果分页和分类,以及客户端定义的搜索和分类控制。

通过简单身份验证和安全层 (SASL) 机制实现的更强的安全性。

现在支持扩展操作和控制,使 LDAPv3 能够在不改变标准协议的情况下进行扩展。

LDAPv3 可向后兼容 LDAPv2。LDAPv3 服务器的一个要求是 LDAPv2 客户端要能够与之连接。

LDAPv3 作为操作系统、网络操作系统、目录服务、应用程序(比如:电子邮件服务器)和客户端应用程序的组成部分而得到广泛实施。LDAPv3 是 Windows Server 2003 Active Directory 的一个核心组件。Active Directory 中的 LDAPv3 实施与基于 Kerberos 和 Microsoft Windows 操作系统的符合标准的安全系统完全集成。本章中的“Microsoft Active Directory”小节和第 3 章“作为 UNIX 和 Windows 环境中的标识存储区的 Active Directory 和 LDAP”详细介绍了 Active Directory。

LDAP 目录服务概述

LDAP 是目录访问协议的一个标准。它定义与目录服务进行通信所使用的操作,如何找到目录中的实体,如何描述实体属性,以及许多安全特性。这些安全特性可用于对目录进行身份验证,控制对目录中的实体的访问。

LDAP 标准中没有定义在目录服务器上存储信息的方式。为实施 LDAP 服务器,使用了许多不同的技术。这些技术包括简单的平面文件、索引文件和相关数据库。无论使用什么技术来实施目录,从 LDAP 客户端对目录的所有访问都使用相同的标准协议:LDAP。为此,尽管存在不同的内容结构,这些目录都被称为 LDAP 目录服务器。

下面的关键方面描述了 LDAP 协议的特征:

该协议直接通过 TCP 和 UDP 传送。TCP 用于面向连接的传输(已经确认接收到数据),而 UDP 用于无连接的传输(未确认是否发送或接收数据)。

大多数协议数据元素可以被编码成二进制字符串(例如,可分辨名称)。

可以将到其他服务器的索引返回客户端。

SASL 机制可以与 LDAP 共同使用,以提供相关的安全服务。

通过使用国际标准化组织 (ISO) 10646 字符集,可以使属性值和可分辨名称适用于在国际上使用。

该协议可以扩展,以支持新的操作,可以使用控制能力来扩展现有操作。

架构通过供客户端使用的根对象上的属性来发布。

LDAP 中定义的组件模型与 X.500 中定义的组件模型相同,它们在以下小节内详细说明。

信息模型

目录必须有一种存储条目相关信息的方法。条目是目录的基本单位。信息模型提供描述条目属性所必需的数据结构和数据类型。每个属性都有一个名称以及单个值或多个值。这些值必须符合为该特殊属性定义的特定语法。属性语法的示例包括 Unicode 字符串、二进制和整数。除此之外,目录还要求可能通过其属性值来搜索特定条目。为了改善这一点,可以定义每个属性的匹配规则。这些规则指定:

搜索将如何匹配属性中包含的值。

属性如何排序的定义。

与条目相关的属性和特征在条目的对象类中定义。架构中拥有对象类和属性的定义。LDAP 目录服务器中使用了三类对象类定义:

结构对象类

结构对象类表示实际的对象(比如:人)。一个实体必须属于一个且只属于一个结构对象类。

辅助对象类

辅助对象类用于扩展结构对象类。它本身没有什么任何意义。

抽象对象类

抽象对象类只用作派生类的祖先。

命名模型

命名模型定义提及每个条目的方式。在 LDAP 目录中,条目被组织在称为目录信息树 (DIT) 的层次树中。树中的每个节点都是一个条目,该条目可能存储信息,也可能是其他条目的容器。有两种方法提及树中的条目:使用其相对可分辨名称 (RDN) 或其可分辨名称 (DN)。RDN 在目录中是唯一的,而 DN 是全局唯一的。

属性的 RDN 可能是对象的公用名 (cn),如此处所示:

cn="Michael Allen"

当只使用一个属性不能确保唯一性时,还可以由多个属性值构成 RDN;例如:

cn="Michael Allen"+ou="Engineering"

本例中的加号 (+) 表明该 RDN 是多值的。当组织中有两名员工都叫“Michael Allen”时,多值 RDN 的实用性显而易见。如果他们属于两个不同的部门,可以使用由部门唯一限定的 RDN,如本例中“组织单位 (ou)”属性所定义。

Michael Allen 的条目的 DN 可能是:

cn="Michael Allen",dc="example",dc="com"

在这种情况下,对象不只在本地目录中,而且在全局中被唯一定义。“域组件 (dc)”属性值用于唯一定义目录服务器的 DNS 域名。

在 LDAP 中,目录的命名上下文能够以地理或域名格式来定义。地理格式是 X.500 中定位目录的主要方法,LDAP 服务器中也仍然使用该方法。然而,通常使用 DLAP 服务器的域名作为其命名上下文,因为域名在 Internet 上是全局唯一的。

在图 1.5 中,目录服务器的命名上下文是域名 example.com,或 DN dc=example,dc=com。

Figure 1.5 The Directory Information Tree (DIT)

图 1.5 目录信息树 (DIT)

在图 1.5 中,DN 使用 ou="Users" 而不是 cn="Users"。在这种情况中,cn 和 ou 之所以能够互换是因为组织单位的公用名与组织单位的名称是相同的。

功能模型

功能模型是目录客户端用来与目录进行通信的方法。这就是 LDAP 协议。LDAP 提供以下操作:

询问--搜索目录

修改--更新、添加或删除目录中的条目

身份验证和控制--对目录进行身份验证(绑定操作)

安全模型

安全模型为根据目录进行身份验证以及授权客户端控制对目录的访问提供了方法。安全模型包括两个组件:

使用 LDAP 的身份验证绑定

对目录中的对象的访问控制

对 LDAP 的身份验证将在本节后面的“使用 LDAP 进行网络身份验证”部分中介绍。当通过身份验证后,客户端只能像目录的访问控制列表(Access Control List,ACL)中定义的那样使用 LDAP 目录。ACL 在 LDAP 目录中的实施是依赖于实施的。

LDAP 交换格式

LDAP 目录可以使用标准注释来交换数据和架构定义。该注释称为 LDAP 交换格式 (LDIF)。LDIF 拥有一个简单的文本文件格式,其中包括:

使用空行分隔,表示单一实体的条目

以 # 字符开头的注释

向属性的值的分配

教授如何使用 LDIF 剖析程序解释条目的指导

下例中提供了显示个人实体定义的示例 LDIF 文件。该 LDIF 文件可用于在 LDAP 目录中创建一个实体。

# This is a comment
dn:cn=Michael Allen,cn=Users,dc=example,dc=com
objectClass:person
cn:Michael Allen
sn:Reid
telephoneNumber:555-0100

最后一行是空行。该文件使用 DN 定义实体:

cn=Michael Allen,cn=Users,dc=example,dc=com

该条目是对象类 person 的成员。对象类 person 包含许多属性,包括人员的公用名 (cn)、姓氏 (sn) 和电话号码 (telephoneNumber)。

LDIF 还可以用于定义 LDAP 目录的架构。要想实现这一切,可以使用 LDIF 文件中称为 LDIF 指令 的特定条目来创建对象类及其属性。对于每个属性,LDIF 都有指令来支持定义语法、搜索匹配规则和排序规则。

LDAP 对象标识符

LDAP 使用对象标识符 (OID) 来唯一引用属性、语法、对象类和扩展控件。OID 是一系列句点分隔的整数(或字符串标识符),并由 Internet 编号分配机构 (IANA) 分配。LDAP OID 与许多网络管理员所熟悉的简单网络管理协议 (SNMP) 管理信息库 (MIB) 所用的 OID 是一样的。

OID 必须是唯一的;如果您需要为自己的组织建立自定义架构,应从 IANA 获取专用企业编号。当有了专用企业编号之后,就可以创建自己的架构,而不会与现有的任何标准或专用架构冲突。

注意 有关 OID 的详细信息,请访问 IANA 网站:http://www.iana.org/numbers.html。您应在“E”下查找 企业编号 条目。

相关的 RFC

以下 RFC 描述 LDAP 协议、LDAP 内标准属性的表示法,以及 LDAP 和 X500 之间的关系。如果需要了解特定标准的细节,您只需阅读相应的 RFC 即可。

RFC 1777,“轻型目录访问协议”

RFC 1778,“标准属性语法的字符串表示法”

RFC 1779,“可分辨名称的字符串表示法”

RFC 2247,“在 LDAP/X.500 可分辨名称中使用域”

RFC 2251,“轻量级目录访问协议 (v3)”

RFC 2252,“属性语法定义”

RFC 2253,“可分辨名称的 UTF-8 字符串表示法”

RFC 2254,“LDAP 搜索筛选器的字符串表示法”

RFC 2255,“The LDAP URL 格式”

RFC 2256,“面向与 LDAPv3 共同使用的 X.500(96) 用户架构概述”

使用 LDAP 进行网络身份验证

LDAP 身份验证涉及绑定到 LDAP 服务器上的实体。根据接受还是拒绝该实体的凭据来确定绑定操作的成败。如果绑定成功,则实体通过身份验证;如果失败,则实体没有通过身份验证。

要想使用 LDAP 对 UNIX 和 Linux 登录或服务进行身份验证,需要与 LDAP 可插入式身份验证模块 (PAM) 结合使用。PAM 及其在 LDAP 身份验证中的用途在第 2 章“在 UNIX 和 Windows 环境中的身份验证和授权”中进行了详细讨论。

与设计作为身份验证机制的 Kerberos 不同,LDAP 身份验证是为保护目录事务专门设计的。将 LDAP 身份验证用于除 LDAP 目录访问之外的其他目的,可能导致性能问题。这是因为 LDAP 目录服务不是为处理大量身份验证请求而设计的,而非常适用于进行目录事务处理。

Microsoft Active Directory

Active Directory 是网络体系结构的一个重要且不可分割的部分。该网络体系结构是在 Microsoft® Windows NT® 4.0 操作系统的域体系结构的基础上改进形成,可提供为分布式网络环境设计的目录服务。其最先由 Windows 2000 引入,是 Windows Server 2003 的一个完整组成部分。Active Directory 使组织能够高效地共享和管理有关网络资源和用户的信息。此外,Active Directory 还充当保障网络安全的中心,使操作系统准备好验证用户的标识并控制他或她对网络资源的访问。同样重要的是,Active Directory 还充当把系统结合在一起和整合管理任务的集成点。

Active Directory 基于 Kerberos 5 和 LDAPv3 协议之上,可兼容所有平台上的 Kerberos 5 客户端和 LDAPv3 客户端。这使得 Windows Active Directory 服务器能够在异类网络中提供安全和目录服务。Active Directory 及其与 Kerberos 5 协议的关系在第 2 章“在 UNIX 和 Windows 环境中的身份验证和授权”中详细说明;其与 LDAPv3 协议的关系在第 3 章“作为 UNIX 和 Windows 环境中的标识存储区的 Active Directory 和 LDAP”中详细说明。

这些能力综合起来,使组织能够将标准化的业务规则应用于分布式应用程序和网络资源,而无需管理员维护各样各样的专用目录。图 1.6 显示了 Active Directory 的概览。

Figure 1.6 Overview of Microsoft?Active?Directory

图 1.6 Microsoft Active Directory 概览
查看大图

Active Directory 提供面向基于 Windows 的用户帐户、客户端、服务器和应用程序的单一管理点。它还帮助组织对不使用 Windows 的系统、基于 Windows 的应用程序和兼容 Windows 的设备进行整合,从而合并目录并简化整个网络操作系统的管理。公司还可以使用 Active Directory 来把系统安全地扩展到 Internet。从而,Active Directory 通过使 Windows 网络操作系统更可管理、安全和可互操作,能够增加组织现有网络投资的价值,降低总计算成本。

Vintela 身份验证服务

与 Active Directory 一样,UNIX 和 Linux 系统通常也包括 Kerberos 和 LDAP 协议的实施。虽然 Kerberos 和 LDAP 协议的这些实施能够与 Active Directory 互操作,但是它们在实施时通常没有考虑到 Microsoft 在 Active Directory 中集成两种标准的方式。在某种程度上,本指南中后面使用的 PADL 模块确实能够将 UNIX 和 Linux Kerberos 和 LDAP 与 Active Directory 相集成。

Vintela 身份验证服务 (VAS) 产品在 UNIX 和 Linux 系统上实施 Kerberos 和 LDAP 功能,可以与 Active Directory 完全集成。VAS 是一种商用产品,在第 11 章“Vintela 身份验证服务”中详细讨论。使用 VAS 能够获得以下利益:

通过 Active Directory 用户和计算机 MMC 管理单元来管理 UNIX 和 Linux 用户和计算机。

使用 Kerberos 来保护 LDAP 通信。

调试性能,可以有效地与 Active Directory 配合工作。

VAS 产品允许 UNIX 和 Linux 客户端以等同于 Windows 客户端的方式,在 Active Directory 域中运行。

总结

在本章中,您已经了解到如何在保密性、完整性和可用性等方面定义计算机安全;身份验证和授权如何控制对您的数据的访问,从而只允许拥有正确凭据的实体通过安全控制。

网络计算机的出现已经在身份验证和授权方面带来了新的挑战。在这一新环境下,身份验证和授权使用的旧工具不再安全。采用复杂的加密和交换方法的新工具应运而生。作为开放标准,Kerberos 很快就得到广泛使用,现在已经扩展到所有平台之上,从 Windows 2000 开始成为 Microsoft Windows 产品的默认身份验证方法。

这个新的网络基础结构还带来了跨越广泛的计算机提供数据的挑战。目录服务解决了这一挑战,提供了可从网络各处访问的中央数据存储库。现在最流行的目录服务 LDAP 是从极其复杂的 X.500 标准发展而来,构成了 Microsoft Active Directory 服务的基础。

后面的章节将展开说明所有这些协议和概念,以向您展示如何使用这些技术来构建异类 UNIX 和 Windows 安全和目录服务。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值