Mengatur tingkat keamanan proses default dengan VBScript
Skrip dapat menggunakan pengaturan autentikasi dan peniruan 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 Namepace Security Descriptors dan Memerlukan Koneksi Terenkripsi ke Namespace.
Dalam kasus yang paling sederhana, skrip dapat menggunakan pengaturan autentikasi dan peniruan 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 perintah winmgmt dengan sakelar /standalonehost dan atur tingkat autentikasi untuk WMI secara umum. Untuk informasi selengkapnya, lihat Mempertahankan Keamanan 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
- Mengubah Pengaturan Peniruan Default Menggunakan VBScript
- Mengatur Tingkat Peniruan Default Menggunakan Registri
- Mengakses Objek SWbemSecurity di VBScript
- Keamanan SWbem
Mengubah Kredensial Autentikasi Default Menggunakan VBScript
Anda dapat mengubah tingkat autentikasi dalam skrip menggunakan string moniker , 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" dari tabel di bawah ini. Misalnya, dalam skrip berikut, tingkat autentikasi diatur ke WbemAuthenticationLevelPktIntegrity.
SetobjWMIService = GetObject( _
"winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")
Tabel berikut ini 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. |
WbemAuthenticationLevelNone 1 |
Moniker: Tidak ada Tidak menggunakan autentikasi. |
WbemAuthenticationLevelConnect 2 |
Moniker: Menyambungkan Mengautentikasi kredensial klien hanya ketika klien membuat hubungan dengan server. |
WbemAuthenticationLevelCall 3 |
Call 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 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 sehingga tidak ada data yang dikembalikan kecuali Anda menggunakan privasi paket (PktPrivacy) dalam 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 Namespace 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 dengan lebih dari satu hop jaringan memerlukan tingkat peniruan yang lebih tinggi daripada yang digunakan WMI. Jika tingkat peniruan tidak cukup, penyedia mungkin menolak permintaan atau memberikan informasi yang tidak lengkap.
Jika Anda tidak mengatur tingkat peniruan baik di moniker atau dengan mengatur SWbemSecurity.ImpersonationLevel pada objek yang dapat diamankan, maka atur tingkat peniruan DCOM default untuk 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 autentikasi 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: Meniru Memungkinkan objek untuk 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 peniruan dalam string moniker saat mendapatkan instans Win32_Process tertentu.
Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")
Untuk informasi selengkapnya, lihat Membuat Aplikasi atau Skrip WMI.
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 yang digunakan Scripting API untuk WMI kecuali ditentukan lain. Jalur berikut mengidentifikasi jalur registri.
\ HKEY_LOCAL_MACHINE PERANGKAT LUNAK\Microsoft\WBEM\Scripting\Tingkat Peniruan Default
Secara default, kunci registri diatur ke 3, menentukan tingkat peniruan identitas. 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_ objek SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath, dan SwbemLocator .
WMI meneruskan pengaturan keamanan objek induk ke turunan objek asli. Oleh karena itu, Anda dapat mengatur tingkat peniruan objek SWbemServices setelah masuk ke panggilan WMI dan API menggunakan objek atau objek yang dibuat darinya, seperti objek jenis SWbemObject.