【问题标题】:WMI Win32_Process.Create fails with Insufficient PrivsWMI Win32_Process.Create 因权限不足而失败
【发布时间】:2009-04-20 05:28:16
【问题描述】:

我正在尝试通过调用Win32_Process 类从 vbscript 中的远程 Windows 服务器上运行一个简单的 cmd 实用程序,如下所示:

serverIP = "10.0.0.3"
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & serverIP & "\root\cimv2:Win32_Process")
RunCommand = "cmd.exe /c echo hello >c:\hello.txt"
wscript.echo RunCommand
intReturn = oWMI.Create(RunCommand, Null, Null, intProcessID)  
wscript.echo intReturn
Select Case intReturn
        Case 0 Wscript.Echo "Successful"
        Case 2 Wscript.Echo "Access denied"
        Case 3 Wscript.Echo "Insufficient privilege"
        Case 8 Wscript.Echo "Unknown failure"
        Case 9 Wscript.Echo "Path not found"
        Case 21 Wscript.Echo "Invalid parameter"
        Case Else Wscript.Echo "Unable to execute for unknown reason"
End Select

这总是因权限不足而失败(返回码 3)。

谁能看到我做错了什么?该脚本是从作为域管理员调用的 cmd 会话中运行的,因此它应该可以正常工作,除非我不完全了解有关 WMI 安全性的某些内容。

可能会有人建议 PSEXEC。我意识到了这一点,并且可能会退回到它。但这似乎是一个可以解决的问题,我不想为此脚本创建对外部可执行文件的依赖项。

我会提到一些我尝试过的事情。

  • 这个家伙says 如果配置文件未加载,可能会出现问题。即使调用用户(域管理员)登录到两个系统,我也会遇到同样的问题。
  • 在此thread 中,Richard Mueller 指出,应该同时指定 impersonationlevel=impersonate 和 authenticationlevel=Pkt。我试过了。还是不行。
  • 在这个page 上,似乎应该在名字对象中指定NT rights。我尝试指定 SeInteractiveLogonRight、SeNetworkLogonRight、SeBackupPrivilege、SeRestorePrivilege、SeDebugPrivilege 和 SeChangeNotifyPrivilege。没有任何效果。

我在谷歌搜索时注意到的一个共同点是,人们在某些目标计算机上看到了这个问题,但在其他计算机上却没有。所以在我看来,根本上缺少的是完成这项任务所需的安全权限的全面分解。棒棒糖将不胜感激地发送给任何能够明确提供此类故障的人!

希望它会增加收视率是徒劳的,我将在此处添加 .net 标签,因为 .net 人员经常处理相同的 WMI 问题并且可能有洞察力。

哇。靠,这不会变成tumbleweed吧?

【问题讨论】:

    标签: .net security vbscript wmi win32-process


    【解决方案1】:

    我遇到了类似的问题。来自的建议 http://social.technet.microsoft.com/Forums/en-US/winserverManagement/thread/305557c4-df94-4d92-85bf-a049c83f120c 帮助了我。很快:确保 LOCAL SERVICE 和 NETWORK SERVICE 帐户被授予“替换进程级令牌”(SeAssignPrimaryTokenPrivilege)。

    【讨论】:

      【解决方案2】:

      在此页面上,似乎应该指定名字对象中所需的 NT 权限。我尝试指定 SeInteractiveLogonRight、SeNetworkLogonRight、SeBackupPrivilege、SeRestorePrivilege、SeDebugPrivilege 和 SeChangeNotifyPrivilege。没有任何效果。

      请注意,如果您尝试使用上面列出的特权字符串(直接来自 NT 权限),那将不起作用。您应该使用WMI Security Settings 的表 6.8 中显示的名字对象权限

      (但是,如果您已经是域管理员并且您只是尝试 cmd.exe echo > 文件,那几乎肯定不是问题)

      【讨论】:

        【解决方案3】:

        您是否在服务器端的日志事件中找到有关错误的更多信息。这有助于诊断访问权限错误,或尝试使用 FileMon 监控访问。

        【讨论】:

          【解决方案4】:

          在 MS Technet 上查看此详细页面,该页面摘自 "Advanced VBScript for Microsoft Windows Administrators" 这本书特别是“第 6 章:远程脚本 由 Don Jones 和 Jeffery Hicks 撰写”,其中包含有关确保为远程脚本正确配置目标设备的详细信息。

          还可以查看 c:\winnt\system32\WBEM\logs\wmiprov.txt 我敢打赌你看到的是这样的:

          (Mon Jun 01 16:57:19 2009.2x) : ***************************************
          (Mon Jun 01 16:57:19 2009.2x) : Could not get pointer to binary resource for file:
          (Mon Jun 01 16:57:19 2009.2x) : C:\WINNT\system32\DRIVERS\wmiacpi.sys[MofResource](Mon Jun 01 16:57:19 2009.2x) : 
          (Mon Jun 01 16:57:19 2009.2x) : ***************************************
          

          【讨论】:

          • 很遗憾,此链接已于 2012 年 5 月 22 日失效
          • @quux:只要取书名并在谷歌上搜索即可。我找到了一些镜像站点,但很难说它们是否是合法出版物,所以我没有更新链接
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-14
          • 1970-01-01
          相关资源
          最近更新 更多