Condividi tramite


Impostare il livello di sicurezza del processo predefinito con VBScript

Uno script può usare le impostazioni di autenticazione e rappresentazione WMI predefinite. Tuttavia, lo script potrebbe richiedere una connessione con maggiore sicurezza o può connettersi a uno spazio dei nomi che richiede una connessione crittografata. Per ulteriori informazioni, vedere Impostazione dei descrittori di sicurezza dello spazio dei nomi e Richiedere una connessione crittografata a uno spazio dei nomi.

Nel caso più semplice, uno script può usare le impostazioni di autenticazione e rappresentazione predefinite. WMI viene in genere eseguito in un host del servizio condiviso e condivide la stessa autenticazione di altri processi nell'host. Se si vuole eseguire il processo WMI con un livello di autenticazione diverso, eseguire WMI con il comandowinmgmtcon l'opzione /standalonehost e impostare in genere il livello di autenticazione per WMI. Per altre informazioni, vedere Gestione della sicurezza WMI.

Lo script seguente usa le impostazioni predefinite per la rappresentazione e i livelli di autenticazione.

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

È anche possibile usare un moniker in una chiamata a GetObjecte impostare le impostazioni di sicurezza predefinite, come nell'esempio seguente.

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

Per altre informazioni sull'impostazione di diversi livelli di rappresentazione o autenticazione in uno script o sull'impostazione dei valori predefiniti per un computer, vedere gli argomenti seguenti:

Modifica delle credenziali di autenticazione predefinite con VBScript

È possibile modificare il livello di autenticazione in uno script usando una stringa di moniker e gli oggetti SWbemLocatore SWbemSecurity.

Il livello di autenticazione deve essere impostato in base ai requisiti del sistema operativo di destinazione a cui ci si connette. Per ulteriori informazioni, vedere Collegamento tra sistemi operativi diversi.

Nell'esempio di codice VBScript seguente viene illustrato come modificare il livello di autenticazione in uno script che ottiene i dati dello spazio libero da un computer remoto denominato "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

Nelle connessioni di moniker script a WMI usare il nome breve visualizzato nella colonna "Nome/descrizione moniker" della tabella seguente. Nello script seguente, ad esempio, il livello di autenticazione viene impostato su WbemAuthenticationLevelPktIntegrity.

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

Nella tabella seguente sono elencati i livelli di autenticazione che è possibile impostare. Questi livelli sono definiti in Wbemdisp.tlb nell'enumerazione WbemAuthenticationLevelEnum.

Nome/valore Descrizione
WbemAuthenticationLevelDefault
0
Moniker: impostazione predefinita
WMI usa l'impostazione di autenticazione predefinita di Windows. Questa è l'impostazione consigliata che consente a WMI di negoziare il livello richiesto dal server che restituisce dati. Tuttavia, se lo spazio dei nomi richiede la crittografia, usare WbemAuthenticationLevelPktPrivacy.
WbemAuthenticationLevelNone
1
Moniker: Nessuno
Non usa alcuna autenticazione.
WbemAuthenticationLevelConnect
2
Moniker: Connetti
Autentica le credenziali del client solo quando il client stabilisce una relazione con il server.
WbemAuthenticationLevelCall
3
Chiamare
Autentica solo all'inizio di ogni chiamata quando il server riceve la richiesta.
WbemAuthenticationLevelPkt
4
Moniker: Pkt
Autentica che tutti i dati ricevuti provengono dal client previsto.
WbemAuthenticationLevelPktIntegrity
5
Moniker: PktIntegrity
Autentica e verifica che nessuno dei dati trasferiti tra client e server sia stato modificato.
LivelloAutenticazioneWbemPktPrivacy
6
Moniker: PktPrivacy
Autentica tutti i livelli di impersonazione precedenti e crittografa il valore dell'argomento di ogni chiamata di procedura remota. Usare questa impostazione se lo spazio dei nomi a cui ci si connette richiede una connessione crittografata.

Per determinare una chiamata riuscita, controllare il valore restituito dopo aver modificato il livello di autenticazione.

Ad esempio, poiché le connessioni locali hanno sempre un livello di autenticazione di wbemAuthenticationLevelPktPrivacy, l'esempio seguente non riesce a impostare il livello di autenticazione perché si connette al computer locale.

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

