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


Объекты дескриптора безопасности 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 На усмотрение контроль доступа список пользователей и групп и их права доступа к защищенному объекту. Это свойство содержит массив экземпляров Win32_ACE, представляющих контроль доступа Entries. Дополнительные сведения см. в разделе Создание DACL.
Группа Группа, к которой принадлежит этот защищенный объект. Это свойство содержит экземпляр Win32_Trustee , содержащий имя, домен и идентификатор безопасности (SID) группы, к которой принадлежит владелец.
Владелец Владелец защищенного объекта. Это свойство содержит экземпляр Win32_Trustee , содержащий имя, домен и идентификатор безопасности (SID) владельца.
SACL Список системных контроль доступа (ACL) содержит массив экземпляров Win32_ACE, представляющих тип попыток доступа, которые создают записи аудита для пользователей или групп. Дополнительные сведения см. в разделе SACL для нового объекта.

DACL и SACL

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

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

Примечание

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

Win32_ACE, Win32_Trustee, Win32_SID

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

Примечание

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

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

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

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

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

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