Share via


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é

Les descripteurs de sécurité définissent les attributs de sécurité des objets sécurisables tels que fichiers, clés de Registre, espaces de noms WMI, imprimantes, services ou 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 celui-ci a le droit d’accéder à la ressource demandée. 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 instance de Win32_SecurityDescriptor, qui peut être manipulée plus facilement. Pour plus d’informations, consultez Changement de la sécurité d’accès sur les objets sécurisables.

Contrôle 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 entre les objets de sécurité wmi

Pour plus d’informations sur le rôle de la sécurité d’accès, consultez Bonnes pratiques en matière de sécurité, Maintenance de la sécurité WMI et Contrôle d’accès.

Win32_SecurityDescriptor Object

Le tableau suivant liste les propriétés de la 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 d’utilisateurs et de 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 des entrées de contrôle d’accès. Pour plus d’informations, consultez Création d’une liste DACL.
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 La liste de contrôle d’accès système 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 des utilisateurs ou des groupes. Pour plus d’informations, consultez Liste 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 ses 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é.

Notes

Une liste DACL NULL donne un accès complet à tout le monde, ce qui représente un risque sérieux pour la sécurité. Pour plus d’informations, consultez Création d’une liste DACL.

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 effectuer. Par exemple, un utilisateur ou un groupe peut se voir accorder le droit de lire un fichier, mais pas d’écrire dans le fichier. Un objet Win32_ACE contient également une entrée ACE qui indique s’il s’agit d’un accès autorisé ou refusé.

Notes

L’ordre de Win32_ACE dans une liste DACL est important, car les entrées de contrôle d’accès (ACE) d’autorisation et de refus sont autorisées dans une liste DACL. Pour plus d’informations, consultez Ordre des entrées ACE dans une liste de contrôle d’accès discrétionnaire (DACL).

Chaque compte d’utilisateur ou groupe représenté par un Win32_Trustee a un identificateur de sécurité (SID) qui identifie un compte de manière unique 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 d’une instance win32-ace

Exemple : Vérification de qui a 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 si une liste DACL est présente dans le descripteur de sécurité. S’il existe une liste DACL, le script obtient la liste des entrées ACE à partir de la liste DACL. Chaque entrée ACE est représentée par une instance de Win32_ACE. Le script vérifie chaque entrée ACE pour obtenir le nom de l’utilisateur et déterminer si celui-ci 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

Modification de la sécurité d’accès sur les objets sécurisables

Classe d'assistance de descripteur de sécurité

Bonnes pratiques en matière de sécurité

Maintenance de la sécurité WMI

Contrôle d’accès

Accès aux espaces de noms WMI