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 objets de sécurité WMI
- Objet Win32_SecurityDescriptor
- DACL et SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- Exemple : Vérification de qui a 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 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.
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.
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