【问题标题】:how to check Local Security Policy rights as non-admin如何以非管理员身份检查本地安全策略权限
【发布时间】:2015-06-22 23:56:54
【问题描述】:

情况是一个运行c#代码的客户端系统,启动时我们希望检查并确认运行该系统的windows身份具有某些特定的权限,当前的具体情况是SeSystemtimePrivilege。 我们不希望用户必须是管理员才能启动系统。

目前尝试的路径包括:

  • WMI 未获得我们所追求的权利集。

  • LsaEnumerateAccountsWithUserRight 通过 PInvoke - 完全有效,但需要管理员权限才能使用 LsaOpenPolicy。

  • 通过 PInvoke 和 LookupPrivilegeName 的 GetTokenInformation 这没有返回所需的结果。相反,它只返回了 5 个令牌特权,但不包括 SeSystemtimePrivilege,尽管它已被明确授予相关用户。 (我认为它只向我展示了来自 GP 的权利?它们与我通过 cmd WhoAmI /priv 检查看到的权利相同。)
  • Lo​​okupPrivilegeValue 通过 PInvoke 结合 PrivilegeCheck,这似乎也只能访问与 GetTokenInformation 相同的 5 个权限,并且仅在实际启用所述权限时返回 true。

到目前为止,我无法弄清楚如何在我的本地机器上启用此权限来测试这种情况,但我认为除了客户端机器上的默认设置外,我不能依赖它。

我正在寻找更多关于如何在不必拥有管理员权限的情况下获得这些用户权限的想法。

想法?我是否已经用尽了所有选项?不可能吧?

【问题讨论】:

  • 谢谢!非常感激。我会记住的。
  • 我很确定我有一个可行的解决方案,令牌角度是可行的方法。如果它有效,我将在我完成测试后明天发布我的答案。 (=

标签: c# pinvoke privileges


【解决方案1】:

我的情况的答案竟然是

  • 通过 PInvoke 与 LookupPrivilegeName 结合使用 GetTokenInformation 选项。

所以,我没有获得完整权利的原因是我认为的分裂令牌。作为管理员,您在以非提升身份运行应用程序时会获得两个令牌。这阻碍了完整的工作流程,直到涉及清单。获得我们所追求的完整管理员权限的关键是在清单中包含以下行:

然后它变得更容易。管理员可以在非提升的情况下运行应用程序,GetTokenInformation 将返回完整的管理员权限集,其中包括我们的目标 SeSystemtimePrivilege(我们不在一个任何人都在限制管理员权限的系统上)。对于标准用户,我们在本地安全策略中明确授予他们 SeSystemtimePrivilege 权限,然后在他们的令牌权限中也返回该权限。

这两种情况都得到了补救。它需要设置虚拟机来测试标准用户等,由于其他原因,这进展缓慢。但无论如何,它确实有效,并且满足了我们的需求。

我希望这对其他人有帮助!

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 2015-04-02
    • 2012-07-11
    • 2016-08-29
    • 1970-01-01
    • 2018-08-14
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多