[Windows Server 2008 R2 SP1,截至 2013 年 3 月 15 日的最新修补程序]。我在域 1 中有一个名为“IT”的安全组。我在域 2 中有一台服务器 2。域 1 和域 2 之间存在单向信任。我想在服务器 2 上共享一个名为“Apps”的文件夹,以便域 1 上的 IT 组可以访问它。我成功共享了,但有些奇怪。当我最初将域 1\IT 添加为访问共享文件夹的组时,它在共享对话框中显示了正确的图标和文本。但是当我重新打开共享对话框以查看权限时,它需要非常枚举时间很长,最后显示一个?图标,带有文本“<未知联系人>”。Domain1 中的 IT 组可以正确访问共享文件夹,但这让我觉得有些不对劲。有人知道为什么吗?
答案1
当林中的域与该林外的域之间建立信任时,来自外部域的安全主体可以访问内部域中的资源。Active Directory 在内部域中创建一个外部安全主体对象来表示来自受信任的外部域的每个安全主体。这些外部安全主体可以成为内部域中的域本地组的成员。外部安全主体的目录对象由 Active Directory 创建,不应手动修改。您可以通过启用高级功能从 Active Directory 用户和计算机查看外部安全主体对象。
因此,您的“未知联系人”就是 Domain2 中所谓的外部安全主体。在 目录的默认命名上下文中有一个容器CN=ForeignSecurityPrincipals,DC=domain2,DC=com
。该容器内应包含 Active Directory 将用来解析 Domain1 中所有为 Domain2 所知的人员的指针。Domain2 知道 SID,但它必须请求 Domain1 将该 SID 转换为 SamAccountName。
由于您的信任是单向的,Domain2 无法做到这一点,因为 Domain1 不信任它。
您可以在 Domain1 中启用匿名 SID 转换,但这存在安全风险。或者您可以双向信任。
正如您所注意到的,您现在所看到的“未知联系人”不会妨碍任何工作,因为 SID 足以检查森林信任。现在这只是一种美观问题。
更多 MS 文档:
执行
LookupAccountSid 将调用 LsaLookupSids 并解析单个 SID。因此本节将介绍 LsaLookupSids。
接收调用的计算机上的 LSA(使用 LSA RPC 接口)将解析其可以映射的 SID,并将剩余未解析的 SID 发送到主域中的域控制器。域控制器将把其他 SID 解析为本地数据库中的帐户名称,包括在全局目录中的 SidHistory 中找到的 SID。
如果 SID 无法在那里解析,则域控制器将把剩余的 SID 发送到受信任域中的域控制器,其中 SID 的域部分与信任信息相匹配。
最后,这是来自 Microsoft AskDS 博客(顺便说一下,这是一个很棒的博客)的内容:
假设端口是开放的,那么还有其他部分阻碍了转换。最常见的情况是,当涉及单向信任且匿名翻译被阻止时,我们会看到这种情况。您可以轻松地在组策略中允许匿名 SID/名称转换。此策略仅适用于域控制器,因为它们是实际处理转换请求的服务器。
编辑:作为一种解决方法,您可以考虑在域 2 中创建一个名为“可以访问服务器 2 上的应用程序的人”的安全组,并将域 1 中的用户主体添加到该组。