Ustawianie domyślnego poziomu zabezpieczeń procesu za pomocą języka VBScript
Skrypt może używać domyślnego uwierzytelniania usługi WMI i ustawień personifikacji. Jednak skrypt może potrzebować połączenia z większymi zabezpieczeniami lub może nawiązać połączenie z przestrzenią nazw, która wymaga zaszyfrowanego połączenia. Aby uzyskać więcej informacji, zobacz Ustawianie deskryptorów zabezpieczeń przestrzeni nazw oraz Wymaganie szyfrowanego połączenia z przestrzenią nazw.
W najprostszym przypadku skrypt może używać domyślnych ustawień uwierzytelniania i personifikacji. Usługa WMI zwykle działa na hoście usługi udostępnionej i współużytkuje to samo uwierzytelnianie co inne procesy na hoście. Jeśli chcesz uruchomić proces WMI z innym poziomem uwierzytelniania, uruchom usługę WMI przy użyciu winmgmt polecenia z przełącznikiem /standalonehost i ustaw poziom uwierzytelniania dla usługi WMI ogólnie. Aby uzyskać więcej informacji, zobacz Utrzymanie zabezpieczeń WMI.
Poniższy skrypt używa ustawień domyślnych dla poziomów personifikacji i uwierzytelniania.
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
Możesz również użyć monikera w wywołaniu GetObjecti ustawić domyślne ustawienia zabezpieczeń, jak pokazano w poniższym przykładzie.
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
Aby uzyskać więcej informacji na temat ustawiania różnych poziomów personifikacji lub uwierzytelniania w skrypcie lub ustawiania wartości domyślnych dla komputera, zobacz następujące tematy:
- zmienianie domyślnych poświadczeń uwierzytelniania przy użyciu języka VBScript
- Zmienianie domyślnych ustawień zastępowania przy użyciu VBScript
- ustawienie domyślnego poziomu personifikacji przy użyciu rejestru
- uzyskiwanie dostępu do obiektu SWbemSecurity w języku VBScript
- SWbemSecurity
Zmienianie domyślnych poświadczeń uwierzytelniania przy użyciu języka VBScript
Poziom uwierzytelniania w skrypcie można zmienić przy użyciu ciągu moniker oraz obiektów SWbemLocator i SWbemSecurity.
Poziom uwierzytelniania musi być ustawiony zgodnie z wymaganiami docelowego systemu operacyjnego, z którym nawiązujesz połączenie. Aby uzyskać więcej informacji, zobacz Łączenie między różnymi systemami operacyjnymi.
Poniższy przykład kodu VBScript pokazuje, jak zmienić poziom uwierzytelniania w skrypcie, który uzyskuje dane wolnego miejsca z komputera zdalnego o nazwie "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
W przypadku połączeń monikera w skrypcie z usługą WMI, użyj krótkiej nazwy wyświetlanej w kolumnie zatytułowanej "Moniker name/description" w poniższej tabeli. Na przykład w poniższym skrypcie poziom uwierzytelniania jest ustawiony na WbemAuthenticationLevelPktIntegrity.
SetobjWMIService = GetObject( _
"winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")
W poniższej tabeli wymieniono poziomy uwierzytelniania, które można ustawić. Te poziomy są definiowane w pliku Wbemdisp.tlb w wyliczeniu WbemAuthenticationLevelEnum.
Nazwa/wartość | Opis |
---|---|
WbemAuthenticationLevelDefault 0 |
Moniker: wartość domyślna WMI używa domyślnego ustawienia uwierzytelniania systemu Windows. Jest to zalecane ustawienie, które umożliwia usłudze WMI negocjowanie na poziomie wymaganym przez serwer zwracający dane. Jeśli jednak przestrzeń nazw wymaga szyfrowania, użyj WbemAuthenticationLevelPktPrivacy. |
WbemAuthenticationLevelNone 1 |
Moniker: Brak Nie używa uwierzytelniania. |
WbemAuthenticationLevelConnect 2 |
Moniker: Connect Uwierzytelnia poświadczenia klienta tylko wtedy, gdy klient ustanawia relację z serwerem. |
WbemAuthenticationLevelCall 3 |
Nazwać Uwierzytelnia się tylko na początku każdego wywołania, gdy serwer odbiera żądanie. |
WbemAuthenticationLevelPkt 4 |
Moniker: Pkt Uwierzytelnia, że wszystkie odebrane dane pochodzą z oczekiwanego klienta. |
WbemAuthenticationLevelPktIntegrity 5 |
Moniker: PktIntegrity Uwierzytelnia się i sprawdza, czy żadne dane przesyłane między klientem a serwerem nie zostały zmodyfikowane. |
WbemAuthenticationLevelPktPrivacy 6 |
Moniker: PktPrivacy Uwierzytelnia wszystkie poprzednie poziomy personifikacji i szyfruje wartość argumentu każdego zdalnego wywołania procedury. Użyj tego ustawienia, jeśli przestrzeń nazw, z którą nawiązujesz połączenie, wymaga zaszyfrowanego połączenia. |
Aby określić, czy wywołanie było pomyślne, po zmianie poziomu uwierzytelniania sprawdź wartość zwracaną.
Na przykład, ponieważ połączenia lokalne zawsze mają poziom uwierzytelniania wbemAuthenticationLevelPktPrivacy, poniższy przykład nie może ustawić poziomu uwierzytelniania, ponieważ łączy się z komputerem lokalnym.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!" _
& "\\" & strComputer & "\root\cimv2")
Dostawca może ustawić zabezpieczenia w przestrzeni nazw, tak aby żadne dane nie zostały zwrócone, chyba że używasz prywatności pakietów (PktPrivacy) w połączeniu z tą przestrzenią nazw. Dzięki temu dane są szyfrowane w miarę przekraczania sieci. Jeśli spróbujesz ustawić niższy poziom uwierzytelniania, otrzymasz komunikat o odmowie dostępu. Aby uzyskać więcej informacji, zapoznaj się z sekcją Zabezpieczanie przestrzeni nazw usługi WMI.
Zmienianie domyślnych poziomów personifikacji przy użyciu języka VBScript
Podczas wykonywania wywołań do interfejsu API obsługi skryptów dla usługi WMI zaleca się użycie wartości domyślnych zapewnianych przez usługę WMI dla poziomu personifikacji. Połączenia zdalne i niektórzy dostawcy z więcej niż jednym przeskokiem sieciowym wymagają wyższego poziomu podszywania się niż poziom używany przez WMI. Jeśli poziom personifikacji nie jest wystarczający, dostawca może odrzucić żądanie lub podać niekompletne informacje.
Jeśli nie ustawisz poziomu impersonacji w monikerze lub przez ustawienie SWbemSecurity.ImpersonationLevel na zabezpieczanym obiekcie, ustaw domyślny poziom impersonacji ustawień DCOM dla systemu operacyjnego. Poziom personifikacji musi być ustawiony zgodnie z wymaganiami docelowego systemu operacyjnego, z którym nawiązujesz połączenie. Aby uzyskać więcej informacji, zobacz Łączenie między różnymi systemami operacyjnymi.
Poniższy przykład kodu VBScript pokazuje zmianę poziomu personifikacji w tym samym skrypcie pokazanym powyżej.
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
W poniższej tabeli wymieniono poziomy uwierzytelniania w WbemImpersonationLevelEnum, które są używane.
Nazwa/wartość | Opis |
---|---|
wbemImpersonationLevelAnonymous 1 |
Moniker: Anonimowy Ukrywa poświadczenia osoby dzwoniącej. Wywołania usługi WMI mogą zakończyć się niepowodzeniem z tym poziomem personifikacji. |
wbemImpersonationLevelIdentify 2 |
Moniker: Identyfikacja Umożliwia obiektom wykonywanie zapytań dotyczących poświadczeń obiektu wywołującego. Wywołania usługi WMI mogą zakończyć się niepowodzeniem przy tym poziomie maskowania. |
wbemImpersonationLevelImpersonate 3 |
Moniker: Personifikuj Umożliwia obiektom używanie poświadczeń wywołującego. Jest to zalecany poziom nadawania tożsamości dla interfejsu skryptowego API dla wywołań usługi WMI. |
wbemImpersonationLevelDelegate 4 |
Pseudonim: Delegat Umożliwia obiektom zezwolenie innym obiektom na używanie poświadczeń obiektu wywołującego. Ta personifikacja będzie działać z interfejsem API obsługi skryptów dla wywołań usługi WMI, ale może stanowić niepotrzebne zagrożenie bezpieczeństwa. |
W poniższym przykładzie pokazano, jak ustawić personifikację w ciągu moniker podczas uzyskiwania określonego wystąpienia Win32_Process.
Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")
Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji WMI lub skryptu.
Ustawianie domyślnego poziomu personifikacji przy użyciu rejestru
Jeśli masz dostęp do rejestru, możesz również ustawić domyślny klucz rejestru poziomu personifikacji. Ten klucz określa poziom podszywania się, który używa API skryptowe dla usługi WMI, chyba że określono inaczej. Poniższa ścieżka identyfikuje ścieżkę rejestru.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Domyślny Poziom Personifikacji
Domyślnie klucz rejestru jest ustawiony na 3, określając poziom uwierzytelniania. Niektórzy dostawcy mogą wymagać wyższego poziomu podszywania się.
Uzyskiwanie dostępu do obiektu SWbemSecurity w języku VBScript
Innym sposobem ustawienia poziomu uwierzytelnienia jest obiekt zabezpieczeń SWbemSecurity, który jest przedstawiany jako właściwość Security_ obiektów SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath, i SWbemLocator.
WMI przekazuje ustawienie zabezpieczeń obiektu nadrzędnego do obiektów podrzędnych. W związku z tym można ustawić poziom personifikacji obiektu SWbemServices po zalogowaniu się do usługi WMI i wywołań interfejsu API przy użyciu tego obiektu lub obiektów utworzonych na jego podstawie, takich jak obiekty typu SWbemObject.