Que permissões / direitos um usuário precisa ter acesso WMI em máquinas remotas?

33

Estou escrevendo um serviço de monitoramento que usa o WMI para obter informações de máquinas remotas. Ter direitos de administrador local em todas essas máquinas não é possível por motivos políticos.

Isso é possível? Quais permissões / direitos meu usuário precisa para isso?

    
por jpoh 19.06.2009 / 09:17

7 respostas

31

O seguinte funciona no Windows 2003 R2 SP 2, no Windows Server 2012 R2

  1. Adicione o (s) usuário (s) em questão ao grupo Usuários do Monitor de desempenho
  2. Em Serviços e Aplicativos, acesse a caixa de diálogo de propriedades do Controle WMI (ou execute wmimgmt.msc ). Na guia Segurança, destaque Root/CIMV2 , clique em Segurança; adicione Usuários do Monitor de Desempenho e ative as opções: Enable Account e Remote Enable
  3. Executar dcomcnfg . Nos serviços de componentes > Computadores > Meu computador, na guia Segurança COM da caixa de diálogo Propriedades, clique em "Editar limites" para Access Permissions e Launch and Activation Permissions . Adicione usuários do Monitor de Desempenho e permita acesso remoto, inicialização remota e ativação remota.
  4. Selecione Windows Management Instrumentation em Serviços de componentes > Computadores > Meu computador > DCOM Config e forneça Remote Launch e Remote Activation privileges ao grupo Usuários do Monitor de Desempenho .

Notas:

  • Como alternativa às etapas 3 e 4, pode-se atribuir o usuário ao grupo Usuários COM distribuídos (Testado no Windows Server 2012 R2)
  • Se o usuário precisar de acesso a todos os namespaces, você poderá definir as configurações em 2. no nível Root e reciclar as permissões para os subespaços de nomes por meio da janela Advanced em Security
por 24.07.2009 / 09:42
4

Tudo o que fiz no Windows 8 foi adicionado ao grupo "Usuários de Gerenciamento Remoto" e as solicitações WQL remotas funcionaram.

    
por 31.03.2014 / 15:33
1

Por padrão, somente o grupo Administradores local tem permissões remotas para o WMI. Você terá que personalizar as permissões "Ativar Remoto" do WMI.

    
por 19.06.2009 / 09:41
1

Você também pode conceder "permissões de acesso remoto do DCOM" e / ou "permissões remotas de ativação e ativação do DCOM" dependendo do que exatamente você está tentando fazer. Este artigo do MSDN fornece os procedimentos passo-a-passo.

    
por 19.06.2009 / 13:23
0

O seguinte funcionou para mim em um ambiente de domínio r2 de 2012, embora eu só conseguisse fazer isso por servidor e não por todo o domínio:

1) Adicione o usuário ao Grupo de Usuários do Log de Desempenho. 2) Execute wmimgmt.msc, clique com o botão direito do mouse em "WMI Control (LOCAL), vá para a guia Security e conceda ao usuário apropriado" Enable Account "e" Remote Enable "no namespace desejado (geralmente CIMV2).

Se eu conseguir fazê-lo para todo o domínio, voltarei e atualizarei.

    
por 04.05.2017 / 11:54
0

Com base na resposta escolhida, modifiquei o script da Microsoft para definir a segurança do WMI. Meu usuário de teste era um usuário de domínio não administrativo que era um membro dos "Usuários de Gerenciamento Remoto" no sistema local por motivos não relacionados a esse problema. Depois de conceder ao meu usuário as permissões EnableAccount, RemoteEnable e ExecuteMethods no namespace de destino, consegui acessar o WMI.

Então, eu não adicionei meu usuário aos grupos locais Usuários do Monitor de Desempenho ou Usuários COM Distribuídos .

Algumas notas sobre o roteiro:

  1. Você deve especificar o caminho completo do namespace. No meu caso, o namespace era Root / Microsoft / SqlServer
  2. A herança estava errada. Porque não há objetos folha você não pode usar $OBJECT_INHERIT_ACE_FLAG
  3. Eu me livrei da função incorporada porque ela era muito pequena e só era usada uma vez.

O script está abaixo. Eu nomeei Set-WMINamespaceSsecurity.ps1

Param ([Parameter(Mandatory=$true,Position=0)] [string]$Namespace,
       [Parameter(Mandatory=$true,Position=1)] [ValidateSet("Add","Remove")] [string]$Operation,
       [Parameter(Mandatory=$true,Position=2)] [string] $Account,
       [Parameter(Mandatory=$false,Position=3)] [ValidateSet("EnableAccount","ExecuteMethods","FullWrite","PartialWrite","ProviderWrite","RemoteEnable","ReadSecurity","WriteSecurity")] [string[]] $Permissions=$null,
       [Parameter(Mandatory=$false)] [switch]$AllowInherit,
       [Parameter(Mandatory=$false)] [switch]$Deny,
       [Parameter(Mandatory=$false)] [string]$ComputerName=".",
       [Parameter(Mandatory=$false)] [System.Management.Automation.PSCredential]$Credential=$null)

