来自C#的托管Powershell,权限问题,冒充域用户

时间:2014-05-21 11:08:02

标签: c# windows powershell active-directory windows-clustering

我知道这有点基本,但如果有人能指引我,我将永远感激不尽。

  • 我有一堆运行Hyper-V的Windows 2012 R2服务器。
  • XML-RPC Web服务在这些服务器上运行。这背后有一些托管的Powershell。它完美地运作。
  • 托管的Powershell代码通过模拟运行。再次,效果很好。
  • 尽管这些计算机一直在域中,但XML-RPC身份验证的工作原理如下:

我在域名中使用了句号(“。”)。 我使用了用户名“Administrator”。 我为每个“本地”管理员帐户使用了一个不同的密码。

我最近在我的应用程序中添加了群集功能,这只是微软的Powershell cmdlet的一些包装器的形式,加上我自己的东西。 如果我正确读取了dcos,则只能使用域凭据进行群集管理。我希望我的Web服务在一组凭据下运行(以简化调用应用程序需要存储的详细信息)。

我以为我会像这样摆弄身份验证模型:

  • 拥有每个Hyper-V主机的域用户。
  • 确保此用户是本地admin和hyper-v管理员组的成员。
  • 将这些用户添加到“群集式hyper-v主机”组,通过群集管理工具为该群组提供“群集权限”。

我的问题:

  • 当运行调整后的模型时,我的代码已经爆炸,不再有效,许多身份验证错误,我可以坐下来看到注册表中的内容并被拒绝。
  • 如果我随机选择一个主机,请使用这个新的域用户登录到它(要清楚 - 是本地管理员组的成员)并运行我的代码而不使用xml-rpc包装器,我看到很多身份验证错误。就好像该用户没有使用管理凭据运行,即使它具有这些权限。
  • 这些用户似乎也具有受限的群集权限,即使他们应具有完全访问权限。
  • 如果我运行'test-cluster'命令,它会告诉我我在运行它的主机上没有权限。

我愿意承认我的目录存在损坏,或者存在真正的访问问题,但也许我对这应该如何工作存在固有的误解。 我是Linux工程师和程序员,我知道一点Windows。当我没有以真正的管理员帐户登录时,在域环境中,UAC如何在此上下文中工作,我有点困惑... 如果我右键单击一个Powershell窗口并“以管理员身份运行”,我的代码似乎都可以正常工作,甚至群集内容(我通过文档认为,不应该作为本地管理员运行)。

我在这里遇到某种高程问题吗?如果一个域用户拥有“有效权限”(希望这个术语不会让人感到困惑)做某些事情,它是否仍然需要以某种方式提升?

非常感谢。

2 个答案:

答案 0 :(得分:0)

将UAC更改为最低级别(从不通知),重新启动并重试。

答案 1 :(得分:0)

我遇到了类似的问题,即从nonosnated C#应用程序运行PowerShell。 我使用PowerShell社区扩展https://pscx.codeplex.com/列出了PowerShell脚本中的活动权限。

将此snipet添加到PS脚本中:

Import-Module Pscx
Get-Privilege

让它使用工作和非工作凭据运行,比较这些权限列表。 如果您发现某些权限已禁用(但不会丢失),请尝试以这种方式启用它们:

Import-Module Pscx
$setPriv = new-object  Pscx.Interop.TokenPrivilegeCollection
$setPriv.Enable('SeTcbPrivilege')
$setPriv.Enable('SeDebugPrivilege')
Set-Privilege -Privileges $setPriv