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.
- Il 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 di : 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 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 Access to WMI Securable Objects.
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 modificata più facilmente. Per altre informazioni, vedere Modifica della sicurezza degli accessi 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 degli accessi, vedere Procedure consigliate per la sicurezza, Gestione disicurezza 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 di controllo di accesso discrezionale (ACL) 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 voci di controllo di accesso. Per altre informazioni, vedere Creating a DACL. |
group | Gruppo a cui appartiene l'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 |
ACL (System Access Control List) 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 NULL DACL consente l'accesso completo a tutti, che rappresenta un grave rischio per la sicurezza. Per altre informazioni, vedere Creating a 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 potrebbe 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 di un accesso consentito o negato.
Nota
L'ordine di Win32_ACE in un DACL è importante perché sia l'autorizzazione che la negazione della voce di controllo di accesso (ACE) sono consentite in un daCL. Per altre informazioni, vedere 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 degli accessi in oggetti a protezione diretta.
Il diagramma seguente illustra il contenuto di un'istanza di Win32_ACE.
Esempio: Verifica dell'utente che ha accesso alle stampanti
Nell'esempio di codice VBScript seguente viene illustrato come usare il descrittore di sicurezza della stampante. Lo script chiama il metodoGetSecurityDescriptornella classe Win32_Printer per ottenere il descrittore, quindi determina se è presente un elenco DACL (Discretionary Access Control List) nel descrittore di sicurezza. Se è presente un DACL, lo script ottiene l'elenco di voci di controllo di accesso (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