黄金分组定律
使用Windows组管理资源权限的基本原则
导读:本文讨论了Windows组的相关内容,包括组的类型、组的范围,以及使用组设置权限的一些重要原则。
在拥有众多用户和资源的分布式计算机环境中管理权限(例如,Windows Server 2003域)可能很费时,也很烦人。为了方便管理员,Windows提供了组。使用组可以将功能类似的用户或计算机连接在一起,从而显著减少在为Windows资源(例如文件和打印机)设置权限时带来的工作量。
在我介绍关于如何使用组设置资源权限的准则之前,你应该了解可能的组类型和组范围。注意我这里说到的组是指可以在Windows Server 2003或Windows 2000域环境中定义和管理的组。(请查看附文“Windows组的发展过程”,了解组的发展过程。)本文不会讨论在独立机器和域成员工作站/服务器的安全数据库上定义的本地组。这些本地组只能在本地计算机的资源上设置权限。而本文讨论的组能在域甚至森林中对资源进行权限管理。
组类型
Windows Server 2003和Windows 2000只支持两种组类型:通讯组(Distribution Group)和安全组(Security Group)。图1显示的是在MMC(Microsoft Management Console, 管理控制台)的Active Directory用户和计算机管理单元中创建新组时可以选择的组类型。

图1:Active Directory用户和计算机管理单元中的组属性
在基于AD的邮件服务器中创建组时可以选择通讯组作为邮件分发列表,例如Microsoft Exchange Server 2003和Exchange 2000 Server。Exchange 2000以上版本的邮件服务器与Windows 2000以上的操作系统结合非常紧密,通讯组的使用可以更好地证明这一点。
同样,也可以使用安全组作为邮件分发列表。不过更重要的是,安全组可以用来进行与安全相关的管理,例如设置资源的权限,这是因为在认证过程中安全组的SID被添加到Windows用户的访问令牌(token)中了。而通讯组的SID则没有,所以不能用通讯组来执行安全相关的管理任务。由于只能使用安全组为资源设置权限,所以下面的讨论重点就是这种类型的组。
如果域处于恰当的域功能等级(Domain Functional Level),就可以在Active Directory用户和计算机管理单元的组属性页面中将通讯组转化为安全组,反之亦然(关于域功能等级后面会做简单介绍)。Windows会给出警告信息,提示该转换操作可能会出现权限问题,如图2所示。例如,假设你有一个可能已经用于资源授权的安全组,这时如果将该安全组转换为通讯组,组成员就会失去相关资源的访问权限。如果需要一次修改多个组,可以使用Windows Server 2003中的Dsmod命令行工具,并带上-secgrp[yes/no]参数。

