如何以非管理员身份检查本地安全策略权限
how to check Local Security Policy rights as non-admin
情况是客户端系统运行 c#代码,启动时我们希望检查并确认windows身份运行系统具有某些特定权限,当前特定情况是 SeSystemtimePrivilege。
我们不希望用户必须是管理员才能启动系统。
目前尝试的路径包括:
WMI 没有获得我们想要的权利集。
LsaEnumerateAccountsWithUserRight 通过 PInvoke - 这完全有效,但需要管理员权限才能使用 LsaOpenPolicy。
- 通过 PInvoke 与 LookupPrivilegeName 结合使用 GetTokenInformation 这没有 return 预期的结果。相反,它 return 只为令牌设置了 5 个特权,但不包括 SeSystemtimePrivilege,尽管它已被明确授予相关用户。 (我认为它只向我显示来自 GP 的权利?它们与我通过 cmd WhoAmI /priv 检查看到的权利相同。)
- 通过 PInvoke 与 PrivilegeCheck 结合使用 LookupPrivilegeValue,这似乎也只能访问与 GetTokenInformation 相同的 5 个权限,并且只有 return 在实际启用上述权限时才为真。
到目前为止我还不知道如何在我的本地机器上启用这个权限来测试这种情况,但我认为除了客户端机器上的默认设置之外我不能依赖它。
我正在寻找更多关于如何在没有管理员权限的情况下获得这些用户权限的想法。
想法?我用尽了所有选择吗?不可能吧?
我的情况的答案竟然是
- 通过 PInvoke 与 LookupPrivilegeName 结合使用 GetTokenInformation
选项。
所以,我没有获得完全权利的原因是我认为是分裂令牌。作为管理员,当 运行 将应用程序设置为未提升时,您会获得两个令牌。这阻碍了完整的工作流程,直到涉及清单。获得我们所追求的完整管理权限的关键是包含一个包含以下行的清单:
- < requestedExecutionLevel level="highestAvailable" uiAccess="false" />
然后就变得容易了。管理员可以 运行 非提升的应用程序,GetTokenInformation 将 return 全套管理员权限,其中包括我们的目标 SeSystemtimePrivilege(我们不在任何人限制管理员权限的系统上,曾经)。对于标准用户,我们在本地安全策略中明确授予他们 SeSystemtimePrivilege,然后该权限也在他们的令牌权限中 returned。
两种情况都已解决。它需要设置 VM 来测试标准用户等,由于其他原因,进展缓慢。但无论如何,它确实有效,并且满足了我们的需求。
我希望这对其他人有帮助!
仁
情况是客户端系统运行 c#代码,启动时我们希望检查并确认windows身份运行系统具有某些特定权限,当前特定情况是 SeSystemtimePrivilege。 我们不希望用户必须是管理员才能启动系统。
目前尝试的路径包括:
WMI 没有获得我们想要的权利集。
LsaEnumerateAccountsWithUserRight 通过 PInvoke - 这完全有效,但需要管理员权限才能使用 LsaOpenPolicy。
- 通过 PInvoke 与 LookupPrivilegeName 结合使用 GetTokenInformation 这没有 return 预期的结果。相反,它 return 只为令牌设置了 5 个特权,但不包括 SeSystemtimePrivilege,尽管它已被明确授予相关用户。 (我认为它只向我显示来自 GP 的权利?它们与我通过 cmd WhoAmI /priv 检查看到的权利相同。)
- 通过 PInvoke 与 PrivilegeCheck 结合使用 LookupPrivilegeValue,这似乎也只能访问与 GetTokenInformation 相同的 5 个权限,并且只有 return 在实际启用上述权限时才为真。
到目前为止我还不知道如何在我的本地机器上启用这个权限来测试这种情况,但我认为除了客户端机器上的默认设置之外我不能依赖它。
我正在寻找更多关于如何在没有管理员权限的情况下获得这些用户权限的想法。
想法?我用尽了所有选择吗?不可能吧?
我的情况的答案竟然是
- 通过 PInvoke 与 LookupPrivilegeName 结合使用 GetTokenInformation 选项。
所以,我没有获得完全权利的原因是我认为是分裂令牌。作为管理员,当 运行 将应用程序设置为未提升时,您会获得两个令牌。这阻碍了完整的工作流程,直到涉及清单。获得我们所追求的完整管理权限的关键是包含一个包含以下行的清单:
- < requestedExecutionLevel level="highestAvailable" uiAccess="false" />
然后就变得容易了。管理员可以 运行 非提升的应用程序,GetTokenInformation 将 return 全套管理员权限,其中包括我们的目标 SeSystemtimePrivilege(我们不在任何人限制管理员权限的系统上,曾经)。对于标准用户,我们在本地安全策略中明确授予他们 SeSystemtimePrivilege,然后该权限也在他们的令牌权限中 returned。
两种情况都已解决。它需要设置 VM 来测试标准用户等,由于其他原因,进展缓慢。但无论如何,它确实有效,并且满足了我们的需求。
我希望这对其他人有帮助!
仁