Какие права /права пользователю нужен доступ WMI на удаленных компьютерах?

Я пишу службу мониторинга, которая использует WMI для получения информации с удаленных компьютеров. Наличие местных прав администратора на всех этих машинах невозможно по политическим причинам.

Возможно ли это? Какие права /права требуется моему пользователю для этого?

29 голосов | спросил jpoh 19 J0000006Europe/Moscow 2009, 11:17:49

6 ответов


30

Следующие действия относятся к Windows 2003 R2 SP 2, Windows Server 2012 R2

  1. Добавьте пользователей (пользователей) в группу Пользователи монитора производительности
  2. В разделе «Службы и приложения» откройте диалоговое окно свойств WMI Control (или запустите wmimgmt.msc). На вкладке «Безопасность» выделите Root/CIMV2, нажмите «Безопасность»; добавьте Пользователи монитора производительности и включите параметры: Enable Account и Remote Enable
  3. Запустите dcomcnfg. В службах компонентов> Компьютеры> Мой компьютер, на вкладке «Безопасность COM» диалогового окна «Свойства» нажмите «Изменить ограничения» для обоих Access Permissions и Launch and Activation Permissions. Добавьте пользователей монитора производительности и разрешите удаленный доступ, удаленный запуск и удаленную активацию.
  4. Выберите инструмент управления Windows в разделе «Службы компонентов»> Компьютеры> Мой компьютер> DCOM Config и предоставить привилегии Remote Launch и Remote Activation для Пользователи монитора производительности .

Примечания:

  • В качестве альтернативы шагам 3 и 4 можно назначить пользователя группе Распределенные пользователи COM (протестировано на Windows Server 2012 R2)
  • Если пользователю нужен доступ ко всем пространствам имен, вы можете установить настройки в 2. на уровне Root и перезаписать разрешений на подэлементы с помощью окна Advanced в Security
ответил jpoh 24 J000000Friday09 2009, 11:42:40
3

Все, что я делал в Windows 8, было добавлено пользователем для группировки «Пользователи удаленного управления» и работали удаленные запросы WQL.

ответил Bunyk 31 MarpmMon, 31 Mar 2014 17:33:59 +04002014-03-31T17:33:59+04:0005 2014, 17:33:59
1

По умолчанию только группа локальных администраторов имеет удаленные разрешения для WMI. Вам нужно будет настроить разрешения WMI «Удаленное разрешение».

ответил ThatGraemeGuy 19 J0000006Europe/Moscow 2009, 11:41:57
1

Возможно, вам также придется предоставить «разрешения удаленного доступа DCOM» и /или «разрешения удаленного запуска и активации DCOM» в зависимости от того, что именно вы пытаетесь сделать. В этой статье MSDN приведены пошаговые процедуры.

ответил KevinH 19 J0000006Europe/Moscow 2009, 15:23:34
0

Основываясь на выбранном ответе, я изменил сценарий из Microsoft, чтобы установить защиту WMI. Мой тестовый пользователь был неадминистративным доменным пользователем, который был членом «пользователей удаленного управления» в локальной системе по причинам , связанным с этой проблемой. Предоставив моим пользователям разрешения EnableAccount, RemoteEnable и ExecuteMethods в целевом пространстве имен, я смог получить доступ к WMI.

Итак, я сделал not добавить моего пользователя в локальные группы Производительность монитора пользователей или . .

Несколько примечаний относительно скрипта:

  1. Необходимо указать полный путь пространства имен. В моем случае пространство имен было Root /Microsoft /SqlServer
  2. Наследование было неправильным. Поскольку нет объектов листа, вы не можете использовать $OBJECT_INHERIT_ACE_FLAG
  3. Я избавился от встроенной функции, потому что она была слишком маленькой, и она использовалась только один раз.

Скрипт ниже. Я назвал его 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"

[email protected]{Namespace=$Namespace;Path="[email protected]";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"
  [email protected]{}
  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
}

[email protected]{Name="SetSecurityDescriptor"; ArgumentList=$ACL}+$InvokeParams

$output = Invoke-WmiMethod @SetParams
if ($output.ReturnValue -ne 0) { throw "SetSecurityDescriptor failed: $($output.ReturnValue)" }
ответил Slogmeister Extraordinaire 14 PM00000090000001831 2018, 21:57:18
-1

Мы сделали это для PRTG: Мы создали нового пользователя домена: Создал объект GPO Dit, чтобы поместить своего пользователя в группу «Пользователи журнала выполнения», и использовал сценарий powershell, чтобы добавить этого пользователя в WMI Control. благодаря:

https://live.paloaltonetworks.com/t5/Management-Articles/PowerShell-Script-for-setting-WMI-Permissions-for-User-ID/ta-p/53646

ответил Martijn van Dijck 19 Maypm17 2017, 15:32:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132