原文链接
英语水平有限,如有错误或者不恰当的地方,欢迎指正
活动目录通过域和域林间的信任关系为不同的域个域林的通信提供安全保障。在通过信任关系进行认证之前,Windows必须首先确定接受请求的域是否和发起请求的账户所在的域之间拥有信任关系。要想进行这个判断,Windows安全系统需要在请求和被请求的域的域控制器中计算出一个信任路径。
活动目录所提供的的访问控制机制和Windows分布式安全模型共同为域和域林信任的操作构建了一个最佳的环境。为了让这些信任可以正常工作,域中的每一个工作站和服务器都必须拥有一个直接到达域控制器的信任路径。信任路径是Net Logon
服务通过一个已经认证过的连接到域控制器的远程过程调用(RPC)来实现的。另外,一个安全的隧道会通过内部域信任关系拓展到其他的活动目录域 。这个所谓的安全隧道是用来获取和验证安全相关信息,包括用户和组的SID
这一章节会描述信任机制的内部工作原理,讨论将会被使用到的不同的信任关系,并提供一个详细的引用列表、涉及到信任的登录过程,还会列出所有的信任机制会用到的网络端口。
集成在Windows Server 2003和活动目录的应用使用操作系统的组件来建立和维护信任。大量的组件帮助信任架构为活动目录提供一个高效的通信设施。这些组件包括认证协议,Net Logon服务,LSA和存储在活动目录中的信任域对象(TDO–>Trusted Domain Objects)。下面这张图中展示了这些信任关系组件:
NTLM认证协议依赖于域控制器上的Net Logon服务来进行用户身份认证和认证信息的获取。这个协议专门用于为不使用Kerberos进行认证的用户提供认证服务。NTLM使用信任来在不同的域之间传递认证请求。
Kerberos V5
认证协议依也赖于域控制器上的Net Logon服务进行用户的认证和认证信息的获取。Kerberos协议连接KDC(Key Distribution Center)和活动目录账户存储来获取session tickets
。Kerberos协议也使用信任来使用cross-realm(跨领域(kerberos相关术语))ticket-granting 服务(TGS)并通过安全隧道验证Privilege Attribute Certificates(PACs)。Kerberos协议只在非Windows操作系统的Kerberos领域中进行cross-realm认证,并且这种认证不需要于Net Logon服务进行交互
Net Logon服务为计算机和域控制器之间维护一个安全隧道。它也被用在下面这些信任相关的处理过程:
LSA是一个受保护的子系统,它维护所有本地安全相关的信息,并提供各种用于转换names和identifiers对应关系的服务,LSA的用户模式和内核模式均提供对象验证。用户特权检查和审计信息生成的服务。LSA负责检查所有由受信任域和非受信任域的服务提供的session tickets的有效性
管理员可以使用活动目录域和信任关系,Netdom和Nltest来查看、创建、移除、更改信任关系。活动目录域和信任关系指的是Microsoft Management Console (MMC),MMC是用于管理域信任、域和域林功能级别以及用户主体名后缀的。Netdom和Nltest命令行工具用于查找、显示、创建和管理信任关系。这些工具直接与域控制器上的LSA认证机构进行通信
活动目录服务存储网络上的对象的信息并提供给网络上的用户和管理员进行使用。信任关系可以被用来拓展到其他的活动目录域和域林
一个组织中的每一个互相信任的域和域林都会被一个存储在其对应的域中的TDO代表
包含在TDO中的内容会根据该TDO是被域信任关系创建的还是域林信任关系创建的而变化。当一个域信任关系被创建时,一些属性诸如DNS域名、域SID、信任关系类型、信任关系传递性和windows对等域名都会保存在TDO中。林信任关系TDO存储额外的属性来认证其他林中的信任命名空间。这些属性包括域树名、用户主体名称(UPN)后缀、服务主体名称(SPN)后缀以及安全ID(SID)命名空间。
因为信任关系被活动目录以TDO的形式存储起来,所有windows server 2003域林中的域都拥有该域林内信任关系相关的信息,与NT4.0域之间的信任关系不会以TDO的形式被存储在活动目录中
一个信任关系中的两个域都会共享一个密码,该密码存储在TDO对象。最为该账号维护的一部分,每30天,信任域控制器会更改一次密码。因为所有的双向信任关系其实都是两个单向信任关系组成的,所以这个密码更改会发生两次。在一个信任关系中,有信任的一方,还有一个被信任方。在受信任方,所有的可写域控制器都会参与TDO account的维护,在信任方,PDC模拟器会进行密码额更改,要完成该过程,域控制器会执行以下处理:
经过以上过程之后,双边信任关系密码就更改完成了。
信任关系的限制主要来源于TDO的数量、信任路径的长度以及客户端发现可用信任关系的能力
TDO是域关系密切,随着TDO数量的上升,这些TDO连接的处理性能就会降低。测试表明,当一个组织的TDO总量超过2400时,完成TDO相关的操作(比如跨域认证)所消耗的时间会显著上升。当然也只有少数比较大的组织才会拥有那么多的TDO,且在windows server 2003中没有对信任关系数量的绝对限制。
在windows server 2003域中,kerberos最多可以通过10个信任关系链路来在其他域中查找到请求的资源的位置。如果不同域之间的信任路径超过了这个值,那么访问将会失败。可以通过建立到目标域的外部信任来解决信任关系路径过长的问题。
当一个客户端发起信任路径搜索时,搜索范围被限制在直接建立了信任关系的域以及和域林内具有传递性的域(就是说客户端所在域和这些域本来是没有建立信任关系的,但是和一个域建立了信任关系,但是这个域又和域林内的其他域有信任关系,这样信任关系就会传递到客户端所在的域)。比如,**一个子域不能使用其父域与其他域林中的域的外部信任关系。**这是因为一个完整的信任路径必须在客户端可以使用该信任路径查找到请求的资源所在的域之前建立完成(这是当然的)。windows server 2003不支持盲引用;如果一个客户端不能识别一个信任路径,那么它将不会尝试寻求对另一个域中资源的访问权。子域无法识别其域林外的信任机构的外部信任关系或者领域信任关系,因为用于代表这些信任关系的TDO保存在共享这些信任关系的域内,而不是全局编录服务器。
信任关系之间的安全通信流决定了信任关系的弹性(不太明白这个弹性表示啥意思?):创建或者配置信任关系的方式决定了域林内的通信或者跨域林的通信能拓展多远。信任关系之间的通信流取决于信任方向(单向还是双向)以及信任关系的传递性(传递性还是非传递性)
信任关系的建立旨在完成资源的单向或者双向访问。一个单向信任关系是一个由两个域创建的单向认证路径。在一个Domain A和Domain B之间的单向信任关系中,Domain A中的用户可以访问Domain B中的资源。然而,Domain B中的用户却不能访问Domain A中的资源。单向信任关系可以是传递的也可以是非传递的。
活动目录林中的所有域间信任关系都是双向的和传递的信任关系。当一个新的子域被创建,一个双向的、传递性的信任关系也就在父域和这个新的子域之间自动创建了。在一个双向信任关系中,Domain A信任Domain B,并且Domain B信任Domain A。这意味着经过认证的请求可以再这两个域之间进行双向的发送。双向信任关系也可以是传递性的或者非传递性的。一个活动目录域可以在以下等级的活动目录域中创建单向或者双向信任关系:
传递性却决于信任关系是否能够被拓展到创建该信任关系的两个域之外。一个传递性的信任关系可以被用来拓展信任关系到其他的域中;一个非传递性的信任关系可以被用来隔绝与其他域的信任关系。
你每一次在域林中创建一个新的域,一个双向且传递的信任关系就会在新域和其父域之间自动建立起来。如果这个新建的域中又创建了一个子域,那么信任路径流会向上拓展到新域和父域之间的信任关系。具有传递性的信任关系会顺着域树拓展到整颗域树中。
认证请求随着信任路径,因此来自域林中的任何域中的账户都可以在该域林中的其他域中进行认证。在经过单次登录过程之后,具有一定权限的用户可以访问域林中的所有域中的资源。下面的示意图展示了Tree 1和Tree 2中的所有域都具有默认的传递性的信任关系。其结果就是,当用户被分配适当的权限之后,Tree 1中的用户可以访问Tree 2中的域中的资源,且Tree 2中的用户可以访问Tree 1中的域中的资源。
从这张示意图中我们可以看到,同一域林中的域树根域之间也会自动拥有一个传递性的双向信任关系。
除了上述的默认信任类型之外,还有下面三种信任类型可以通过新建信任关系向导来进行创建。
一个非传递性的信任关系被限制在这两个建立了信任关系的域之间。
非传递性信任关系默认是单向的,你可以通过创建两个单向的信任关系来达到双向信任的效果。
下面列出的域之间只能创建非传递性信任关系:
通过新建信任关系向导,你可以创建如下的非传递性信任关系:
信任关系具有不同的特点。**创建信任关系得域的类型会影响到信任关系的类型。**比如,两个位于不同域林中的子域之间的信任关系总是外部信任关系,但是两个windows server 2003林根域之间的信任关系可能是外部信任关系,也可能是林信任关系。
有两种信任类型会在你是用活动目录安装向导自动创建。还有四中其他的信任类型由新建信任关系向导或者Netdom命令行工具进行创建。
默认情况下,当一个新域添加到域树中或者林根域(林根域其实就是域中的一颗域树的根域,就是林中的一个域树)中时会自动创建双向传递性信任关系。默认的信任关系有两种:父子域信任关系和tree-root(树根域)信任关系。
只要有新的域加入到域树中,那么父子信任关系就会创建起来。活动目录安装过程会自动创建信任关系。父子域信任关系有如下特点:
tree-root信任关系会在你将一个新的域树添加到域林中时创建。活动目录安装向导会自动创建一个关于你新创建的域树根域和林根域的信任关系。tree-root信任关系具有以下局限性:
在windows server 2003中共有4中信任关系需要进行手动设置:快捷信任关系(用于优化同一个域林中域树间的信任路径)、外部信任关系、领域信任关系和林信任。这些信任关系类型必须使用新建信任关系向导或者Netdom命令行工具来进行创建。
这个不再赘述,大致就是图中所示的意思。
外部信任关系可以创建在不同域林中的活动目录域中,还可以创建在windows server 2003或更高版本的活动目录域和windows NT4.0或早期版本的活动目录域之间。外部信任关系具有以下特点:
外部信任关系提供了对域林外的域中的资源的访问。下面这张示意图展示了外部信任关系是如何在windows server 2003域林和windows 2000域林之间使用的。
在上面这个示例中,两个外部的信任关系存在于windows server 2003域林和windows 2000域林。箭头指向的域是被信任的域,被信任的域可以访问信任域中的资源。
由于外部信任关系都是非传递性的,所以rome.europe.tailspintoys.com中的用户是访问不到wideworldimporters.com中的资源的,同样sales.wideworldimporters.com中的用户也是访问不到tailspintoys.com的
当不同域林中的域建立了信任关系之后,外部域的安全主体就可以访问内部域的资源。活动目录在内部域创建了一个外部的安全主体对象来代表每一个来自受信任的外部域的安全主体。这些外部的安全主体可以成为内部域的本地域组成员。外部安全主体的目录对象是由活动目录创建的而且不应该被手动修改。通过启用高级特性,你可以在活动目录的用户和计算机
中查看外部安全主体对象。
下面这张示意图演示了windows server 2003域林和windows NT 4.0域之间的外部域信任关系的配置。
windows server 2003的林信任都启用了SID筛选器。启用SID筛选器可以防止受信任域中的高权限恶意用户提升受信任域中其他用户对信任域中资源的权限。
参考链接:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc755321(v=ws.10)#potential-threats-to-interforest-trusts
在此不做详细描述
林信任关系通过提供对跨域林资源访问的支持来帮助你在你的组织内部管理分段的windows server 2003域中的基础结构。林信任关系对Application Service Provider、处于合并或收购过程中的公司、需要与外网进行协同合作的商务以及需要行政自治解决方案的公司。(不太明白最后这个场景的意思)
林信任关系可以提供以下好处:
通过使用林信任关系你可以将两个windows server 2003域林连接起来以形成一个单向或者双向的信任关系。林信任允许管理员将两个域林通过单个信任关系联系起来以提供无缝的跨域认证和授权体验。
林信任关系只能创建于两个林根域之间。林信任关系是绝对不可以扩展到第三个域林中的。意思就是林信任关系是不可能拥有传递性的。
Forest 1和Forest 3之间是没有信任关系的。
要使用林信任需要满足下面的要求。在你可以使用林信任之前,你必须确保两边的域林中的所有的域控制器都运行的是windows server 2003及以上版本。同时你还需要确保你拥有正常工作的DNS设备以及你创建了合适的活动目录功能级别。这意味着域林必须提升至windows server 2003级别及以上,且你不能在域林中安装额外的Windows 2000或者Windows NT 4.0的域控制器。
只有当你的域林中拥有下面的DNS配置时林信任才能被成功创建:
只有林根域的Domain Admins组或者Enterprise Admins组的administrator才可以创建林信任关系。
Incoming Forest Trust Builders组的成员可以创建一个单向的、incoming林信任关系。举个栗子,Forest A中IFTB(Incoming Forest Trust Builders)的成员可以创建一个单向的,来自Forest B的incoming林信任关系。这个单向的、incoming林信任关系允许Forest A中的用户访问Forest B中的资源。IFTB组中的成员被赋予了在林根域创建Inbound林信任关系的权利。IFTB组中没有默认成员。
Windows NT Server 4.0、Windows 2000、Windows XP客户可以使用林信任来进行认证。尽管如此,Windows NT Server 4.0客户仅支持NTLM认证,而且不支持用户使用UPN登录到网络中。Windows Server 2003功能级别的林信任不能在Windows Server 2003域林和Windows 2000域林中创建。
许多的域间和林间交互都依赖于域或者域林信任关系来完成各种各样的任务。这一节描述了当跨域资源访问或者身份验证时所发生的处理过程和交互行为。
当一个认证请求被引用到域时,这个域的域控制器就必须在对该用户进行任认证之前决定请求来自的域是否和本域存在信任关系,以及该信任关系的信任流方向和传递性。发生在两个域之间的认证过程会因使用的认证协议而不同。Kerberos V5和NTLM认证协议在Windows 2000 Server和Windows Server 2003的认证引用过程是不同的,至于其他的认证协议,比如Digest和SChannel,Windows 2000 Server和Windows Server 2003都是支持的。
如果客户使用Kerberos V5进行认证,它会向他的账户所在域的域控制器申请一个用于访问目标域中的服务器的ticket。Kerberos KDC(Key Distribution Center)在服务器和客户端之间充当受信任的第三方的角色;它提供一个session key让Server和Client进行互相认证。如果目标域和客户所在域是两个域,那么KDC会进行一个逻辑处理来判断这个认证请求能不能被引用。
如果客户端使用NTLM认证协议,那么原始的认证请求将会直接从客户端发送到目标域中的资源服务器。这个服务器会向发送请求的客户端创建一个挑战。然后服务器将用户的响应发送给用户账户所在域的域控制器。域控制器在它的安全账户数据库中检查该用户的账户。如果账户不存在,该域控制器将需要通过下面的逻辑处理来决定是否发起pass-through认证过程,转发该请求,或者决绝该请求:
Windows 2000 Server和Windows Server 2003也支持在林信任中使用Digest和Schannel认证协议。这使得诸如Web服务器等技术可以在多域环境中完成他们的任务。SSL协议和证书通过Schannle映射到活动目录的用户账户,IIS使用Digest。具有信任关系的两个域可能会被要求进行Digest和SChannel认证,因为建立信任关系的两个域可能会存在防火墙,只允许HTTP协议的报文通过。Digest可以使用HTTP的头部进行传输。
只要通用的pass-through机制可以在目标域内找到合适的域控制器,Windows 2000 Server和Windows Server 2003将通过协商来决定在信任关系上使用哪种认证协议进行认证。管理员也可以选择使用SSP作为另一种认证方式。如果SSP与windows 2000 server和Windows server 2003分布式系统是兼容的,那么它就可以以标准的windows 2000 server和windows server 2003工作方式在跨域的信任关系上工作。
位于同一域林中的活动目录域都具有双向且可传递性的信任关系,因此从一个域到另一个域的认证请求将会被路由到目标域以提供对资源的无缝访问。Windows 2000域控制器或者windows server 2003域控使用下面两种认证协议的其中一种进行用户和应用的认证操作:Kerberos V5或NTLM。一旦在他们自己的域中完成认证,用户就可以尝试使用活动目录授权获取该域林中所有域中的资源。
要想使用Kerberos认证来访问其他域中的共享资源,用户的电脑首先要在自己账户所在域的控制器申请一个用于访问信任域中的资源的ticket。这个ticket稍后会被一个可信的第三方颁发。(没太读懂官方文档的意思,没交代清楚这个可信的第三方到底是谁)。用户的电脑将ticket发送给位于信任域中的服务器以进行认证。
下面的示意图和响应步骤提供了一个关于跨域Kerberos认证过程的详尽描述。
上述过程是发生在同一个林中的。
europe.tailspintoys.com
域的凭证登录到Workstation 1。作为该过程的一部分,负责认证的域控制器向User 1颁发了一个ticket-granting ticket(TGT)。这个ticket被User 1用来向资源进行认证。User 1然后尝试访问位于asia,tailspintoys.com
域中的file server上的共享资源\\fileserver1\share
。每一个域都有他自己的安全策略来管理资源的访问。这些策略是无法跨域的。
当两个Windows Server 2003域林建立起林信任关系之后,使用Kerberos V5或者NTLM协议进行的认证请求可以在两个林中进行正确的路由来进行资源的访问。
当一个林信任被建立起来之后,每个林都会搜集所有的他的被信任域的命名空间并把这些信息存储到TDO中。被信任的命名空间包括其他域林中的域树名字,UPN后缀,SPN后缀和SID命名空间。TDO对象会被复制到全局编录。
在认证协议可以根据域林信任路径进行认证之前,承载着资源的计算机的SPN必须被解析到其他域林中。一个SPN可以有如下几种形式:主机的DNS名称、域的DNS名称或者服务接入点对象的DN(distinguish name)。
当域林中的一个Workstation尝试访问另一个域林中的资源计算机时,Kerberos认证过程会联系域控制器获取一个要访问的资源计算机的SPN的service ticket。一旦域控制器向全局编录发起请求并判断出SPN并不在当前域林内,域控制器就会将其父域的引用返回给Workstation。这个时候,workstation向他的父域请求服务票据,并沿着信任路径找到目标计算机所在域的域控制器申请服务票据。
下面这张示意图和响应步骤提供了一个跨林Kerberos认证过程的详细描述。
europe.tailspintoys.com
域中的凭证登录到Workstation 1。然后User 1尝试访问位于另一个域林usa.wingtiptoys.com
中的FileServer 1中的共享资源。wingtiptoys.com
域中的ForestRootDC2的域控制器的引用。usa.wingtiptoys.com
的引用返回给了Workstation 1。由于信任关系必需要在不同的网络边界中建立 ,所以可能会经过多个防火墙。在这种情况下,你通过开启防火墙上的某个端口来允许信任关系产生的网络流量通过。在Windows Server 2003中,这个过程被简化成为信任关系相关的服务配置RPC端口。有两个主要的端口需要配置:Local Security Authority RPC端口、Net Logon RPC端口
这个端口被用于信任关系的创建和对LSA策略数据库的访问
这个端口被用于NTLM认证过程和安全通道的通信。
下面这张表格展示了在建立信任关系时需要打开的端口列表。
任务 | 出站端口 | 入站端口 | From-To |
---|---|---|---|
同林中的两个域创建信任关系 | LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88)、Endpoint resolution—portmapper(TCP:135)、Net Logon(活动端口) | N/A | 内部域的域控制器 ---- 外部域的域控制器(所有端口) |
由内部域林到外部域林的信任关系的验证 | LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88)、Endpoint resolution—portmapper(TCP:135)、Net Logon(活动端口) | N/A | 内部域的域控制器 ---- 外部域的域控制器(所有端口) |
在外部域林中使用对象选取器向内部域林的组合DACLs中添加对象 | N/A | LDAP(TCP/UDP:389)、Windows NT Server 4.0目录服务(活动端口)、Net Logon(活动端口)、Kerberos(UDP:88)、Endpoion resolution portmapper(TCP:135) | 外部服务器 ---- 内部域的PDC(kerberos)、外部域的域控制器 ---- 内部域的域控制器(Net Logon) |
在外部域林中设置信任关系 | N/A | LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88) | 外部域的域控制器 ---- 内部域的域控制器(所有端口) |
内部域客户端对外部域使用Kerberos认证 | Kerberos(UDP:88) | N/A | 内部域林客户端 ---- 外部域的域控制器(所有端口) |
内部域客户端对外部域使用NTLM认证 | N/A | Endpoion resolution portmapper(TCP:135) | 外部域的域控制器 ---- 内部域的域控制器(所有端口) |
将内部网络的计算机加入到外部域中 | LDAP(TCP/UDP:389)、Microsoft SMB(TCP:445)、Kerberos(UDP:88)、Endpoint resolution—portmapper(TCP:135)、Net Logon(活动端口)、Windows NT Server 4.0 目录服务( 活动端口) | N/A | 外部域的域控制器 ---- 内部域的域控制器(所有端口) |
如果在实际应用中出现了139端口,那么改端口是为了向后兼容的。
要想指定你想在活动端口上运行的服务,你需要为该端口配置注册表。
建议使用组策略或者其他windows工具,比如MMC(Microsoft Management Console)来达到上述目的。
官方不建议直接修改这两个注册表键。
Settings for the Local Security Authority (LSA) RPC port are stored in the TCP/IP Port entry in the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
registry key.
Settings for the Net Logon RPC port are stored in the DCTcpipPort entry in the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
registry key.