Un provider può impostare la sicurezza in uno spazio dei nomi in modo che non vengano restituiti dati a meno che non si usi la privacy dei pacchetti (PktPrivacy) nella connessione a tale spazio dei nomi. In questo modo si garantisce che i dati vengano crittografati mentre attraversano la rete. Se si tenta di impostare un livello di autenticazione inferiore, verrà visualizzato un messaggio di accesso negato. Per ulteriori informazioni, vedere Protezione dei namespace WMI.

Modifica dei livelli di rappresentazione predefiniti tramite VBScript

Quando si effettuano chiamate all'API di scripting per WMI, è consigliabile usare le impostazioni predefinite fornite da WMI per il livello di rappresentazione. Le chiamate remote e alcuni provider con più hop di rete richiedono un livello di impersonificazione superiore rispetto a quello utilizzato da WMI. Se il livello di rappresentazione non è sufficiente, un provider potrebbe rifiutare una richiesta o fornire informazioni incomplete.

Se non si imposta il livello di rappresentazione in un moniker o tramite l'impostazione di SWbemSecurity.ImpersonationLevel su un oggetto proteggibile, allora impostare il livello di rappresentazione DCOM predefinito per il sistema operativo. Il livello di rappresentazione deve essere impostato in base ai requisiti del sistema operativo di destinazione a cui ci si connette. Per altre informazioni, vedere Connessione tra sistemi operativi diversi.

Nell'esempio di codice VBScript seguente viene illustrata la modifica del livello di rappresentazione nello stesso script illustrato in precedenza.

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

Nella tabella seguente sono elencati i livelli di autenticazione in WbemImpersonationLevelEnum utilizzati.

Nome/valore Descrizione
wbemImpersonationLevelAnonymous
1
Moniker: Anonimo
Nasconde le credenziali del chiamante. Le chiamate a WMI potrebbero non riuscire con questo livello di simulazione.
wbemImpersonationLevelIdentify
2
Moniker: Identificare
Consente agli oggetti di eseguire query sulle credenziali del chiamante. Le chiamate a WMI potrebbero non riuscire con questo livello di impersonificazione.
wbemImpersonationLevelImpersonate
3
Moniker: Impersonare
Consente agli oggetti di utilizzare le credenziali del chiamante. Questo è il livello di rappresentazione consigliato per l'API di scripting per le chiamate WMI.
wbemImpersonationLevelDelegate
4
Moniker: Delegato
Consente agli oggetti di consentire ad altri oggetti di utilizzare le credenziali del chiamante. Questa impersonificazione funzionerà con l'API di script per le chiamate WMI, ma potrebbe costituire un rischio di sicurezza non necessario.

Nell'esempio seguente viene illustrato come impostare l'impersonificazione in una stringa di moniker quando si ottiene un'istanza specifica di Win32_Process.

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

Per altre informazioni, vedere Creazione di un'applicazione WMI o script.

Impostazione del livello di impersonificazione predefinito tramite il Registro di sistema

Se si ha accesso al Registro di sistema, è anche possibile impostare la chiave del Registro di sistema a livello di rappresentazione predefinita. Questa chiave specifica quale livello di impersonificazione l'API di scripting per WMI utilizza, se non diversamente specificato. Il percorso seguente identifica il percorso del Registro di sistema.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Impostazione predefinita del livello di impersonificazione

Per impostazione predefinita, la chiave del Registro di sistema è impostata su 3, specificando il livello di impersonificazione. Alcuni provider possono richiedere un livello superiore di impersonificazione.

Accesso all'oggetto SWbemSecurity in VBScript

L'altro modo in cui è possibile impostare il livello di rappresentazione è dall'oggetto di sicurezza SWbemSecurity, visualizzato come proprietà Security_ degli oggetti SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPathe SwbemLocator.

WMI passa l'impostazione di sicurezza di un oggetto padre ai discendenti dell'oggetto originale. Pertanto, è possibile impostare il livello di rappresentazione di un oggetto SWbemServices dopo l'accesso a WMI e le chiamate API usando questo oggetto o oggetti creati da esso, ad esempio oggetti di tipo SWbemObject.

Connessione a WMI su un computer remoto

Protezione dei client di scripting