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

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 d’une instance win32-ace

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

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

classe d’assistance du descripteur de sécurité

Meilleures pratiques de sécurité

gestion des de sécurité WMI

de contrôle d’accès

l’accès aux espaces de noms WMI