Windows

檢查給定使用者是否具有給定權限

  • June 16, 2016

給定一對使用者和一個特權,我需要確定使用者是否在伺服器上具有特權。在我的設置中,以下是正確的:

  • 伺服器是域的一部分,但不是域控制器
  • 基礎設施中有多個具有信任關係的域
  • 有時使用者(本地、域或來自不同域)可以屬於本地組,因為他們屬於屬於本地組的其他組(域或本地),而不是直接屬於該組。

最後一點的範例場景:

  • User1 屬於 DomainA 中的組 TeamA
  • DomaimA\TeamA 是 DomainB\SpecialAccess 的成員
  • DomainB\SpecialAccess 是 DomainB\DomainAdmins 的成員
  • 最後 DomainB\DomainAdmins 屬於本地管理員組
  • 本地管理員組具有 SeRemoteInteractiveLogonRight 特權

現在,如果我有輸入 DomainA\User1 和 SeRemoteInteractiveLogonRight 我需要到達是或否的答案。所以我在機器上打開本地策略,注意我感興趣的右邊列出了哪些組,然後去伺服器管理器查看組成員的內容,然後我需要查看這些組中任何組的哪些成員等等。

我有一種直覺,它可以更容易。當我發現AccessChk 實用程序時我真的很興奮它持續了整整三分鐘,我發現它只列出了直接關係,因此不會列出組內的使用者。

現在我猜測有可能將 AccessChk 的結果結合起來,以便我可以檢查使用者是否屬於 AccessChk 返回的任何組,但鑑於它不是單個域,而是其中幾個我是不知道如何解決這個問題。此外,AccessChk 輸出似乎沒有區分組和使用者。

編輯:本著不陷入 XY 問題陷阱的精神,我真正需要做的是確保在一組伺服器上,沒有用作 IIS 應用程序池標識的特定使用者帳戶具有 SeInteractiveLogonRight 或 SeRemoteInteractiveLogonRight 權限。我對 IIS 部分沒有任何問題,但是根據特權檢查帳戶的最後一步是我正在努力尋找一種簡單的檢查方法。我也想自動化檢查,因為這是需要定期進行的事情。

訪問令牌沒有關於權限的資訊,只有關於特權的資訊。

你需要做的是:

  • 找到與您的應用程序池對應的 IIS 工作程序。由於您知道應用程序池標識,通過列舉所有具有工作程序名稱的程序並過濾具有該標識的程序應該很容易。如果有多個,您可以使用任何一個。
  • 將 GetTokenInformation 與 TokenGroup 資訊類一起使用,而不是程序令牌上的 TokenPrivilege。結果也會為您提供身份所屬的*所有傳遞組。*這甚至意味著間接的。
  • 現在您可以遍歷這些組並在每個組上呼叫LsaEnumerateAccountRights並整理資訊。這會給你你想要的。

以上依賴於帳戶身份對應的程序(和令牌)的存在。在您的情況下,這應該不是問題。在出現此問題的情況下,您可以嘗試使用 Active Directory 查找Token-Groups 計算屬性本文列出了一些如何實現這一目標的方法。

引用自:https://serverfault.com/questions/610493