症状和原因
检查用户对远程资源的有效权限时,有时会看到不正确的结果或错误。
此行为及其解决方法的详细信息取决于获取有效权限的方式,如下所示:
如果使用的是现有 Windows 应用程序,则可以对资源使用“高级安全性”对话框的有效访问选项卡。
如果使用 Authorization Manager 运行时引擎(Authz.dll)应用程序编程接口(API),则可以调用以下函数:
- AuthzInitializeContextFromSid
- AuthzInitializeRemoteResourceManager
- AuthzAccessCheck
- AuthzCachedAccessCheck
Windows Server 2012 R2 引入了对 Windows 评估有效权限的方式(尤其是对远程资源)的更改。
使用“有效访问”选项卡
如果使用 “有效访问 ”选项卡,选项卡可能会显示错误或警告。
有关如何解决这些问题的详细信息,请参阅 远程资源(包括 SMB)。
使用 Authz API 调用
如果满足以下任一条件,则使用 API 调用时可能会发现此问题:
- 应用程序从资源服务器远程发出调用。
- 运行应用程序的用户帐户与资源不在同一域中。
在这种情况下,某些 “允许 ”权限可能缺失,或者某些 “拒绝 ”权限可能显示为 GrantedAccessMask 权限。
下面是一个示例方案:
- 域 A 中有一个全局组,域 B 中有一个域本地组。资源位于域 B 中。
- 域本地组对资源具有完全访问权限。 此访问权限包括 “删除” 权限。
- 全局组是域本地组的成员。 全局组无权直接访问资源。
- 在域 A 中使用管理员级用户帐户和计算机,可以远程检索属于全局组成员的用户的资源权限。
在检索的结果中,用户似乎 没有资源“删除” 权限。 但是,用户实际上确实具有 “删除” 权限。
Authz.dll使用 Kerberos 服务为用户(Kerberos S4U)事务获取用户的令牌。 但是,此令牌相对于管理工作站或运行服务器应用程序的工作站。 令牌与资源服务器不相关。 因此,如果资源满足以下条件之一,则令牌不包括托管资源的计算机的域本地组:
- 资源位于与管理工作站或管理用户不同的域中。
- 资源具有分配给内置组的权限。 内置组可能会被滥用。
使用 Authz API 调用获取有效权限
若要解决此问题,请使用以下一种方法:
调用 AuthzInitializeContextFromSid 函数时,使用 AuthzInitializeRemoteResourceManager 函数包含远程资源的句柄。
本地 Authz 上下文:
- 如果配置启用 Kerberos S4U,请确保管理用户帐户与资源位于同一域中。
- 如果检查 Active Directory 对象的有效权限,请在具有对象的完整副本的域控制器上运行管理工具(配置命名上下文(NC)、域 NC 或应用程序 NC)。
- 如果检查群集资源的有效权限,则可以从任何群集节点运行管理工具。 或者,从资源服务器运行管理工具。
关闭 Kerberos S4U: 将 Authz 引擎从 Kerberos S4U 方法切换到 Active Directory(AD)轻型目录访问协议(LDAP)和独立服务器安全帐户管理器(SAM)查询以收集用户的组列表。
重要
请认真遵循本部分所述的步骤。 如果注册表修改不正确,可能会发生严重问题。 在修改注册表之前, 如果出现问题,请备份注册表 。
为此,请按照以下步骤配置 UseGroupRecursion 注册表项:
- 打开注册表编辑器,然后导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Authz 子项。
- 选择“编辑>新>DWORD 值”。
- 输入 UseGroupRecursion。
- 右键单击 UseGroupRecursion,然后选择“ 修改”。
- 输入 1,然后选择“ 确定”。
注意
如果值为 0 (默认值),Authz 使用 Kerberos 方法。 如果值为 1,Authz 使用 AD LDAP 和独立服务器 SAM 查询。
- 关闭注册表编辑器。
注意
- 如果在创建 Authz 上下文时使用 AUTHZ_REQUIRE_S4U_LOGON 标志,则 UseGroupRecursion 无效。
- 应用程序用户必须具有 TokenGroups 属性和资源域的域本地组的读取权限。
- 应用程序在调用 API 时必须能够使用 SAM RPC 协议。 这是因为使用 SAM API 检索服务器本地组。 可以使用 RestrictRemoteSAM 安全策略在 SAM RPC 接口上设置访问控制列表(ACL)。
获取对远程资源(包括 SMB 共享)的有效权限
Windows Server 2012 R2 向 LSASS 进程添加了 Authz RPC 接口。 此接口由 Netlogon 服务管理。 借助此 RPC 接口,可以评估相对于实际资源服务器的有效权限。
此更新还添加了评估在文件系统和共享级别设置的权限的功能。 使用此功能时,会看到访问检查的哪些部分限制访问。
评估对资源的有效访问时,请考虑以下因素:
- 远程服务器上的授权
- 若要评估远程服务器上的资源的有效权限,用户必须属于访问控制帮助操作员组。 通过此内置组,可以更轻松地将访问权限委派给对资源服务器没有管理访问权限的人员。 否则,用户必须具有对远程服务器和其他资源的管理访问权限。
- 访问 SMB 共享信息
检索共享的安全描述符的权限
用户可能还必须具有对 SMB 共享安全描述符的管理访问权限。 默认情况下,许多市场内操作系统版本不会授予此类访问权限。 若要接收提供此功能的更新,请联系Microsoft 支持部门。 市场内操作系统版本的解决方案未公开发布。如何访问服务器(如果资源使用共享级访问控制)
若要评估使用共享级访问控制的远程服务器上的资源的有效权限,必须使用 UNC 共享路径来访问资源。 不要尝试使用映射的驱动器号来访问资源。 例如,不要使用类似于以下路径的路径:f:\year2022\quarter2\
注意: 在此示例中,
f:
映射到\\fileserver01.contoso.com\finance-data
.请改用类似于以下路径的路径:
\\fileserver01.contoso.com\finance-data\year2022\quarter2\
如果不使用共享权限来限制用户,则可以安全地忽略共享权限警告。