$OBJECT_INHERIT_ACE_FLAG    = 0x1
$CONTAINER_INHERIT_ACE_FLAG = 0x2
$ACCESS_ALLOWED_ACE_TYPE    = 0x0
$ACCESS_DENIED_ACE_TYPE     = 0x1

$WBEM_ENABLE            = 0x01
$WBEM_METHOD_EXECUTE    = 0x02
$WBEM_FULL_WRITE_REP    = 0x04
$WBEM_PARTIAL_WRITE_REP = 0x08
$WBEM_WRITE_PROVIDER    = 0x10
$WBEM_REMOTE_ACCESS     = 0x20
$WBEM_RIGHT_SUBSCRIBE   = 0x40
$WBEM_RIGHT_PUBLISH     = 0x80
$READ_CONTROL           = 0x20000
$WRITE_DAC              = 0x40000
$WBEM_S_SUBJECT_TO_SDS  = 0x43003

$ErrorActionPreference = "Stop"

$InvokeParams=@{Namespace=$Namespace;Path="__systemsecurity=@";ComputerName=$ComputerName}
if ($PSBoundParameters.ContainsKey("Credential")) { $InvokeParams+= @{Credential=$Credential}}

$output = Invoke-WmiMethod @InvokeParams -Name "GetSecurityDescriptor"
if ($output.ReturnValue -ne 0) { throw "GetSecurityDescriptor failed:  $($output.ReturnValue)" }

$ACL = $output.Descriptor

if ($Account.Contains('\')) {
  $Domain=$Account.Split('\')[0]
  if (($Domain -eq ".") -or ($Domain -eq "BUILTIN")) { $Domain = $ComputerName }
  $AccountName=$Account.Split('\')[1]
}
elseif ($Account.Contains('@')) {
  $Somain=$Account.Split('@')[1].Split('.')[0]
  $AccountName=$Account.Split('@')[0]
}
else {
  $Domain = $ComputerName
  $AccountName = $Account
}

$GetParams = @{Class="Win32_Account" ;Filter="Domain='$Domain' and Name='$AccountName'"}
$Win32Account = Get-WmiObject @GetParams
if ($Win32Account -eq $null) { throw "Account was not found: $Account" }

# Add Operation
if ($Operation -eq "Add") {
  if ($Permissions -eq $null) { throw "Permissions must be specified for an add operation" }

  # Construct AccessMask
  $AccessMask=0
  $WBEM_RIGHTS_FLAGS=$WBEM_ENABLE,$WBEM_METHOD_EXECUTE,$WBEM_FULL_WRITE_REP,$WBEM_PARTIAL_WRITE_REP,$WBEM_WRITE_PROVIDER,$WBEM_REMOTE_ACCESS,$READ_CONTROL,$WRITE_DAC
  $WBEM_RIGHTS_STRINGS="EnableAccount","ExecuteMethods","FullWrite","PartialWrite","ProviderWrite","RemoteEnable","ReadSecurity","WriteSecurity"
  $PermissionTable=@{}
  for ($i=0; $i -lt $WBEM_RIGHTS_FLAGS.Count; $i++) { $PermissionTable.Add($WBEM_RIGHTS_STRINGS[$i].ToLower(), $WBEM_RIGHTS_FLAGS[$i]) }
  foreach ($Permission in $Permissions) { $AccessMask+=$PermissionTable[$Permission.ToLower()] }

  $ACE=(New-Object System.Management.ManagementClass("Win32_Ace")).CreateInstance()
  $ACE.AccessMask=$AccessMask
  # Do not use $OBJECT_INHERIT_ACE_FLAG.  There are no leaf objects here.
  if ($AllowInherit.IsPresent) { $ACE.AceFlags=$CONTAINER_INHERIT_ACE_FLAG }
  else { $ACE.AceFlags=0 }

  $Trustee=(New-Object System.Management.ManagementClass("Win32_Trustee")).CreateInstance()
  $Trustee.SidString = $Win32Account.SID
  $ACE.Trustee=$Trustee

  if ($Deny.IsPresent) { $ACE.AceType = $ACCESS_DENIED_ACE_TYPE } else { $ACE.AceType = $ACCESS_ALLOWED_ACE_TYPE }
  $ACL.DACL+=$ACE
}
#Remove Operation
else {
  if ($Permissions -ne $null) { Write-Warning "Permissions are ignored for a remove operation" }
  [System.Management.ManagementBaseObject[]]$newDACL = @()
  foreach ($ACE in $ACL.DACL) {
    if ($ACE.Trustee.SidString -ne $Win32Account.SID) { $newDACL+=$ACE }
  }
  $ACL.DACL = $newDACL
}

$SetParams=@{Name="SetSecurityDescriptor"; ArgumentList=$ACL}+$InvokeParams

$output = Invoke-WmiMethod @SetParams
if ($output.ReturnValue -ne 0) { throw "SetSecurityDescriptor failed: $($output.ReturnValue)" }
    
por 14.08.2018 / 20:57
-1

Fizemos isso para o PRTG: Criamos um novo usuário de domínio: Criado um GPO Dit para colocar seu usuário no grupo "Performnce Log Users" e usei um script PowerShell para adicionar esse usuário ao Controle WMI. obrigado a:

link

    
por 19.05.2017 / 14:32