Udostępnij za pośrednictwem


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

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.

Nawiązywanie Połączenia z Usługą WMI na Komputerze Zdalnym

zabezpieczanie klientów skryptów