Объекты дескриптора безопасности WMI
WMI содержит объекты и методы, которые позволяют считывать дескрипторы безопасности и управлять ими, чтобы определить, кто имеет доступ к защищаемым объектам.
- Роль дескрипторов безопасности
- объекты безопасности контроль доступа и WMI
- Объект Win32_SecurityDescriptor
- DACL и SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- Пример. Проверка доступа пользователей к принтерам
- Связанные темы
Роль дескрипторов безопасности
Дескрипторы безопасности определяют атрибуты безопасности защищаемых объектов, таких как файлы, разделы реестра, пространства имен WMI, принтеры, службы или общие папки. Дескриптор безопасности содержит сведения о владельце и основной группе объекта. Поставщик может сравнить дескриптор безопасности ресурса с удостоверением запрашивающего пользователя и определить, имеет ли пользователь право на доступ к ресурсу, запрашиваемого пользователем. Дополнительные сведения см. в разделе Доступ к защищаемым объектам WMI.
Некоторые методы WMI, такие как GetSD, возвращают дескриптор безопасности в формате двоичного массива байтов. Начиная с Windows Vista, используйте методы класса Win32_SecurityDescriptorHelper для преобразования дескриптора двоичной системы безопасности в экземпляр Win32_SecurityDescriptor, которыми можно легко управлять. Дополнительные сведения см. в разделе Изменение безопасности доступа в защищаемых объектах.
объекты безопасности контроль доступа и 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 .
Пример. Проверка доступа пользователей к принтерам
В следующем примере кода 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