Objets de descripteur de sécurité WMI
WMI a des objets et des méthodes qui vous permettent de lire et de manipuler des descripteurs de sécurité pour déterminer qui a accès aux objets sécurisables.
- Rôle des descripteurs de sécurité
- contrôle d’accès et les objets de sécurité WMI
- Win32_SecurityDescriptor d’objets
- DACL et SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- exemple : vérification de l’accès aux imprimantes
- rubriques connexes
Rôle des descripteurs de sécurité
Les descripteurs de sécurité définissent les attributs de sécurité des objets sécurisables tels que des fichiers, des clés de Registre, des espaces de noms WMI, des imprimantes, des services ou des partages. Un descripteur de sécurité contient des informations sur le propriétaire et le groupe principal d’un objet. Un fournisseur peut comparer le descripteur de sécurité des ressources à l’identité d’un utilisateur demandeur et déterminer si l’utilisateur a le droit d’accéder à la ressource demandée par un utilisateur. Pour plus d’informations, consultez Accès aux objets sécurisables WMI.
Certaines méthodes WMI, telles que GetSD, retournent un descripteur de sécurité au format de tableau d’octets binaires. À compter de Windows Vista, utilisez les méthodes de la classe Win32_SecurityDescriptorHelper pour convertir un descripteur de sécurité binaire en une instance de Win32_SecurityDescriptor, qui peut être manipulée plus facilement. Pour plus d’informations, consultez Modification de la sécurité d’accès sur les objets sécurisables.
Contrôles d’accès et objets de sécurité WMI
Voici une liste d’objets de sécurité WMI :
Le diagramme suivant montre les relations entre les objets de sécurité WMI.
relations
Pour plus d’informations sur le rôle de sécurité d’accès, consultez Meilleures pratiques de sécurité, gestion desde sécurité WMI et contrôle d’accès.
objet Win32_SecurityDescriptor
Le tableau suivant répertorie les propriétés de classe Win32_SecurityDescriptor.
Propriété | Description |
---|---|
ControlFlags | Ensemble de bits de contrôle qui qualifient la signification d’un SD ou de ses membres individuels. Pour plus d’informations sur la définition des valeurs de bits ControlFlags, consultez Win32_SecurityDescriptor. |
DACL |
liste de contrôle d’accès discrétionnaire (ACL) des utilisateurs et des groupes, ainsi que leurs droits d’accès à un objet sécurisé. Cette propriété contient un tableau d’instances Win32_ACE qui représentent entrées de contrôle d’accès. Pour plus d’informations, consultez Création d’unDACL . |
groupe | Groupe auquel appartient cet objet sécurisé. Cette propriété contient une instance de Win32_Trustee qui contient le nom, le domaine et l’identificateur de sécurité (SID) du groupe auquel appartient le propriétaire. |
propriétaire | Propriétaire de cet objet sécurisé. Cette propriété contient une instance de Win32_Trustee qui contient le nom, le domaine et l’identificateur de sécurité (SID) du propriétaire. |
SACL |
liste de contrôle d’accès système (ACL) contient un tableau d’instances Win32_ACE qui représentent le type de tentatives d’accès qui génèrent des enregistrements d’audit pour les utilisateurs ou les groupes. Pour plus d’informations, consultez SACL pour un nouvel objet. |
DACL et SACL
Les tableaux d’objets Win32_ACE dans la liste de contrôle d’accès discrétionnaire (DACL) et la liste de contrôle d’accès système {SACL) créent un lien entre un utilisateur ou un groupe et leurs droits d’accès.
Lorsqu’une propriété DACL ne contient pas d’entrée de contrôle d’accès (ACE), les droits d’accès ne sont pas accordés et l’accès à l’objet est refusé.
Note
Une NULL DACL donne un accès complet à tous, ce qui constitue un risque de sécurité grave. Pour plus d’informations, consultez Création d’unDACL .
Win32_ACE, Win32_Trustee, Win32_SID
Un objet Win32_ACE contient une instance de la classe Win32_Trustee qui identifie un utilisateur ou un groupe et une propriété AccessMask qui est un masque de bits, qui spécifie les actions qu’un utilisateur ou un groupe peut entreprendre. Par exemple, un utilisateur ou un groupe peut avoir le droit de lire un fichier, mais pas d’écrire dans le fichier. Un objet Win32_ACE contient également un ACE qui indique s’il s’agit d’un accès autorisé ou refusé.
Note
L’ordre de Win32_ACE dans une liste de contrôle d’accès est important, car les entrées de contrôle d’accès autorisées et refusées sont autorisées dans une liste DACL. Pour plus d’informations, consultez 'ordre des AE dans unDACL.
Chaque compte d’utilisateur ou groupe représenté par un Win32_Trustee a un identificateur de sécurité (SID) qui identifie de manière unique un compte et spécifie les privilèges d’accès du compte. La façon dont vous spécifiez les données SID dépend du système d’exploitation. Pour plus d’informations, consultez Modification de la sécurité d’accès sur les objets sécurisables.
Le diagramme suivant montre le contenu d’une instance Win32_ACE.
contenu
Exemple : Vérification de l’accès aux imprimantes
L’exemple de code VBScript suivant montre comment utiliser le descripteur de sécurité de l’imprimante. Le script appelle la méthode GetSecurityDescriptor dans la classe Win32_Printer pour obtenir le descripteur, puis détermine s’il existe une liste de contrôle d’accès discrétionnaire (DACL) présente dans le descripteur de sécurité. S’il existe une liste de contrôle d’accès, le script obtient la liste des entrées de contrôle d’accès (ACE) à partir de la liste DACL. Chaque ACE est représenté par une instance de Win32_ACE. Le script vérifie chaque ACE pour obtenir le nom de l’utilisateur et déterminer si l’utilisateur a accès à l’imprimante. L’utilisateur est représenté par une instance de Win32_Trustee incorporée dans l’instance 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