দূরবর্তী যন্ত্রগুলিতে কোন ব্যবহারকারীর ডাব্লুএমআই অ্যাক্সেস থাকা দরকার?


33

আমি একটি মনিটরিং পরিষেবা লিখছি যা দূরবর্তী যন্ত্র থেকে তথ্য পেতে ডাব্লুএমআই ব্যবহার করে। এই সমস্ত মেশিনে স্থানীয় প্রশাসকের অধিকার থাকা রাজনৈতিক কারণে সম্ভব নয়।

এটা কি সম্ভব? এর জন্য আমার ব্যবহারকারীর কী অনুমতি / অধিকারের প্রয়োজন?

উত্তর:


31

নিম্নলিখিত উইন্ডো 2003 আর 2 এসপি 2, উইন্ডোজ সার্ভার 2012 আর 2 এ কাজ করে

  1. পারফরম্যান্স মনিটর ব্যবহারকারীদের গোষ্ঠীতে প্রশ্নে থাকা ব্যবহারকারী (গুলি) যুক্ত করুন
  2. পরিষেবাদি এবং অ্যাপ্লিকেশনগুলির আওতায় ডাব্লুএমআই কন্ট্রোলের (অথবা চালানো wmimgmt.msc) বৈশিষ্ট্যগুলি ডায়ালগটি উপস্থিত করুন । সুরক্ষা ট্যাবে, হাইলাইট করুন Root/CIMV2, সুরক্ষা ক্লিক করুন; যোগ পারফরমেন্স মনিটর ব্যবহারকারীরা এবং বিকল্প সক্রিয় করা হয়: Enable AccountএবংRemote Enable
  3. চালান dcomcnfg। কম্পোনেন্ট সার্ভিস> কম্পিউটার> আমার কম্পিউটার এ প্রোপার্টি এর এর COM নিরাপত্তা ট্যাবে ক্লিক ডায়ালগ উভয়ের জন্য "সম্পাদনা সীমা" Access Permissionsএবং Launch and Activation Permissions। পারফরম্যান্স মনিটর ব্যবহারকারীদের যুক্ত করুন এবং দূরবর্তী অ্যাক্সেস, রিমোট লঞ্চ এবং দূরবর্তী অ্যাক্টিভেশনকে অনুমতি দিন।
  4. কম্পোনেন্ট সার্ভিসেস> কম্পিউটার> মাই কম্পিউটার> ডিসিওএম কনফিগারেশনের অধীনে উইন্ডোজ ম্যানেজমেন্ট ইনস্ট্রুমেন্টেশন নির্বাচন করুন এবং পারফরম্যান্স মনিটর ব্যবহারকারী গ্রুপকে দিন Remote Launchএবং Remote Activationসুবিধা দিন ।

নোট:

  • 3 এবং 4 পদক্ষেপের বিকল্প হিসাবে, কেউ ব্যবহারকারীকে ডিস্ট্রিবিউটড সিওএম ব্যবহারকারীদের (উইন্ডোজ সার্ভার 2012 আর 2 তে পরীক্ষিত) গ্রুপে নিয়োগ করতে পারেন
  • ব্যবহারকারীর যদি সমস্ত নেমস্পেসে অ্যাক্সেসের প্রয়োজন হয় তবে আপনি Rootস্তরগুলিতে ২ এ সেটিংস সেট করতে পারেন এবং Advancedউইন্ডোতে সাব-নেমস্পেসে অনুমতিগুলি পুনরাবৃত্তি করতে পারেনSecurity

1
আমি 2 এবং 3 পদক্ষেপগুলি খুঁজে পেয়েছি যদি আপনি ব্যবহারকারীকে বিতরণকারী COM ব্যবহারকারীদের সাথে যুক্ত করেন তবে এটি প্রয়োজনীয় নয়।
নেক্সাস

উইনএক্সপি এবং উইন on এ কাজ করে, আমি "বিতরণকারী সিওএম ব্যবহারকারীগণ" গ্রুপটি যুক্ত করতে পারিনি - সম্ভবত এই গোষ্ঠীটি কেবল সার্ভারে অ্যাক্সেসযোগ্য? অনুমতিগুলিতে যুক্ত করার চেষ্টা করার পরে নাম অনুসন্ধানের সময় এটি সমাধান হবে না। এছাড়াও, আমি দেখতে পেয়েছি যে আমাকে "রুট" পাশাপাশি "রুট / সিআইএমভি 2" তে ডাব্লুএমআইয়ের জন্য অনুমতি নির্ধারণ করতে হয়েছিল এবং আমাকে উন্নত অনুমতিতে যেতে হবে এবং নাম-স্থানের পাশাপাশি নামের জায়গার অনুমতিও প্রয়োগ করতে হয়েছিল।
শ্যানন ওয়াগনার

উইন্ডোজ 8 এর জন্যও কাজ করে! এছাড়াও, কেউ কীভাবে পাওয়ারশেল বা অন্য কোনও শেল থেকে একই কাজ করতে জানেন?
Bunyk

1
ক্ষেত্রে যে আপনি একটি ব্যবহারকারী সকল নামস্থান অ্যাক্সেস করতে সক্ষম হতে চান, আপনি করার অনুমতি প্রদান করতে পারেন রুট , রুট নির্বাচন করে এবং সমস্ত উপ-নামব্যবধান খোলার সিকিউরিটি তারপর উন্নত এবং পুনরাবৃত্তির স্থাপনের। ডিফল্টভাবে এই সেটিংসটি কেবলমাত্র নির্বাচিত অবজেক্টে প্রয়োগ হয় এবং ক্যাসকেড হয় না
টমাস

