我正在实现一个工具,用于保护 AD 林中的某些共享资源(主要是文件共享)。根据某些标准,生成来自不同域的用户列表,将这些用户添加到通用组(因为我需要将来自不同域的用户聚集到一个组中),然后将该通用组添加到共享资源 ACL。
森林里大约有 10,000 名用户,我认为我的通用组最终会拥有最多 2,000 名用户。而且这些组可能有多达几千个。
一切看起来都很好并且在测试环境中运行。
问题在于有一篇有关团体最佳实践的 MS 文章:http://technet.microsoft.com/en-us/library/cc787646(v=ws.10).aspx
这里写的几乎是一样的: http://ss64.com/nt/syntax-groups.html
在“跨域控制共享资源访问的最佳实践”部分中,我应创建域本地组并在其中嵌套全局/通用组。我理解这样做有管理上的好处,更容易管理,更清晰可见,等等
但我所做的一切都是自动化的,我的工具会自动监视正确的安全性。
我们的一些 IT 顾问试图说服我,不遵循最佳实践也可能导致性能不佳。
所以基本上的问题是:如果我直接在共享资源上添加通用组而不是将通用组嵌套在域本地组中,是否会影响性能(即登录、保护目录等所需的时间)?
提前致谢。
更新:
关于嵌套组还有一个限制。(http://support.microsoft.com/kb/328889) 用户组数限制为 1015。因此,如果将通用组嵌套到域本地组中,我会得到约 500 个限制,这似乎是一个痛苦的限制。
更新2: 关于我的森林拓扑。我有 6 个域,分为 2 棵树。(树由一个根域和两个子域组成)
答案1
以下是微软关于通用组的声明。特别是粗体部分与您有关:
通用组可在同一 Windows 林中的任何地方使用。它们仅在本机模式企业中可用。对于某些管理员来说,通用组可能是一种更简单的方法,因为它们的使用没有内在限制。用户可以直接分配给通用组,它们可以嵌套,并且可以直接与访问控制列表一起使用以表示企业中任何域的访问权限。
通用组存储在全局编录 (GC) 中;这意味着对这些组所做的所有更改都会导致复制到整个企业中的所有全局编录服务器。因此,只有在仔细检查通用组的好处与增加全局目录复制负载的成本后,才能对通用组进行更改。如果组织只有一个连接良好的 LAN,则不会出现性能下降的情况,而广泛分布的站点可能会受到严重影响。通常,使用 WAN 的组织应仅将通用组用于相对静态的组,这些组的成员身份很少发生变化。
在每个人都可以访问全局目录的连接良好的环境中,性能影响应该相当小。
性能影响将增加登录时间和增加评估资源 ACL 的时间如果无法访问全局目录,或者您的站点和子网配置错误,导致您与站点之外的全局目录服务器通信。此外,全局目录复制负载也会增加。
然而,我不得不再次告知你,你的所作所为违背了普遍接受的最佳做法。
您所说的这部分内容:“...我的工具会自行监测正确的安全性。” 这也让我害怕。
所以我站在你们的 IT 顾问一边,我认为他们正在尽自己的职责,试图说服你们遵循 AD 设计方面普遍接受的最佳实践。
但无论如何,这都是对你问题的答案。
答案2
回顾过去,一个潜在的性能场景是 Windows Server 2003 之前的组成员身份复制情况非常糟糕,并且在 Windows Server 2003 之前创建的具有遗留成员的旧组仍然表现不佳。
在 Windows Server 2003 之前,每次更改全局/通用组成员身份时,全部的组成员属性被复制。这在大型分布式目录中会产生严重的复制性能问题,尤其是对于具有许多成员的通用组。因此,在大型多域目录中,将每个域中的全局安全组添加到通用组是一种常见的做法。这会导致将成员资格复制划分到域本身内。
Windows Server 2003 引入了链接值复制 (LVR)。这解决了新建组和旧成员已转换的组中的很多问题,因为当发生更改(添加/删除成员)时,只会复制单个“链接值”(成员)。
另一个潜在问题是成员总数。如果您拥有的用户超过 50,000 个,而 40,000 个需要加入安全组,则通常将每个组的成员数量限制为少于 5,000 个,因为这是可以在单个原子 Active Directory 事务中安全提交的最大项目数。但是,对于 LVR 组,对具有大量成员的组进行更新不再需要发送整个成员身份,因此这通常不再是问题,只要您自己不在单个事务中执行那么多更新(添加/删除)。
话虽如此,对于多域林中的大型组来说,将特定于域的安全组添加为单个通用安全组(通常位于资源域中)的成员仍是一种很好的做法。是否使用该通用组对资源进行 ACL 管理,或将通用组添加到域本地组取决于您。实际上,我并没有看到使用通用组、性能或其他方面存在太多问题。请注意,访问全局目录很少会成为问题,因为 Microsoft 长期以来一直建议所有域控制器都为全局目录。在域本地组出现之前创建的大型目录并不少见,这些目录尚未将其任何组或策略转换为使用域本地组。
Microsoft 推荐使用域本地组的原因如下,因为它们在可添加到组的成员类型以及域管理员的自主控制级别方面提供了最大的灵活性。它还提供了一种最小化组成员身份复制的方法:
全局编录复制
http://technet.microsoft.com/en-us/library/cc759007%28v=ws.10%29.aspx
“具有通用范围的组及其成员仅列在全局目录中。具有全局或域本地范围的组也列在全局目录中,但他们的成员不是。这减少了全局目录的大小以及与保持全局目录最新相关的复制流量。您可以通过使用具有全局或域本地范围对于经常变化的目录对象。”
您也不应该将域本地组用于 Active Directory 中的 ACL 对象:
“当用户连接到全局目录并尝试访问对象时,将根据用户的令牌和对象的 DACL 执行访问检查。对象 DACL 中为域本地组指定的任何权限(这些权限不是来自托管全局目录(用户已连接到)的域控制器所属的域)都将无效,因为只有来自用户所属的全局目录域的域本地组才会出现在用户的访问令牌中。因此,用户可能会在应该授予访问权限时被拒绝访问,或者在应该拒绝访问时被允许访问。
“作为最佳实践,在为 Active Directory 对象分配权限时,应避免使用域本地组,或者如果使用它们,请注意其含义。”