Bagikan melalui


Mengatur tingkat keamanan proses default dengan VBScript

Skrip dapat menggunakan pengaturan autentikasi dan impersonasi WMI default. Namun, skrip mungkin memerlukan koneksi dengan lebih banyak keamanan atau dapat terhubung ke namespace layanan yang memerlukan koneksi terenkripsi. Untuk informasi selengkapnya, lihat Mengatur Deskriptor Keamanan Namespace dan Memerlukan Koneksi Terenkripsi ke Namespace.

Dalam kasus paling sederhana, skrip dapat menggunakan pengaturan autentikasi dan peniruan identitas default. WMI biasanya berjalan di host layanan bersama dan berbagi autentikasi yang sama dengan proses lain di host. Jika Anda ingin menjalankan proses WMI dengan tingkat autentikasi yang berbeda, jalankan WMI dengan perintahwinmgmtdengan sakelar /standalonehost dan atur tingkat autentikasi untuk WMI umumnya. Untuk informasi selengkapnya, lihat MempertahankanKeamanan WMI .

Skrip berikut menggunakan pengaturan default untuk tingkat peniruan dan autentikasi.

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

Anda juga dapat menggunakan moniker dalam panggilan ke GetObject, dan mengatur pengaturan keamanan default, seperti dalam contoh berikut.

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

Untuk informasi selengkapnya tentang mengatur tingkat peniruan atau autentikasi yang berbeda dalam skrip, atau untuk mengatur nilai default untuk komputer, lihat topik berikut ini:

Mengubah Kredensial Autentikasi Default Menggunakan VBScript

Anda dapat mengubah tingkat autentikasi dalam skrip menggunakan moniker string, dan objek SWbemLocator dan SWbemSecurity .

Tingkat autentikasi harus ditetapkan sesuai dengan persyaratan sistem operasi target yang Anda sambungkan. Untuk informasi selengkapnya, lihat Menyambungkan Antara Sistem Operasi yang Berbeda.

Contoh kode VBScript berikut menunjukkan cara mengubah tingkat autentikasi dalam skrip yang mendapatkan data ruang kosong dari komputer jarak jauh bernama "Server1".

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

Dalam koneksi moniker skrip ke WMI, gunakan nama pendek yang ditampilkan di kolom "Nama/deskripsi Moniker" pada tabel di bawah ini. Misalnya, dalam skrip berikut, tingkat autentikasi diatur ke WbemAuthenticationLevelPktIntegrity.

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

Tabel berikut mencantumkan tingkat autentikasi yang bisa Anda atur. Tingkat-tingkat ini didefinisikan dalam Wbemdisp.tlb dalam enumerasi WbemAuthenticationLevelEnum.

Nama/nilai Deskripsi
WbemAuthenticationLevelDefault
0
Moniker: Default
WMI menggunakan pengaturan autentikasi Windows default. Ini adalah pengaturan yang direkomendasikan yang memungkinkan WMI untuk bernegosiasi ke tingkat yang diperlukan oleh server yang mengembalikan data. Namun, jika namespace memerlukan enkripsi, gunakan WbemAuthenticationLevelPktPrivacy.
WbemAuthenticationLevelTidakAda
1
Moniker: Tidak ada
Tidak menggunakan autentikasi.
WbemAuthenticationLevelConnect
2
Moniker: Sambungkan
Mengautentikasi kredensial klien hanya ketika klien membuat hubungan dengan server.
WbemAuthenticationLevelCall
3
Panggil
Mengautentikasi hanya di awal setiap panggilan saat server menerima permintaan.
WbemAuthenticationLevelPkt
4
Moniker: Pkt
Mengautentikasi bahwa semua data yang diterima berasal dari klien yang diharapkan.
WbemAuthenticationLevelPktIntegrity
5
Moniker: PktIntegrity
Mengautentikasi dan memverifikasi bahwa tidak ada data yang ditransfer antara klien dan server yang telah dimodifikasi.
WbemAuthenticationLevelPktPrivacy
6
Moniker: PktPrivacy
Mengautentikasi semua tingkat peniruan sebelumnya dan mengenkripsi nilai argumen dari setiap panggilan prosedur jarak jauh. Gunakan pengaturan ini jika namespace layanan yang Anda sambungkan memerlukan koneksi terenkripsi.

Untuk menentukan panggilan yang berhasil, periksa nilai pengembalian setelah Anda mengubah tingkat autentikasi.

