Aracılığıyla paylaş


VBScript ile varsayılan işlem güvenlik düzeyini ayarlama

Betik varsayılan WMI kimlik doğrulaması ve kimliğe bürünme ayarlarını kullanabilir. Ancak betiğin daha fazla güvenlik içeren bir bağlantıya ihtiyacı olabilir veya şifreli bağlantı gerektiren bir ad alanına bağlanabilir. Daha fazla bilgi için bkz . Ad Alanı Güvenlik Tanımlayıcılarını Ayarlama ve Ad Alanına Şifreli Bağlantı Gerektirme.

En basit durumda, bir betik varsayılan kimlik doğrulaması ve kimliğe bürünme ayarlarını kullanabilir. WMI normalde paylaşılan bir hizmet ana bilgisayarında çalışır ve konaktaki diğer işlemlerle aynı kimlik doğrulamasını paylaşır. WMI işlemini farklı bir kimlik doğrulama düzeyiyle çalıştırmak istiyorsanız, /standalonehost anahtarıyla winmgmt komutuyla WMI'yi çalıştırın ve wmi için kimlik doğrulama düzeyini genel olarak ayarlayın. Daha fazla bilgi için WMI Güvenliğinin Korunmasıkısmına bakın.

Aşağıdaki betik, kimliğe bürünme ve kimlik doğrulama düzeyleri için varsayılan ayarları kullanır.

strComputer = "." 
Set objServices = GetObject("winmgmts:\\" _
    & strComputer & "\root\CIMV2") 
