检查给定的用户是否有特权

给定一对用户和一个特权,我需要确定一个用户是否有权限在服务器上。 以下是我的设置:

  • 服务器是域的一部分,但不是域控制器
  • 基础设施中有几个信任关系的领域
  • 有时,用户(本地,域或来自不同域)可以属于本地组,而其属于本地组的其他组(域或本地),而不是直接属于组。

最后一点的示例场景:

  • User1属于DomainA中的组TeamA
  • DomaimA \ TeamA是DomainB \ SpecialAccess的成员
  • DomainB \ SpecialAccess是DomainB \ DomainAdmins的成员
  • 最后,DomainB \ DomainAdmins属于本地pipe理员组
  • 本地pipe理员组具有SeRemoteInteractiveLogonRight privelege

现在,如果我有inputDomainA \ User1和SeRemoteInteractiveLogonRight我需要到达是或否回答。 所以我打开机器上的本地策略,注意哪些组是根据我所感兴趣的权利也列出,然后去服务器pipe理员,看看什么在组成员,然后我需要看看这些组中的任何组的成员等等。

我有一个直觉,可以更容易。 当我发现AccessChk工具时,我非常兴奋。持续了整整三分钟,我发现它只列出了直接的关系,所以组内的用户不会被列出。

现在我猜测,可以合并来自AccessChk的结果,以便我可以检查用户是否属于AccessChk返回的任何组,但是鉴于它不是一个域,而是几个我不知道如何处理这个。 另外AccessChk输出似乎不区分组和用户。

编辑 :本着不落入XY问题的陷阱,我真正需要做的是确保在一组服务器上没有用作IIS应用程序池标识的特定用户帐户具有SeInteractiveLogonRight或SeRemoteInteractiveLogonRight特权。 我对IIS部分没有任何问题,但是检查某个帐户的最后一个步骤是我正在努力寻找一个简单的方法来检查。 我也想自动检查,因为这是需要定期完成的。

访问令牌没有关于权限的信息,只有关于特权的信息。

你需要做的是这样的:

  • find与您的应用程序池对应的IIS工作进程。 因为通过枚举具有工作进程名称的所有进程并过滤具有该标识的进程,您知道该应用程序池标识应该很容易。 如果有多个,你可以使用任何。
  • 使用TokenGroup信息类的GetTokenInformation,而不是进程标记上的TokenPrivilege。 结果会给你所有的身份所属的传递群体。 这意味着即使是间接的。
  • 现在,您可以循环访问这些组,并在每个组上调用LsaEnumerateAccountRights并整理信息。 这会给你你想要的。

以上依赖于账号身份对应的进程(和令牌)的存在。 在你的情况下,这不应该是一个问题。 在这种情况下,您可以尝试使用Active Directory查找Token-Groups计算属性 。 本文列出了一些如何解决这个问题的方法。