WMI-beveiligingsdescriptorobjecten
WMI heeft objecten en methoden waarmee u beveiligingsdescriptors kunt lezen en bewerken om te bepalen wie toegang heeft tot beveiligbare objecten.
- De rol van beveiligingsdescriptors
- toegangsbeheer en WMI-beveiligingsobjecten
- Win32_SecurityDescriptor Object-
- DACL- en SACL-
- Win32_ACE, Win32_Trustee, Win32_SID
- voorbeeld: controleren wie toegang heeft tot printers
- Verwante onderwerpen
De rol van beveiligingsdescriptors
Beveiligingsdescriptors definiëren de beveiligingskenmerken van beveiligbare objecten, zoals bestanden, registersleutels, WMI-naamruimten, printers, services of shares. Een beveiligingsdescriptor bevat informatie over de eigenaar en primaire groep van een object. Een provider kan de resourcebeveiligingsdescriptor vergelijken met de identiteit van een aangevraagde gebruiker en bepalen of de gebruiker het recht heeft om toegang te krijgen tot de resource die een gebruiker aanvraagt. Zie Toegang tot WMI-beveiligbare objectenvoor meer informatie.
Sommige WMI-methoden, zoals GetSD-, retourneren een beveiligingsdescriptor in de binaire bytematrixindeling. Vanaf Windows Vista gebruikt u de methoden van de Win32_SecurityDescriptorHelper-klasse om een binaire beveiligingsdescriptor te converteren naar een exemplaar van Win32_SecurityDescriptor, dat gemakkelijker kan worden gemanipuleerd. Zie Toegangsbeveiliging wijzigen op beveiligbare objectenvoor meer informatie.
Toegangsbeheer en WMI-beveiligingsobjecten
Hier volgt een lijst met WMI-beveiligingsobjecten:
In het volgende diagram ziet u de relaties tussen WMI-beveiligingsobjecten.
Zie Aanbevolen procedures voor beveiliging, WMI-beveiliging onderhoudenen toegangsbeheervoor meer informatie over de rol van toegangsbeveiliging.
Win32_SecurityDescriptor-object
De volgende tabel bevat de Win32_SecurityDescriptor klasse-eigenschappen.
Eigenschap | Beschrijving |
---|---|
ControlFlags- | Set controle-bits die de betekenis van een SD of de afzonderlijke leden kwalificeren. Zie Win32_SecurityDescriptorvoor meer informatie over het instellen van de ControlFlags bitwaarden. |
DACL- |
discretionaire toegangsbeheerlijst (ACL) van gebruikers en groepen en hun toegangsrechten voor een beveiligd object. Deze eigenschap bevat een matrix van Win32_ACE exemplaren die vermeldingen voor toegangsbeheervertegenwoordigen. Zie Een DACL-maken voor meer informatie. |
groep | Groep waartoe dit beveiligde object behoort. Deze eigenschap bevat een exemplaar van Win32_Trustee met de naam, het domein en de beveiligings-id (SID) van de groep waartoe de eigenaar behoort. |
eigenaar | Eigenaar van dit beveiligde object. Deze eigenschap bevat een exemplaar van Win32_Trustee met de naam, het domein en de beveiligings-id (SID) van de eigenaar. |
SACL- |
ACL (System Access Control List) bevat een matrix van Win32_ACE exemplaren die het type toegangspogingen vertegenwoordigen waarmee controlerecords voor gebruikers of groepen worden gegenereerd. Zie SACL voor een nieuw objectvoor meer informatie. |
DACL en SACL
De matrices van Win32_ACE objecten in de discretionaire toegangsbeheerlijst (DACL) en systeemtoegangsbeheerlijst {SACL) maken een koppeling tussen een gebruiker of groep en hun toegangsrechten.
Wanneer een DACL-eigenschap geen toegangsbeheervermelding (ACE) bevat, worden er geen toegangsrechten verleend en wordt de toegang tot het object geweigerd.
Notitie
Een NULL- DACL biedt volledige toegang tot iedereen, wat een ernstig beveiligingsrisico is. Zie Een DACL-maken voor meer informatie.
Win32_ACE, Win32_Trustee, Win32_SID
Een Win32_ACE-object bevat een exemplaar van de Win32_Trustee-klasse die een gebruiker of groep identificeert en een AccessMask-eigenschap die een bitmasker is, waarmee de acties worden opgegeven die een gebruiker of groep kan uitvoeren. Een gebruiker of groep kan bijvoorbeeld het recht krijgen om een bestand te lezen, maar niet naar het bestand te schrijven. Een Win32_ACE-object bevat ook een ACE die aangeeft of het een toegang toestaan of weigeren is.
Notitie
De Win32_ACE volgorde in een DACL is belangrijk omdat zowel toegangsbeheervermelding (ACE) toestaan als weigeren is toegestaan in een DACL. Zie Volgorde van ACL's in een DACL-voor meer informatie.
Elk gebruikersaccount of elke groep die wordt vertegenwoordigd door een Win32_Trustee heeft een beveiligings-id (SID) die een account uniek identificeert en de toegangsbevoegdheden van het account aangeeft. Hoe u de SID-gegevens opgeeft, is afhankelijk van het besturingssysteem. Zie Toegangsbeveiliging wijzigen op beveiligbare objectenvoor meer informatie.
In het volgende diagram ziet u de inhoud van één Win32_ACE exemplaar.
Voorbeeld: controleren wie toegang heeft tot printers
In het volgende VBScript-codevoorbeeld ziet u hoe u de printerbeveiligingsdescriptor gebruikt. Met het script wordt de methode GetSecurityDescriptor aangeroepen in de Win32_Printer-klasse om de descriptor te verkrijgen. Vervolgens wordt bepaald of er een Discretionary Access Control List (DACL) aanwezig is in de beveiligingsdescriptor. Als er een DACL is, haalt het script de lijst met Access Control Entries (ACE) op van de DACL. Elke ACE wordt vertegenwoordigd door een exemplaar van Win32_ACE. Het script controleert elke ACE om de naam van de gebruiker op te halen en te bepalen of de gebruiker toegang heeft tot de printer. De gebruiker wordt vertegenwoordigd door een exemplaar van Win32_Trustee dat is ingesloten in het Win32_ACE-exemplaar.
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