Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 |
списке управления доступом (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.
Пример. Проверка доступа к принтерам
В следующем примере кода 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