Windows 2000使公司可以将不同的商业单元集成到一个统一的结构中,这个结构就是活动目录森林,这在Windows NT 4.0中是不可能的。许多在NT 4.0域中不能共存的商业单元现在可以在活动目录的组织单元(OUs)或域中和平共处。但是正如一些使用单 森林结构的人所说,也存在一些商业单元不能共处的场合。有时商业需求或政治原因要求您实现分离的森林。在许多情况下,分离森林中的用户仍然需要访问中心森林中的资源。因此,你需要在中心森林和其他森林之间建立信任关系。Windows 2003在不同森林域之间建立信任关系的方法与NT 4.0一致。但是Windows Server 2003新的森林信任功能使其变得更简单。
多森林范例
从信息安全的角度观察,域不仅是安全边界,而且还是复制与管理的边界。根域管理员组、域管理员组和企业管理员组的成员可以轻易地访问森林中的任何机器。将资源真正隔离的唯一办法就是将它们放入分离的森林中。
我们不需要放弃只建立单森林的想法,但我们需要改变一下,即:将森林数量控制在最小,并且只在必需时增加森林。关于如何确定是否创建森林的标准,参见微软白皮书“Design Considerations for Delegation of Administration in Active Directory”(http://www.microsoft.com/windows2000/techinfo/planning/activedirectory/addeladmin.asp)。这个白皮书清晰地说明了OU、域和森林之间的安全边界,并说明了如何确定是否将商业单元放入分离森林的过程。
什么时候需要分离的森林呢?这在几种情形下需要。最常见的情形是需要保证管理自治(相当于“我不信任您”)。另一种情形是主体的商业单元自己运行Windows 2000森林,并且不能立即更新,由于这个森林还需要一段时间,因此你需要找到与它共存的方法。还有一种情形与森林架构有关,请记住架构(例如AD结构定义)在整个森林中共享,如果你要频繁更改架构,你应该在分离的森林中做这些事情,这样只在需要时更改中心森林架构。
资源分离是另一个建立分离森林的重要原因。例如,法律代理部门的信息需要分离,受保护的合同也需要分离。一些像银行这样的产业,如果将客户信息共享会受到处罚。
Windows 2000的森林内信任
在Windows 2000的一个森林内,Kerberos安全协议自动建立域间信任关系。Kerberos的一个重要功能是支持信任传递。如果A域信任B域,B域信任C域,则A域自动信任C域。记忆信任传递的简单办法就是记住“你的朋友就是我的朋友”。这个功能使域树的概念成为可能,Kerberos票据自动传递使森林中的一个域可以自动信任其他域。Kerberos在森林中的双向信任也叫“内部信任”。若要更多了解Windows 2000的Kerberos技术,参见微软白皮书“Windows 2000 Kerberos Authentication”(http://www.microsoft.com/windows2000/techinfo/howitworks/security/kerberos.asp)。
Windows 2000的森林间信任
森林之外的信任关系更原始一些。在Windows 2000中,Kerberos无法建立跨森林的信任。NT LAN Manager(NTLM)将建立与其他森林的NT 4.0域和Windows 2000域之间的信任关系。这些信任称为“外部信任”(第三种信任,即“快捷信任”,使用Kerberos直接连接两个域树的子域,以提高性能)。
外部信任与NT 4.0信任有相同的限制:外部信任不如Kerberos信任安全,并且不能传递。因此,你很快会陷入和NT 4.0一样的境地,你必须在每个森林的每个域维护信任。
Windows 2003的森林信任
森林信任是连接两个森林根域的一种信任。森林信任使您可以用简单轻松的方式将友好森林绑到一起,比NTLM信任更快、更灵活。由于森林信任用Kerberos替代了NTLM,两个森林之间的信任是可传递的。例如,如果森林A信任森林B,则森林A中的所有域也信任森林B中的所有域。然而,这种信任不在森林间传递,如果森林A信任森林B,森林B信任森林C,森林A并不能自动信任森林C。这和NTLM信任的规则一样,但是它被放大到适合于域森林,和NTLM信任一样,你可以建立单向或双向信任。
森林信任的优点
森林信任的两个优点是跨森林认证和授权。跨森林认证使被信任森林中的用户可以登录到信任森林的机器上,而不用重复创建账号。跨森林授权同样使你可以对被信任森林的用户分配权限,以便他们访问信任森林的资源,同样无需重复账号。这个行为不会危害森林安全边界。
尽管你可以在森林间建立外部信任,但使用基于Kerberos的森林信任极大地减少了森林间所需信任的数量。如果在两个森林的所有域之间建立信任关系,你可以用下面的公式计算所需外部信任的数量。外部信任总数=(1单向信任或2双向信任)×(森林A中的域数)×(森林B中的域数)。
例如,假设你有一个包含三个域的开发森林(DEV)和一个包含四个域的生产森林(PROD),你希望跨森林建立所有域之间的双向信任关系。则你需要建立24个信任,既2×3×4。这个数量虽然不便却还可以忍受,但是如果你决定加入一个包含四个域的集成森林(INT),信任拓扑将更为复杂。你现在有三组信任关系:DEV到PROD,DEV到INT,PROD到INT。这样需维护的信任总数将达到80。
森林信任让你可以实现的一个重要策略就是账号森林配置。一个账号森林本质上是NT 4.0中账号域或资源域配置的放大。要建立账号森林,首先要确保所有账号在主要森林中,然后建立从其他资源森林到主要森林的单向信任(关于建立单向信任的信息,参见附文“轻松创建单向信任”)。用户可以使用主要森林的账号登录到任何联盟森林中。你甚至可以将建立信任的管理权委派给不属于企业管理组的用户。
你也许奇怪,为何Windows 2003的森林信任可以包含其他森林,而Windows 2000的外部信任却不能。在Windows 2003中,信任域对象(TDO)描述了外部信任和森林信任的基本信息。在森林信任中,TDO包含一个称为“森林信任信息”的附加属性。这个属性包含远程森林内所有域的信息,树名称以及可选名称后缀。这个信息对于路由认证和查询远程森林是必要的。全局目录(GC)存储这些信息,因此所有域控制器(DC)都可以查询这些信息。
用Windows 2003配置一个森林信任
要构建森林信任,必须确保两个森林都处于Windows 2003的森林功能级别上。两个森林的每一个DC都必须运行Windows 2003,每个域都必须升级到Windows 2003的域功能级别,并且两个森林也必须升级到Windows 2003的森林功能级别。要了解关于功能级别的更多信息,参见“What's New and What's Improved in Windows。NET Server
接下来,两个森林的根域必须可以通过DNS相互查找。如果你在企业Intranet环境下,并且两个森林都已经与公司的DNS集成,则森林的根域可能已经能够互相查找。若要进行检查,请在一个森林的服务器上打开命令提示窗口,运行Nslookup。键入:
set type=ns
然后键入其他森林根域的域名全称(例如forestb。mycompany。com)。如果服务器能够解析这个FQDN,Nslookup会返回该域的授权DC列表。
如果你现有的DNS配置不能解析其它森林,则你需要为每个森林的DNS服务器配置转发条件。为一个森林根域到其他森林增加一个或多个转发器。转发服务器告诉本地DNS,当接收一个对特定域的请求时,将请求转发到指定的IP地址。例如,你要在ForestA。com和ForestB。com之间建立森林信任。在微软管理控制台(MMC)的DNS管理单元,在森林A的DNS服务器上点右键并选择“属性”。选择“转发器”并输入要转发请求的DNS服务器IP地址,它将处理对森林B的请求。在森林B中重复这个过程以解析对森林A的请求。
记住你使用的转发服务器依据的是手工输入的IP地址。如果这些地址发生改变,则转发器列表也必须更新,否则信任可能失败。
可以解析森林后,使用MMC的活动目录域和信任管理单元的信任向导建立你所期望的信任类型。让我们在两个森林之间一步一步地设置一个双向信任。
从管理工具菜单中选择“Active Directory Domains and Trusts”,或者在“运行”或命令行键入:
domain。msc
在根域点右键,选择“属性”,然后选择信任属性,再选择“新信任”启动信任向导。
这个新信任向导是Windows 2003新增的。这个向导指引你创建各种类型的信任,有四种目标类型:一个Windows 2003或Windows 2000域、一个NT 4.0域、一个Kerberos 5.0领域以及其他森林。这个向导的帮助功能提供了关于信任、功能级别以及用户首选名(UPNs)的附加信息。
尽管你使用向导设置信任操作,你还是应该留意如何设置信任,并且在建立信任之前回顾一下确认屏幕。设置信任存在多种可能性,向导也不会推荐某种类型。如果你粗心犯错,你可能得到一个外部信任类型而不是森林信任。例如,如果你选择了一个子域而不是根域的属性,则建立森林信任不会成为选项。
向导的第一步是输入被信任森林的DNS或NetBIOS名。正确完成后,下一个对话框将要求你选择外部信任或森林信任。如果森林信任没有出现,应返回到第一步并使用帮助按钮来确定是什么东西没有正确设置。
我们的例子是要设置双向信任。当你具有另一个森林的管理权时,新信任向导可使你创建两个单向信任来组成双向信任。
接下来两个对话框让你选择是否允许目标森林的所有用户在访问本地森林时自动认证。如果你选择“Allow authentication only for selected resources in the local forest”,Windows 2003不会自动将信任森林的认证用户SID加到被信任森林用户的令牌上;你必须为访问资源分别授权。这个功能称为“选择性认证”。选择性认证更安全,但管理工作量也更大,因为你必须为每个域和服务器单独配置权限,以使其他森林的用户可以访问。
信任选择完成对话框让你在执行前回顾你的选择。在建立信任之后你将看到这个对话框。向导最后的步骤提供了另一个有用的功能。由于你已经提供了另一个森林的远程凭证,你可以确认双方的信任,无需额外步骤。森林信任成功建立后,向导将关闭,属性簿会在信任类型下显示“forest”,而不是“child”或“external”。
尽管实现森林信任是直截了当的,但是在多森林环境下,一个错误会导致严重后果。因此在实现森林信任之前,应该进行试验练习。
森林信任的限制
森林信任对用户不是完全透明的。如果一个森林不包含一个用户的账号,则该用户在这个森林的一台机器登录时,用户在登录对话框中看不到他的账号域列表,他需要输入他的UPN(例如jimbob@bigtex。net)。微软使用这个设计是因为在多森林环境下,域之间有时可能存在NetBIOS名称冲突。例如,假设forest1。bigtex。net和forest2。bigtex。net在相同的地域,尽管FQDN(namerica。forest1。bigtex。net和namerica。forest2。bigtex。net)是唯一的,但如果森林没有使用相同的WINS名称空间,它们也许都具有一个NetBIOS名为NAMERICA的域。同样,如果你的森林用户不是登录到Windows 2003 server或Windows XP Service Pack 2(SP2)上,则当用户为本地森林资源增加跨森林用户或组时,将看不到用户或组列表。作为替代,必须输入资源的UPN。图7显示了森林A某资源的ACL,其中加入了森林B的用户。访问控制入口(ACE)使用UPN,而不是传统的域\账号格式。
另一个与UPN相关的重要考虑是森林名称空间冲突。默认情况下,用户的UPN格式为account@FQDN。例如,Jim Bob在子域lubbock。bigtex。net中有一个账号,它默认的UPN为jimbob@lubbock。bigtex。net。你可以使用根域UPN,即jimbob@bigtex。net。许多公司使用根域的UPN,这样UPN与用户的email地址一致。这在该账号只存在于一个森林中时可以工作,但是如果你在两个以上森林中具有相同账号时会如何呢?公司的每个成员都有一个bigtex。net邮件地址,但在一个森林使用了这个UPN后缀之后,其他森林不能再使用。对于内部,你必须为用户选择唯一的UPN后缀(例如f1。bigtex。net,f2。bigtex。net)。对于外部,你可以为邮件使用bigtex。net。
森林信任是Windows 2003的一个重要新功能,它去除了Windows 2000的许多限制。对于那些需要将分离森林集合到一起的公司,森林信任功能可以降低从Windows 2000升级到Windows 2003的花销。
轻松创建单向信任
一个常见的需要管理员权限的管理工作是建立从资源域到账号域之间的单向信任。这使你可以将用户账号保留在一个中心位置(即被信任域),然后为信任域中的资源分配权限。Windows Server 2003有一个称为“Incoming Forest Trust Builders”的新组。这个组的成员可以建立指向本地森林的单向信任关系,并且不需要内置的管理员权利。由于这个功能委派了向内信任的过程,因此对于那些希望由其他组分担创建信任工作的组织很有用处。