এটি এমএসক্লাস্টার নেমস্পেসের জন্য কাজ করে না
জন

4

উইন্ডোজ 8 এ আমি যা কিছু করেছি তা "রিমোট ম্যানেজমেন্ট ব্যবহারকারীদের" গ্রুপে ব্যবহারকারী যুক্ত হয়েছিল এবং দূরবর্তী ডাব্লুএইকিউএল অনুরোধগুলি কাজ করেছিল।


1

ডিফল্টরূপে, শুধুমাত্র স্থানীয় প্রশাসক গোষ্ঠীর ডাব্লুএমআই-তে দূরবর্তী অনুমতি রয়েছে। আপনাকে ডাব্লুএমআই "রিমোট সক্ষম" অনুমতিগুলি কাস্টমাইজ করতে হবে।


1

আপনি ঠিক কী করার চেষ্টা করছেন তার উপর নির্ভর করে আপনাকে "ডিসিওএম রিমোট অ্যাক্সেস অনুমতি" এবং / অথবা "ডিসিওএম রিমোট লঞ্চ এবং অ্যাক্টিভেশন অনুমতিগুলি "ও দিতে হতে পারে। এই এমএসডিএন নিবন্ধটি ধাপে ধাপে পদ্ধতি দেয়।


0

নিম্নলিখিতটি আমার জন্য একটি 2012 আর 2 ডোমেন পরিবেশে কাজ করেছে যদিও আমি কেবল এটি সার্ভারে না শুধুমাত্র সম্পূর্ণ ডোমেনের জন্য পরিচালিত হয়েছিল:

1) পারফরম্যান্স লগ ব্যবহারকারী গ্রুপে ব্যবহারকারী যুক্ত করুন। ২) wmimgmt.msc চালান, "ডাব্লুএমআই কন্ট্রোল (লোকাল), সুরক্ষা ট্যাবটিতে ডান ক্লিক করুন এবং পছন্দসই নামফলকটিতে যথাযথ ব্যবহারকারী" অ্যাকাউন্ট সক্ষম করুন "এবং" রিমোট সক্ষম "মঞ্জুরি দিন (সাধারনত সিআইএমভি 2)।

আমি যদি পুরো ডোমেনটির জন্য এটি পরিচালনা করি তবে আমি ফিরে এসে আপডেট করব।


0

নির্বাচিত উত্তরের ভিত্তিতে আমি ডাব্লুএমআই সুরক্ষা সেট করতে মাইক্রোসফ্ট থেকে স্ক্রিপ্টটি পরিবর্তন করেছি। আমার পরীক্ষার ব্যবহারকারী একজন প্রশাসনিক ডোমেন ব্যবহারকারী ছিলেন যা এই সমস্যা সম্পর্কিত নয় কারণে স্থানীয় সিস্টেমে "রিমোট ম্যানেজমেন্ট ব্যবহারকারী" এর সদস্য ছিলেন । আমার ব্যবহারকারীকে টার্গেট নেমস্পেসে সক্ষমযোগ্য অ্যাকাউন্ট, রিমোটএনেবল এবং এক্সিকিউটমেথডস অনুমতি দেওয়ার পরে, আমি ডাব্লুএমআই অ্যাক্সেস করতে সক্ষম হয়েছি।

তাই, আমি না না আমার ব্যবহারকারী যোগ পারফরমেন্স মনিটর ব্যবহারকারীরা বা ডিস্ট্রিবিউটেড এর COM ব্যবহারকারীরা স্থানীয় গোষ্ঠী।

লিপি সংক্রান্ত কয়েকটি নোট:

  1. আপনাকে অবশ্যই নেমস্পেসের পুরো পথ নির্দিষ্ট করতে হবে। আমার ক্ষেত্রে, নেমস্পেসটি ছিল রুট / মাইক্রোসফ্ট / স্কেল সার্ভার
  2. উত্তরাধিকার ভুল ছিল। কারণ কোনও পাতাগুলি নেই যা আপনি ব্যবহার করতে পারবেন না$OBJECT_INHERIT_ACE_FLAG
  3. আমি এম্বেড করা ফাংশন থেকে মুক্তি পেয়েছি কারণ এটি খুব ছোট ছিল এবং এটি কেবল একবার ব্যবহার করা হয়েছিল।

স্ক্রিপ্টটি নীচে রয়েছে। আমি এর নাম সেট-ডাব্লুএমআইএনমেস্পেসসিকিউরিটি.পিএস 1 রেখেছি

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)" }

-1

আমরা এটি পিআরটিজির জন্য করেছি: আমরা একটি নতুন ডোমেন ব্যবহারকারী তৈরি করেছি: তার ব্যবহারকারীকে "পারফরমেন্স লগ ব্যবহারকারী" গ্রুপে রাখার জন্য একটি জিপিও ডিট তৈরি করেছি এবং এই ব্যবহারকারীকে ডাব্লুএমআই নিয়ন্ত্রণে যুক্ত করতে পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করেছি। ধন্যবাদ:

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


আপনার উত্তরগুলিতে সরাসরি সম্পর্কিত তথ্য অন্তর্ভুক্ত করুন। পোস্ট করা উত্তরগুলি একা দাঁড়াতে সক্ষম হতে হবে, এবং কেবলমাত্র রেফারেন্সের জন্য লিঙ্কগুলি ব্যবহার করতে হবে।
কোরি নটসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.