Поделиться через


Объекты дескриптора безопасности WMI

WMI содержит объекты и методы, позволяющие читать дескрипторы безопасности и управлять ими, чтобы определить, кто имеет доступ к защищаемым объектам.

Роль дескрипторов безопасности

Дескрипторы безопасности определяют атрибуты безопасности защищаемых объектов, таких как файлы, разделы реестра, пространства имен WMI, принтеры, службы или общие ресурсы. Дескриптор безопасности содержит сведения о владельце и основной группе объекта. Поставщик может сравнить дескриптор безопасности ресурсов с удостоверением запрашивающего пользователя и определить, имеет ли пользователь право получить доступ к ресурсу, запрашиваемого пользователем. Дополнительные сведения см. в разделе Доступ к защищаемым объектам WMI.

Некоторые методы WMI, такие как GetSD, возвращают дескриптор безопасности в формате двоичного массива байтов. Начиная с Windows Vista, используйте методы класса Win32_SecurityDescriptorHelper для преобразования двоичного дескриптора безопасности в экземпляр Win32_SecurityDescriptor, который можно легко управлять. Дополнительные сведения см. в разделе Изменение безопасности доступа в защищаемых объектах.

Управление доступом и объекты безопасности WMI

Ниже приведен список объектов безопасности WMI:

На следующей схеме показаны связи между объектами безопасности WMI.

связи между объектами безопасности wmi

Дополнительные сведения о роли безопасности доступа см. в рекомендаций по обеспечению безопасности, поддержаниибезопасности WMI и управления доступом.

Объект Win32_SecurityDescriptor

В следующей таблице перечислены свойства класса Win32_SecurityDescriptor.

Свойство Описание
ControlFlags Набор битов элементов управления, которые определяют значение SD или его отдельных членов. Дополнительные сведения о настройке ControlFlags битовых значений см. в Win32_SecurityDescriptor.
DACL списке управления доступом (ACL) пользователей и групп и их права доступа к защищенному объекту. Это свойство содержит массив экземпляров Win32_ACE, представляющих записи управления доступом. Дополнительные сведения см. в статье СозданиеDACL.
группы Группа, к которой принадлежит этот защищенный объект. Это свойство содержит экземпляр Win32_Trustee, содержащий имя, домен и идентификатор безопасности группы, к которой принадлежит владелец.
владелец Владелец этого защищенного объекта. Это свойство содержит экземпляр Win32_Trustee, содержащий имя, домен и идентификатор безопасности владельца.
SACL список управления доступом (ACL) содержит массив экземпляров Win32_ACE, представляющих тип попыток доступа, которые создают записи аудита для пользователей или групп. Дополнительные сведения см. в разделе SACL для нового объекта.

DACL и SACL

Массивы объектов Win32_ACE в списке управления доступом (DACL) и списке управления доступом системы {SACL) создают связь между пользователем или группой и их правами доступа.

Если свойство DACL не содержит запись управления доступом (ACE), права доступа не предоставляются, а доступ к объекту запрещен.

Заметка

NULL DACL предоставляет полный доступ ко всем пользователям, что является серьезным риском для безопасности. Дополнительные сведения см. в статье СозданиеDACL.

Win32_ACE, Win32_Trustee, Win32_SID

Объект Win32_ACE содержит экземпляр класса Win32_Trustee, который идентифицирует пользователя или группу, а также свойство AccessMask, представляющее собой битовую маску, которая указывает действия, которые может предпринять пользователь или группа. Например, пользователю или группе может быть предоставлено право на чтение файла, но не запись в файл. Объект Win32_ACE также содержит ACE, указывающий, является ли он разрешением или запретом доступа.

Заметка

Порядок Win32_ACE в DACL важен, так как разрешено и запретить запись управления доступом (ACE) в DACL. Дополнительные сведения см. в порядке управления правами доступа вDACL.

Каждая учетная запись пользователя или группа, представленная Win32_Trustee, имеет идентификатор безопасности (SID), который однозначно идентифицирует учетную запись и указывает привилегии доступа учетной записи. Указание данных безопасности зависит от операционной системы. Дополнительные сведения см. в разделе Изменение безопасности доступа в защищаемых объектах.

На следующей схеме показано содержимое одного экземпляра Win32_ACE.

содержимое одного экземпляра win32-ace

Пример. Проверка доступа к принтерам

В следующем примере кода VBScript показано, как использовать дескриптор безопасности принтера. Скрипт вызывает метод GetSecurityDescriptor в классе Win32_Printer, чтобы получить дескриптор, а затем определяет, присутствует ли в дескрипторе безопасности список управления доступом (DACL). Если есть DACL, скрипт получает список записей управления доступом (ACE) из DACL. Каждый ACE представлен экземпляром Win32_ACE. Скрипт проверяет каждый ACE, чтобы получить имя пользователя и определить, имеет ли пользователь доступ к принтеру. Пользователь представлен экземпляром Win32_Trustee, внедренным в экземпляр 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

изменение безопасности доступа в защищаемых объектах

вспомогательный класс дескриптора безопасности

рекомендации по обеспечению безопасности

обслуживание безопасности WMI

управления доступом

Доступ к пространствам имен WMI