Misalnya, karena koneksi lokal selalu memiliki tingkat autentikasi wbemAuthenticationLevelPktPrivacy, contoh berikut gagal mengatur tingkat autentikasi karena terhubung ke komputer lokal.

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

Penyedia dapat mengatur keamanan pada namespace layanan sehingga tidak ada data yang dikembalikan kecuali Anda menggunakan privasi paket (PktPrivacy) di koneksi Anda ke namespace tersebut. Ini memastikan bahwa data dienkripsi saat melintasi jaringan. Jika Anda mencoba mengatur tingkat autentikasi yang lebih rendah, Anda akan mendapatkan pesan akses ditolak. Untuk informasi selengkapnya, lihat Mengamankan Ruang Nama WMI.

Mengubah Tingkat Peniruan Default Menggunakan VBScript

Saat Anda melakukan panggilan ke Scripting API untuk WMI, disarankan agar Anda menggunakan default yang disediakan WMI untuk tingkat peniruan. Panggilan jarak jauh dan beberapa penyedia yang menggunakan lebih dari satu kali lompatan jaringan memerlukan tingkat impersonasi yang lebih tinggi daripada yang digunakan oleh WMI. Jika tingkat peniruan tidak cukup, penyedia mungkin menolak permintaan atau memberikan informasi yang tidak lengkap.

Jika Anda tidak mengatur tingkat peniruan dalam moniker atau dengan mengatur SWbemSecurity.ImpersonationLevel untuk sebuah objek yang aman, maka aturlah tingkat peniruan DCOM default pada sistem operasi. Tingkat peniruan harus ditetapkan sesuai dengan persyaratan sistem operasi target yang Anda sambungkan. Untuk informasi selengkapnya, lihat Menyambungkan Antara Sistem Operasi yang Berbeda.

Contoh kode VBScript berikut menunjukkan perubahan tingkat peniruan dalam skrip yang sama yang ditunjukkan di atas.

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

Tabel berikut mencantumkan tingkat otentikasi di WbemImpersonationLevelEnum yang digunakan.

Nama/nilai Deskripsi
wbemImpersonationLevelAnonymous
1
Moniker: Anonim
Menyembunyikan kredensial pemanggil. Panggilan ke WMI mungkin gagal dengan tingkat peniruan ini.
wbemImpersonationLevelIdentify
2
Moniker: Identifikasi
Memungkinkan objek untuk mengkueri kredensial pemanggil. Panggilan ke WMI mungkin gagal dengan tingkat peniruan ini.
wbemImpersonationLevelImpersonate
3
Moniker: Julukan Impersonate
Memungkinkan objek menggunakan kredensial pemanggil. Ini adalah tingkat peniruan yang direkomendasikan untuk Scripting API untuk panggilan WMI.
wbemImpersonationLevelDelegate
4
Moniker: Delegasi
Memungkinkan objek untuk mengizinkan objek lain menggunakan kredensial pemanggil. Peniruan ini akan berfungsi dengan Scripting API untuk panggilan WMI tetapi dapat merupakan risiko keamanan yang tidak perlu.

Contoh berikut menunjukkan cara mengatur impersonasi pada string moniker ketika mendapatkan instans tertentu Win32_Process.

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

Untuk informasi selengkapnya, lihat Membuat Aplikasi WMI atau Skrip.

Mengatur Tingkat Peniruan Default Menggunakan Registri

Jika Anda memiliki akses ke registri, Anda juga dapat mengatur kunci registri tingkat peniruan default. Kunci ini menentukan tingkat peniruan mana yang digunakan oleh Scripting API untuk WMI, kecuali ditentukan sebaliknya. Jalur berikut mengidentifikasi jalur registri.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Tingkat Peniruan Default

Secara default, kunci registri diatur ke 3, menentukan tingkat peniruan identitas Impersonate. Beberapa penyedia mungkin memerlukan tingkat peniruan yang lebih tinggi.

Mengakses Objek SWbemSecurity di VBScript

Cara lain Anda dapat mengatur tingkat peniruan adalah dari objek keamanan SWbemSecurity, yang muncul sebagai properti Security_ dari SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath, dan SwbemLocator objek.

WMI meneruskan pengaturan keamanan objek induk ke turunan objek asli. Oleh karena itu, Anda dapat mengatur tingkat peniruan objek SWbemServices setelah masuk ke WMI dan melakukan panggilan API menggunakan objek ini atau objek yang dibuat darinya, seperti objek jenis SWbemObject.

Menyambungkan ke WMI pada komputer jarak jauh

Mengamankan Klien Pemrograman Skrip