Udostępnij za pośrednictwem


Obiekty deskryptora zabezpieczeń usługi WMI

Usługa WMI zawiera obiekty i metody, które umożliwiają odczytywanie deskryptorów zabezpieczeń i manipulowanie nimi w celu określenia, kto ma dostęp do zabezpieczanych obiektów.

Rola deskryptorów zabezpieczeń

Deskryptory zabezpieczeń definiują atrybuty zabezpieczeń zabezpieczanych obiektów, takich jak pliki, klucze rejestru, przestrzenie nazw usługi WMI, drukarki, usługi lub udziały. Deskryptor zabezpieczeń zawiera informacje o właścicielu i podstawowej grupie obiektu. Dostawca może porównać deskryptor zabezpieczeń zasobów z tożsamością żądanego użytkownika i określić, czy użytkownik ma prawo dostępu do zasobu, którego żąda użytkownik. Aby uzyskać więcej informacji, zobacz Access to WMI Securable Objects.

Niektóre metody WMI, takie jak GetSD, zwracają deskryptor zabezpieczeń w formacie tablicy bajtów binarnych. Począwszy od systemu Windows Vista, użyj metod klasy Win32_SecurityDescriptorHelper, aby przekonwertować deskryptor zabezpieczeń binarnych na wystąpienie Win32_SecurityDescriptor, które można łatwiej manipulować. Aby uzyskać więcej informacji, zobacz Zmienianie zabezpieczeń dostępu w zabezpieczanych obiektach.

Kontrola dostępu i obiekty zabezpieczeń usługi WMI

Poniżej znajduje się lista obiektów zabezpieczeń usługi WMI:

Na poniższym diagramie przedstawiono relacje między obiektami zabezpieczeń usługi WMI.

relacje między obiektami zabezpieczeń wmi

Aby uzyskać więcej informacji na temat roli zabezpieczeń dostępu, zobacz Security Best Practices, Maintaining WMI Securityi Access Control.

obiekt Win32_SecurityDescriptor

W poniższej tabeli wymieniono właściwości klasy Win32_SecurityDescriptor.

Własność Opis
ControlFlags Zestaw bitów sterujących, które kwalifikują znaczenie sd lub jego poszczególnych elementów członkowskich. Aby uzyskać więcej informacji na temat ustawiania wartości bitów ControlFlags, zobacz Win32_SecurityDescriptor.
DACL dyskrecjonalne listy kontroli dostępu (ACL) użytkowników i grup oraz ich prawa dostępu do zabezpieczonego obiektu. Ta właściwość zawiera tablicę wystąpień Win32_ACE reprezentujących wpisy kontroli dostępu . Aby uzyskać więcej informacji, zobacz Tworzenie listy DACL.
grupy Grupuj, do której należy ten zabezpieczony obiekt. Ta właściwość zawiera wystąpienie Win32_Trustee, które zawiera nazwę, domenę i identyfikator zabezpieczeń (SID) grupy, do której należy właściciel.
właściciel Właściciel tego zabezpieczonego obiektu. Ta właściwość zawiera wystąpienie Win32_Trustee, które zawiera nazwę, domenę i identyfikator zabezpieczeń (SID) właściciela.
SACL System Access Control List (ACL) zawiera tablicę wystąpień Win32_ACE reprezentujących typ prób dostępu generujących rekordy inspekcji dla użytkowników lub grup. Aby uzyskać więcej informacji, zobacz SACL for a New Object.

DACL i SACL

Tablice obiektów Win32_ACE w uznaniowej liście kontroli dostępu (DACL) i liście kontroli dostępu systemu {SACL) tworzą link między użytkownikiem lub grupą i ich prawami dostępu.

Jeśli właściwość DACL nie zawiera wpisu kontroli dostępu (ACE), prawa dostępu nie są przyznawane i odmowa dostępu do obiektu.

Nuta

Lista DACL NULL zapewnia pełny dostęp do wszystkich użytkowników, co stanowi poważne zagrożenie bezpieczeństwa. Aby uzyskać więcej informacji, zobacz Tworzenie listy DACL.

Win32_ACE, Win32_Trustee, Win32_SID

Obiekt Win32_ACE zawiera wystąpienie klasy Win32_Trustee, która identyfikuje użytkownika lub grupę, oraz właściwość AccessMask, która jest maską bitową, która określa akcje, które może wykonać użytkownik lub grupa. Na przykład użytkownik lub grupa może otrzymać prawo do odczytu pliku, ale nie zapisu w pliku. Obiekt Win32_ACE zawiera również ACE, który wskazuje, czy jest to zezwalanie, czy odmowa dostępu.

Nuta

Kolejność Win32_ACE na liście DACL jest ważna, ponieważ zarówno pozycja zezwalania, jak i odmowy dostępu (ACE) jest dozwolona w daCL. Aby uzyskać więcej informacji, zobacz Order of ACEs in a DACL.

Każde konto użytkownika lub grupa reprezentowana przez Win32_Trustee ma identyfikator zabezpieczeń (SID), który jednoznacznie identyfikuje konto i określa uprawnienia dostępu do konta. Sposób określania danych identyfikatora SID zależy od systemu operacyjnego. Aby uzyskać więcej informacji, zobacz Zmienianie zabezpieczeń dostępu w zabezpieczanych obiektach.

Na poniższym diagramie przedstawiono zawartość jednego wystąpienia Win32_ACE.

zawartość jednego wystąpienia win32-ace

Przykład: sprawdzanie, kto ma dostęp do drukarek

Poniższy przykład kodu VBScript pokazuje, jak używać deskryptora zabezpieczeń drukarki. Skrypt wywołuje metodę GetSecurityDescriptor w klasie Win32_Printer w celu uzyskania deskryptora, a następnie określa, czy w deskryptorze zabezpieczeń istnieje lista kontroli dostępu dyskrecjonalnych (DACL). Jeśli istnieje lista DACL, skrypt uzyskuje listę wpisów kontroli dostępu (ACE) z listy DACL. Każde zdarzenie ACE jest reprezentowane przez wystąpienie Win32_ACE. Skrypt sprawdza każdą ACE, aby uzyskać nazwę użytkownika i określić, czy użytkownik ma dostęp do drukarki. Użytkownik jest reprezentowany przez wystąpienie Win32_Trustee osadzone w wystąpieniu 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

zmienianie zabezpieczeń dostępu w zabezpieczanych obiektach

klasy pomocniczej deskryptora zabezpieczeń

najlepsze rozwiązania dotyczące zabezpieczeń

utrzymywanie zabezpieczeń usługi WMI

kontroli dostępu

dostęp do przestrzeni nazw usługi WMI