Oggetti descrittore di sicurezza WMI

WMI dispone di oggetti e metodi che consentono di leggere e modificare i descrittori di sicurezza per determinare chi può accedere a oggetti a protezione diretta.

Ruolo dei descrittori di sicurezza

I descrittori di sicurezza definiscono gli attributi di sicurezza di oggetti a protezione diretta, ad esempio file, chiavi del Registro di sistema, spazi dei nomi WMI, stampanti, servizi o condivisioni. Un descrittore di sicurezza contiene informazioni sul proprietario e sul gruppo primario di un oggetto . Un provider può confrontare il descrittore di sicurezza delle risorse con l'identità di un utente richiedente e determinare se l'utente ha il diritto di accedere alla risorsa richiesta da un utente. Per altre informazioni, vedere Accesso a oggetti a protezione diretta WMI.

Alcuni metodi WMI, ad esempio GetSD, restituiscono un descrittore di sicurezza nel formato di matrice di byte binari. A partire da Windows Vista, usare i metodi della classe Win32_SecurityDescriptorHelper per convertire un descrittore di sicurezza binario in un'istanza di Win32_SecurityDescriptor, che può essere manipolata più facilmente. Per altre informazioni, vedere Modifica della sicurezza di accesso sugli oggetti a protezione diretta.

oggetti di sicurezza Controllo di accesso e WMI

Di seguito è riportato un elenco di oggetti di sicurezza WMI:

Il diagramma seguente illustra le relazioni tra gli oggetti di sicurezza WMI.

relationships among wmi security objects

Per altre informazioni sul ruolo della sicurezza degli accessi, vedere Procedure consigliate per la sicurezza, gestione della sicurezza WMI e Controllo di accesso.

Oggetto Win32_SecurityDescriptor

Nella tabella seguente sono elencate le proprietà della classe Win32_SecurityDescriptor .

Proprietà Descrizione
ControlFlags Set di bit di controllo che qualificano il significato di una sd o dei singoli membri. Per altre informazioni sull'impostazione dei valori di bit ControlFlags , vedere Win32_SecurityDescriptor.
DACL Elenco Controllo di accesso discrezionale di utenti e gruppi e i relativi diritti di accesso a un oggetto protetto. Questa proprietà contiene una matrice di istanze di Win32_ACE che rappresentano Controllo di accesso voci. Per altre informazioni, vedere Creazione di un DACL.
Gruppo Gruppo a cui appartiene questo oggetto protetto. Questa proprietà contiene un'istanza di Win32_Trustee che contiene il nome, il dominio e l'identificatore di sicurezza (SID) del gruppo a cui appartiene il proprietario.
Proprietario Proprietario di questo oggetto protetto. Questa proprietà contiene un'istanza di Win32_Trustee che contiene il nome, il dominio e l'identificatore di sicurezza (SID) del proprietario.
SACL L'elenco di Controllo di accesso di sistema contiene una matrice di istanze di Win32_ACE che rappresentano il tipo di tentativi di accesso che generano record di controllo per utenti o gruppi. Per altre informazioni, vedere SACL per un nuovo oggetto.

DACL e SACL

Le matrici di oggetti Win32_ACE nell'elenco di controllo di accesso discrezionale (DACL) e nell'elenco di controllo di accesso di sistema {SACL) creano un collegamento tra un utente o un gruppo e i relativi diritti di accesso.

Quando una proprietà DACL non contiene una voce di controllo di accesso (ACE), i diritti di accesso non vengono concessi e l'accesso all'oggetto viene negato.

Nota

Un DACL NULL consente l'accesso completo a tutti, che rappresenta un grave rischio per la sicurezza. Per altre informazioni, vedere Creazione di un DACL.

Win32_ACE, Win32_Trustee, Win32_SID

Un oggetto Win32_ACE contiene un'istanza della classe Win32_Trustee che identifica un utente o un gruppo e una proprietà AccessMask che è una maschera di bit, che specifica le azioni che un utente o un gruppo può eseguire. Ad esempio, a un utente o a un gruppo può essere concesso il diritto di leggere un file ma non di scrivere nel file. Un oggetto Win32_ACE contiene anche un ace che indica se si tratta o meno di un accesso consentito o negato.

Nota

L'ordine di Win32_ACE in un DACL è importante perché sia consenti che negano la voce di controllo di accesso (ACE) sono consentiti in un DACL. Per altre informazioni, vedere Order of ACEs in a DACL.For more information, see Order of ACEs in a DACL.

Ogni account utente o gruppo rappresentato da un Win32_Trustee ha un ID di sicurezza (SID) che identifica in modo univoco un account e specifica i privilegi di accesso dell'account. Il modo in cui si specificano i dati SID dipende dal sistema operativo. Per altre informazioni, vedere Modifica della sicurezza di accesso sugli oggetti a protezione diretta.

Il diagramma seguente illustra il contenuto di un'istanza di Win32_ACE .

contents of one win32-ace instance

Esempio: Controllo Who ha accesso alle stampanti

Nell'esempio di codice VBScript seguente viene illustrato come usare il descrittore di sicurezza della stampante. Lo script chiama il metodo GetSecurityDescriptor nella classe Win32_Printer per ottenere il descrittore, quindi determina se nel descrittore di sicurezza è presente un oggetto Discretionary Controllo di accesso List (DACL). Se è presente un DACL, lo script ottiene l'elenco di Controllo di accesso voci (ACE) dall'elenco DACL. Ogni ACE è rappresentato da un'istanza di Win32_ACE. Lo script controlla ogni ACE per ottenere il nome dell'utente e determinare se l'utente ha accesso alla stampante. L'utente è rappresentato da un'istanza di Win32_Trustee incorporata nell'istanza di Win32_ACE .

SE_DACL_PRESENT = &h4
ACCESS_ALLOWED_ACE_TYPE = &h0
ACCESS_DENIED_ACE_TYPE  = &h1

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

Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
   Wscript.Echo "Name: " & objPrinter.Name 
' Get security descriptor for printer
    Return = objPrinter.GetSecurityDescriptor( objSD )
    If ( return <> 0 ) Then
 WScript.Echo "Could not get security descriptor: " & Return
 wscript.Quit Return
    End If
' Extract the security descriptor flags
    intControlFlags = objSD.ControlFlags
    If intControlFlags AND SE_DACL_PRESENT Then
' Get the ACE entries from security descriptor
        colACEs = objSD.DACL
    For Each objACE in colACEs
' Get all the trustees and determine which have access to printer
        WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name
        If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then
            WScript.Echo vbTab & "User has access to printer"
        ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then
            WScript.Echo vbTab & "User does not have access to the printer"
        End If
    Next
    Else
    WScript.Echo "No DACL found in security descriptor"
End If
Next

Modifica della sicurezza di accesso negli oggetti a protezione diretta

Classe helper del descrittore di sicurezza

Procedure consigliate per la sicurezza

Gestione della sicurezza WMI

Controllo dell’accesso

Accesso agli spazi dei nomi WMI