set objProcessSet = objServices.ExecQuery _
     ("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
    WScript.Echo Process.Name
Next

Ayrıca, aşağıdaki örnekte olduğu gibi GetObject çağrısında bir takma ad kullanabilir ve varsayılan güvenlik ayarlarını ayarlayabilirsiniz.

strComputer = "." 
Set objServices = GetObject( _
    "winmgmts:{impersonationLevel=impersonate," _
    & "authenticationLevel=pktPrivacy}!root/cimv2")
set objProcessSet = objServices.ExecQuery _
     ("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
    WScript.Echo Process.Name
Next

Betikte farklı kimliğe bürünme veya kimlik doğrulama düzeyleri ayarlama veya bir bilgisayar için varsayılan değerleri ayarlama hakkında daha fazla bilgi için aşağıdaki konulara bakın:

VBScript Kullanarak Varsayılan Kimlik Doğrulama Kimlik Bilgilerini Değiştirme

Bir betikteki kimlik doğrulama düzeyini, bir tanımlayıcı dizesi ve SWbemLocator ve SWbemSecurity nesneleri kullanarak değiştirebilirsiniz.

Kimlik doğrulama düzeyi, bağlandığınız hedef işletim sisteminin gereksinimlerine göre ayarlanmalıdır. Daha fazla bilgi için bkz. Farklı İşletim Sistemleri Arasında Bağlanma.

Aşağıdaki VBScript kod örneği, "Server1" adlı uzak bir bilgisayardan boş alan verilerini alan bir betikte kimlik doğrulama düzeyinin nasıl değiştirileceğini gösterir.

strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{authenticationLevel=Pkt}!\\" _
    & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
    Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
        "FreeSpace: " & vbTab & objDisk.FreeSpace 
    NextstrComputer = "." 
    Set objServices = GetObject( "winmgmts:{impersonationLevel=impersonate," _
                               & "authenticationLevel=pktPrivacy}!root/cimv2")
    Set objProcessSet = objServices.ExecQuery("SELECT Name FROM Win32_Process",,48)
    For Each Process in objProcessSet
        WScript.Echo Process.Name
    Next
Next

WMI ile betik takma adı bağlantılarında, aşağıdaki tablonun "Takma ad/açıklama" sütununda gösterilen kısa adı kullanın. Örneğin, aşağıdaki betikte kimlik doğrulama düzeyi WbemAuthenticationLevelPktIntegrity olarak ayarlanmıştır.

SetobjWMIService = GetObject( _
    "winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")

Aşağıdaki tabloda, ayarlayabileceğiniz kimlik doğrulama düzeyleri listelenir. Bu düzeyler WbemAuthenticationLevelEnum numaralandırmasında Wbemdisp.tlb içinde tanımlanır.

Ad/değer Açıklama
WbemAuthenticationLevelDefault
0
Takma Ad: Varsayılan
WMI varsayılan Windows kimlik doğrulama ayarını kullanır. Bu, WMI'nin, verileri döndüren sunucunun gerektirdiği düzeyle anlaşmasına olanak tanıyan önerilen ayardır. Ancak, ad alanı şifreleme gerektiriyorsa WbemAuthenticationLevelPktPrivacy kullanın.
WbemAuthenticationLevelNone (Kimlik Doğrulama Seviyesi Yok)
1
Takma Ad: Yok
Kimlik doğrulaması kullanmaz.
WbemAuthenticationLevelConnect
2
Takma Ad: Bağlan
İstemcinin kimlik bilgilerini yalnızca istemci sunucuyla bir ilişki kurduğunda doğrular.
WbemAuthenticationLevelCall
3
Çağrı
Yalnızca sunucu isteği aldığında her çağrının başında kimlik doğrulaması yapar.
WbemAuthenticationLevelPkt
4
Takma Ad: Pkt
Alınan tüm verilerin beklenen istemciden geldiğini doğrular.
WbemAuthenticationLevelPktIntegrity
5
Takma Ad: PktIntegrity
İstemci ve sunucu arasında aktarılan verilerin hiçbirinin değiştirilmediğini doğrular.
WbemAuthenticationLevelPktPrivacy
6
Takma Ad: PktPrivacy
Daha önceki tüm taklit düzeylerini doğrular ve her bir uzak yordam çağrısının argüman değerini şifreler. Bağlandığınız ad alanı şifreli bir bağlantı gerektiriyorsa bu ayarı kullanın.

Başarılı bir çağrı belirlemek için, kimlik doğrulama düzeyini değiştirdikten sonra dönüş değerini denetleyin.

Örneğin, yerel bağlantılar her zaman wbemAuthenticationLevelPktPrivacy kimlik doğrulama düzeyine sahip olduğundan, aşağıdaki örnek yerel bilgisayara bağlandığından kimlik doğrulama düzeyini ayarlayamıyor.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate," _
    & "authenticationLevel=pktPrivacy}!" _
    & "\\" & strComputer & "\root\cimv2")

Bir sağlayıcı, ad alanında, bu ad alanıyla bağlantınızda paket gizliliği (PktPrivacy) kullanmadığınız sürece veri döndürülmemesi için güvenliği ayarlayabilir. Bu, verilerin ağ üzerinden geçerken şifrelenmesini sağlar. Daha düşük bir kimlik doğrulama düzeyi ayarlamaya çalışırsanız erişim reddedildi iletisi alırsınız. Daha fazla bilgi için bkz . WMI Ad Alanlarının Güvenliğini Sağlama.

VBScript Kullanarak Varsayılan Kimliğe Bürünme Düzeylerini Değiştirme

WMI için Betik OLUŞTURMA API'sine çağrı yaptığınızda, WMI'nin kimliğe bürünme düzeyi için sağladığı varsayılan değerleri kullanmanız önerilir. Uzaktan çağrılar ve birden fazla ağ atlamalı bazı sağlayıcılar, WMI'nin kullandığından daha yüksek bir taklit etme düzeyi gerektirir. Kimliğe bürünme düzeyi yeterli değilse, sağlayıcı isteği reddedebilir veya eksik bilgi sağlayabilir.

Kimliğe bürünme düzeyini bir adla veya güvenliği sağlanabilir bir nesnede SWbemSecurity.ImpersonationLevel olarak ayarlamazsanız, işletim sistemi için varsayılan DCOM kimliğe bürünme düzeyini ayarlayın. Kimliğe bürünme düzeyi, bağlandığınız hedef işletim sisteminin gereksinimlerine göre ayarlanmalıdır. Daha fazla bilgi için bkz. Farklı İşletim Sistemleri Arasında Bağlanma.

Aşağıdaki VBScript kod örneği, yukarıda gösterilen betikte kimliğe bürünme düzeyinin nasıl değiştirildiğini gösterir.

strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" _
                              & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
             "FreeSpace: " & vbTab & objDisk.FreeSpace 
Next

Aşağıdaki tabloda WbemImpersonationLevelEnum'da kullanılan kimlik doğrulama düzeyleri listelenir.

Ad/değer Açıklama
wbemImpersonationLevelAnonymous
1
Takma Ad: Anonim
Çağıranın kimlik bilgilerini gizler. WMI çağrıları bu kimliğe bürünme düzeyinde başarısız olabilir.
wbemImpersonationLevelIdentify
2
Takma Ad: Belirle
Nesnelerin çağıranın kimlik bilgilerini sorgulamasına izin verir. WMI çağrıları bu kimliğe bürünme düzeyiyle başarısız olabilir.
wbemImpersonationLevelImpersonate
3
Takma Ad: Başkasıymış Gibi Davranmak
Nesnelerin çağıranın kimlik bilgilerini kullanmasına izin verir. Bu, WMI çağrıları için Betik API'sinde önerilen kimliğe bürünme düzeyidir.
wbemImpersonationLevelDelegate
4
Takma Ad: Temsilci
Nesnelerin diğer nesnelerin çağıranın kimlik bilgilerini kullanmasına izin vermesine izin verir. Bu kimliğe bürünme, WMI çağrıları için Betik API'si ile çalışır, ancak gereksiz bir güvenlik riski oluşturabilir.

Aşağıdaki örnekte, belirli bir Win32_Process örneği alınırken bir takma ad dizesinde kimliğe bürünme özelliğinin nasıl ayarlanacağı gösterilmektedir.

Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")

Daha fazla bilgi için bakınız WMI Uygulaması veya Betiğinin Oluşturulması.

Kayıt Defterini Kullanarak Varsayılan Kimlik Taklidi Seviyesini Ayarlama

Kayıt defterine erişiminiz varsa, varsayılan kimliğe bürünme düzeyi kayıt defteri anahtarını da ayarlayabilirsiniz. Bu anahtar, aksi belirtilmedikçe WMI için Betik Oluşturma API'sinin hangi kimliğe bürünme düzeyini kullandığını belirtir. Aşağıdaki yol kayıt defteri yolunu tanımlar.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Varsayılan Kimliğe Bürünme Düzeyi

Varsayılan olarak kayıt defteri anahtarı, Kimliğe bürünme düzeyini belirterek 3 olarak ayarlanır. Bazı sağlayıcılar daha yüksek bir kimliğe bürünme düzeyi gerektirebilir.

VBScript'te SWbemSecurity Nesnesine Erişme

Kimliğe bürünme düzeyini ayarlamanın diğer yolu, SWbemSecurity güvenlik nesnesidir; bu nesne Security_ özelliği olarak, SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath ve SwbemLocator nesnelerinde görünür.

WMI, bir üst nesnenin güvenlik ayarını özgün nesnenin alt öğelerine geçirir. Bu nedenle, WMI'da oturum açtıktan sonra bir SWbemServices nesnesinin kimliğe bürünme düzeyini ayarlayabilir ve SWbemObject türündeki nesneler gibi bu nesneyi veya ondan oluşturulan nesneleri kullanarak API çağrıları yapabilirsiniz.

Uzak Bilgisayarda WMI'ye Bağlanma

Betik İstemcilerinin Güvenliğini Sağlama