Oggetti descrittori di sicurezza WMI
WMI include 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
- Controllo di accesso e oggetti di sicurezza WMI
- oggetto Win32_SecurityDescriptor
- DACL e SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- Esempio: Verifica dell'accesso alle stampanti
- Argomenti correlati
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 all'identità di un utente richiedente e determinare se l'utente ha il diritto di accedere alla risorsa richiesta da parte di un utente. Per altre informazioni, vedere Accesso agli oggetti a protezione diretta WMI.
Alcuni metodi WMI, ad esempio GetSD, restituiscono un descrittore di sicurezza nel formato matrice di byte binari. A partire da Windows Vista, usare i metodi della classe Win32_SecurityDescriptorHelper per convertire un descrittore di sicurezza binaria in un'istanza di Win32_SecurityDescriptor, che può essere modificata più facilmente. Per altre informazioni, vedere Modifica della sicurezza di accesso in oggetti a protezione diretta.
Controllo di accesso e oggetti di sicurezza WMI
Di seguito è riportato un elenco di oggetti di sicurezza WMI:
Il diagramma seguente illustra le relazioni tra gli oggetti di sicurezza WMI.
Per altre informazioni sul ruolo della sicurezza di accesso, 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 un sd o dei singoli membri. Per altre informazioni sull'impostazione dei valori di bit ControlFlags , vedere Win32_SecurityDescriptor. |
DACL |
Facoltativo Controllo di accesso Elenco di utenti e gruppi e 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 elenco dati. |
Gruppo | Gruppo a cui appartiene questo oggetto protetto. Questa proprietà contiene un'istanza di Win32_Trustee contenente il nome, il dominio e l'identificatore di sicurezza del gruppo a cui appartiene il proprietario. |
Proprietario | Proprietario di questo oggetto protetto. Questa proprietà contiene un'istanza di Win32_Trustee contenente il nome, il dominio e l'identificatore di sicurezza del proprietario. |
SACL |
System Controllo di accesso List (ACL) contiene una matrice di istanze 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 del sistema {SACL) creano un collegamento tra un utente o un gruppo e i 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, ovvero un rischio di sicurezza grave. Per altre informazioni, vedere Creazione di un elenco dati.
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 bit, che specifica le azioni che un utente o un gruppo possono eseguire. Ad esempio, un utente o un gruppo può essere concesso il diritto di leggere un file ma non scrivere nel file. Un oggetto Win32_ACE contiene anche un ACE che indica se è 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'interfaccia di controllo dati. 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 identificatore 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 in oggetti a protezione diretta.
Il diagramma seguente mostra il contenuto di un'istanza di Win32_ACE .
Esempio: Verifica dell'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 Controllo di accesso Discrezionale Controllo di accesso List (DACL). Se è presente un'interfaccia di controllo livello dati, lo script ottiene l'elenco di voci Controllo di accesso (ACE) dall'elenco di controllo dei dati. 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