WMI-säkerhetsbeskrivningsobjekt
WMI har objekt och metoder som gör att du kan läsa och manipulera säkerhetsbeskrivningar för att avgöra vem som har åtkomst till skyddsbara objekt.
- Rollen säkerhetsbeskrivningar
- åtkomstkontroll och WMI-säkerhetsobjekt
- Win32_SecurityDescriptor objekt
- DACL och SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- exempel: Kontrollera vem som har åtkomst till skrivare
- Relaterade ämnen
Rollen för säkerhetsbeskrivningar
Säkerhetsbeskrivningar definierar säkerhetsattributen för skyddsbara objekt, till exempel filer, registernycklar, WMI-namnområden, skrivare, tjänster eller resurser. En säkerhetsbeskrivning innehåller information om ägaren och den primära gruppen för ett objekt. En provider kan jämföra resurssäkerhetsbeskrivningen med identiteten för en begärande användare och avgöra om användaren har rätt att komma åt resursen som en användare begär. Mer information finns i Åtkomst till WMI-skyddsbara objekt.
Vissa WMI-metoder, till exempel GetSD, returnerar en säkerhetsbeskrivning i matrisformatet binär byte. Från och med Windows Vista använder du metoderna i klassen Win32_SecurityDescriptorHelper för att konvertera en binär säkerhetsbeskrivning till en instans av Win32_SecurityDescriptor, som kan manipuleras enklare. Mer information finns i Ändra åtkomstsäkerhet för skyddsbara objekt.
Åtkomstkontroll och WMI-säkerhetsobjekt
Följande är en lista över WMI-säkerhetsobjekt:
Följande diagram visar relationerna mellan WMI-säkerhetsobjekt.
Mer information om åtkomstsäkerhetsrollen finns i Bästa praxis för säkerhet, Underhåll av WMI-säkerhetoch Åtkomstkontroll.
Win32_SecurityDescriptor objekt
I följande tabell visas de Win32_SecurityDescriptor klassegenskaperna.
Egenskap | Beskrivning |
---|---|
ControlFlags | Uppsättning kontrollbitar som kvalificerar innebörden av en SD eller dess enskilda medlemmar. Mer information om hur du anger ControlFlags bitvärden finns i Win32_SecurityDescriptor. |
DACL- |
ACL(Discretionary Access Control List) användare och grupper samt deras åtkomsträttigheter till ett skyddat objekt. Den här egenskapen innehåller en matris med Win32_ACE instanser som representerar åtkomstkontrollposter. Mer information finns i Skapa en DACL-. |
Grupp | Grupp som det här skyddade objektet tillhör. Den här egenskapen innehåller en instans av Win32_Trustee som innehåller namn, domän och säkerhetsidentifierare (SID) för den grupp som ägaren tillhör. |
ägare | Ägare till det här skyddade objektet. Den här egenskapen innehåller en instans av Win32_Trustee som innehåller ägarens namn, domän och säkerhetsidentifierare (SID). |
SACL- |
System Access Control List (ACL) innehåller en matris med Win32_ACE instanser som representerar den typ av åtkomstförsök som genererar granskningsposter för användare eller grupper. Mer information finns i SACL för ett nytt objekt. |
DACL och SACL
Matriserna med Win32_ACE objekt i DACL (Discretionary Access Control List) och listan med systemåtkomstkontroll (SACL) skapar en länk mellan en användare eller grupp och deras åtkomsträttigheter.
När en DACL-egenskap inte innehåller en åtkomstkontrollpost (ACE) beviljas inte åtkomsträttigheter och åtkomst till objektet nekas.
Not
En NULL- DACL ger fullständig åtkomst till alla, vilket är en allvarlig säkerhetsrisk. Mer information finns i Skapa en DACL-.
Win32_ACE, Win32_Trustee, Win32_SID
Ett Win32_ACE-objekt innehåller en instans av klassen Win32_Trustee som identifierar en användare eller grupp och en AccessMask- egenskap som är en bitmask, som anger vilka åtgärder som en användare eller grupp kan vidta. En användare eller grupp kan till exempel beviljas behörighet att läsa en fil men inte skriva till filen. Ett Win32_ACE-objekt innehåller också ett ACE som anger om det är en tillåten eller nekad åtkomst.
Not
Den Win32_ACE ordningen i en DACL är viktig eftersom både tillåta och neka åtkomstkontrollinmatning (ACE) tillåts i en DACL. Mer information finns i Order of ACEs in a DACL.
Varje användarkonto eller grupp som representeras av en Win32_Trustee har en säkerhetsidentifierare (SID) som unikt identifierar ett konto och anger åtkomstbehörigheterna för kontot. Hur du anger SID-data beror på operativsystemet. Mer information finns i Ändra åtkomstsäkerhet för skyddsbara objekt.
Följande diagram visar innehållet i en Win32_ACE instans.
Exempel: Kontrollera vem som har åtkomst till skrivare
Följande VBScript-kodexempel visar hur du använder skrivarsäkerhetsbeskrivningen. Skriptet anropar metoden GetSecurityDescriptor i klassen Win32_Printer för att hämta beskrivningen och avgör sedan om det finns en DACL (Discretionary Access Control List) i säkerhetsbeskrivningen. Om det finns en DACL hämtar skriptet listan över åtkomstkontrollposter (ACE) från DACL. Varje ACE representeras av en instans av Win32_ACE. Skriptet kontrollerar varje ACE för att hämta namnet på användaren och avgöra om användaren har åtkomst till skrivaren. Användaren representeras av en instans av Win32_Trustee inbäddad i den Win32_ACE instansen.
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