图2:将安全组转换为通讯组时的警告信息
AD组的部分特性依赖于域功能等级。Windows Server 2003之后通过域功能等级建立了一个版本管理系统。域功能等级依赖于域控制器(DC)上操作系统的版本。表1显示的是DC上支持的各种Windows Server 2003域功能等级和操作系统版本。表2提供了各个域功能等级所支持的AD组特性的概览。
表1:域功能等级
域功能等级 |
在DC上支持的OS |
Windows 2003 |
Windows 2003 |
Win2K native |
Windows 2003和Win2K |
Windows 2003 interim |
Windows 2003和NT 4.0 |
Win2K mixed |
Windows 2003,Win2K及NT 4.0 |
表2:域功能等级在组特性上的作用
|
Windows 2003或Win2K-native域功能等级 |
Win2K Mixed或Windows 2003 Interim域功能等级 |
组的类型 |
安全组和分发组 |
安全组和分发组 |
组的范围 |
universal,global和domain local |
global和domain local |
组的共享 |
在同一域中的所有计算机能共享domain local类的组 |
DC间能共享domain local类的组 |
组的嵌套 |
universal组可以是其它universal组或domain local组的成员 |
只有global组才能嵌套在domain local组中,不支持其它组嵌套。 |
组的修改 |
组的类型和范围都能被修改 |
组的类型和范围都不能被修改 |
组的范围
与选择组类型一样,在创建组时还需要指定组的范围。Windows Server 2003和Windows 2000都支持三种组范围:universal(通用)、global(全局)和domain local(域本地)。这两个操作系统还支持local的两种小类:domain local(域本地)和system local(系统本地)。前一种范围类型的组可以在域中任何机器上使用,而后一种则只能在定义并存储它的机器上使用。
组的范围定义了组在多域环境中的使用规则。例如,组范围决定了该组是否能包含另一个域的用户和组,同样还决定了你是否能使用该组为另一个域的资源设置权限。
表3显示的是安全实体(例如,用户、计算机或组)分别与universal、global和domain local组的关系,是否能成为这些组的成员。除此之外,表中还显示了安全实体是否必须与组位于同一个域中(表中的SD栏),还是可以位于同一森林的不同域中(OD-INT),或位于外部域(OD-EXT)。
表3:组成员关系限制
|
可以包含用户和计算机 |
可以包含domain local组 |
可以包含global组 |
可以包含universal组 | ||||||||
|
SD* |
OD-INT** |
OD-EXT*** |
SD |
OD-INT |
OD-EXT |
SD |
OD-INT |
OD-EXT |
SD |
OD-INT |
OD-EXT |
universal组 |
Yes |
Yes |
No |
No |
No |
No |
Yes |
Yes |
No |
Yes |
Yes |
No |
global组 |
Yes |
No |
No |
No |
No |
No |
Yes**** |
No |
No |
No |
No |
No |
domain local组 |
Yes |
Yes |
Yes |
Yes**** |
No |
No |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
*同一个域中 | ||||||||||||
**同一森林中的不同域 | ||||||||||||
***其它外部域或其它森林中的域 | ||||||||||||
****只在Windows 2003或Win2K-native域功能等级中 |
现在大家明白了哪些安全实体可以成为哪类组的成员,下面应该了解在什么场合可以使用组来为资源设置权限。表4显示的是使用组为资源设置权限时,组和资源必须位于同一域中还是可以位于不同的域。如表4所示,domain local组是唯一一种不能为外部域资源设置权限的组。
表4:使用组的限制
|
能为位于同一域中的资源设置权限 |
能为位于不同域中的资源设置权限 |
universal组 |
Yes |
Yes |
global组 |
Yes |
Yes |
domain local组 |
Yes |
No |
组范围还决定了哪些组可以是其它组的成员,这称为组嵌套。组嵌套规则是由Windows的一套机制来管理的,在用户登录到域时,Windows会找出该用户所有的组隶属关系。在Windows Server 2003和Windows 2000中,有以下组嵌套规则:
global组可以是其它global、universal或domain local组的成员。
universal组可以是其它universal或domain local组的成员,但不能是global组成员。
domain local组只能是其它domain local组的成员。
如果域位于Windows Server 2003或Win2K Native域功能等级,组的范围可以在Active Directory用户和计算机管理单元的组属性页面修改。如果一次要修改多个组的范围,可以使用Windows Server 2003的Dsmod命令行工具,并带上-scope [l/g/u]参数。组范围的修改有以下限制:
仅当domain local组中没有其它domain local组成员时,才能将它转换为universal组(domain local组不能是universal组的成员)。
- 仅当global组不是其它global组的成员时,才能将它转换为universal组(universal组不能是global组的成员)。
在多域环境中,仅当universal组中所有成员都属于同一域时,才能将universal组转换为global组(global组的成员只能是同一域中的对象)。
黄金分组定律
Windows管理员们面临的最主要的挑战之一是如何尽可能有效地管理各种资源的访问权限。其中一个准则就是使用组而不是单独的帐户为资源进行授权。把组作为授权模型中的一个抽象层,使权限分配不依赖于帐户级。这一准则对于Windows域和独立的环境都适用。
例如,在许多组织中,用户在各种组织角色间有规律地进行切换。每种角色通常都需要特殊的权限来访问Windows资源。在AD中,你可以为每种组织角色创建一个组(例如,帮助中心操作人员,开发人员),并将资源的权限授予这些组。如果用户在角色间进行切换,你只需要将该用户的帐户加入到对应的组中。这种方法比起单独将帐户的权限重置并修改要有效得多。
下面是一些其它准则,在使用组管理资源权限时如果按照这些规则处理,你的工作会更为有效。
- 用global组来连接用户,domain local组则用于为资源授权,然后将global组隶属于domain local组,以应用这些权限设置。
这是一条Windows NT 4.0规则,它是一种解决缺少NT 4.0委托功能和NT 4.0域数据库大小限制的方案。尽管如此,在多域的Windows Server 2003和Windows 2000森林环境中,它仍然适用。组嵌套和组范围的选择在单域的Windows Server 2003和Windows 2000森林环境中并不太重要。在这种环境中,你只需要注意不要单独为用户授权,而是使用组来作为中转。
组嵌套的选择可能会受两个因素影响,第一个是受保护数据的所有者和敏感程度。如果数据非常敏感,管理员必须进行全面的控制,严格限制能访问数据的用户。所以,最好不要嵌套任何组,而应该使用一个单独的组来管理成员关系,并使用该组对资源进行权限设置。不过,如果要访问该资源的用户数量非常多,资源的所有者并不想或不能控制每个用户对于各自组的成员关系,这可能不是一种最好的解决方案。这种情况下,使用以下方案可能会更好:使用多个组,让其他管理员自己管理各自组的成员关系,然后再将这些组嵌套在另外一个顶级组中,最后用这个顶级组进行授权。
第二个影响到是否使用嵌套组的因素是在AD对象被意外删除后AD组成员的可恢复性。domain local组中外域成员的恢复难度最大。
- 通常来说,在域环境中我建议使用domain local组而不是system local组。如果使用system local组,就无法享受在Windows域中的好处,即集中控制。system local组无法通过AD控制,而且在Active Directory用户和计算机管理单元中用户帐户的组成员关系中看不到system local组。此外,system local组成员的变化日志会记录在本地机器的安全事件日志中,而不是DC的事件日志中。
该规则有一种例外值得大家注意,在AD环境很庞大时,需要非常多本地组。和AD组不同的是,用户的system local组成员关系在登录时不会细化,因而不会影响到用户Kerberos令牌的大小。因此,这种情况下,你可能需要使用system local组,而不是domain local组。
在资源跨越了多个域时,要使用universal组来进行授权。可以按照如下的方法操作:将global组加入到universal组中,并将universal组加入到domain local组中,最后用domain local组来对资源进行授权。
如果组中的成员变化很少,使用universal组。如果组的成员关系变化很频繁,可以使用global组作为中转,将用户添加到global组中,然后将global组加入到universal组中。在多域环境中,universal组带来的网络通信更多,因为universal组成员关系是存储在GC(Global Catalog,全局编录)中的,而GC是在森林里进行复制的。
注意,该规则仅适用于并非位于本地Windows Server 2003森林功能等级的Windows Server 2003和Windows 2000 AD。而在本地Windows Server 2003森林中,AD支持一种名为链接值复制(linked-value replication,LVR)的新特性,该特性可以在组的成员关系发生变化时,在DC间只复制发生变化的那部分组成员关系(而不是整个组的成员关系列表)。该规则还不适用于含有Exchange服务器的多域环境,因为它需要用到universal通讯组。这种情况下,就不应该使用global组来中转,因为Exchange服务器无法获取在外域中定义的global组中的成员关系。
除了遵循这些规则以外,通常我还建议尽可能少地创建新的组,组的嵌套级别也尽可能少。组越少,嵌套级别越少,授权关系就越简单,从而可以减少问题发生时的排错时间。
必需的知识
现在大家了解了AD组的基础知识,以及如何使用它们对资源权限进行有效的管理。这些知识对于任何AD管理员来说都是必不可少的。
附文:
Windows组的发展过程
一直以来Windows都提供了对组的支持。Windows NT 4.0及更早版本中使用的模式相较于Windows Server 2003和Windows 2000中的更为简单。以下是这两种组模式的主要区别:
Windows Server 2003和Windows 2000支持两种组类型:安全组和通讯组。Windows NT 4.0及更早版本只支持安全组。
- Windows Server 2003和Windows 2000支持三种组范围:universal、global和local。Windows Server 2003和Windows 2000还支持local组的两种小类:domain local和system local。Windows NT 4.0只支持global和system local组范围。universal是Active Directory Global Catalog(GC)引入的,GC是一个DC特性,它可以让Windows Server
2003或Windows 2000森林中一个域的DC访问其它域中AD对象及其属性的子集。
- 在Windows Server 2003和Windows 2000中,在组被创建后,它的类型和范围还可以修改。而在Windows NT 4.0及早期版本中是无法在组被创建后修改的。
- 在Windows Server 2003和Windows 2000中,如果组的类型和范围相同,组可以进行嵌套。Windows NT 4.0及早期版本只支持将global组嵌套到system local组中。