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


Дескрипторы безопасности в разделах файлов и реестра

Интерфейсы служб Active Directory (ADSI) можно использовать для управления и защиты файловых систем в организации, включая возможность задавать или изменять списки управления доступом в файлах или общих папках, созданных пользователями. Интерфейсы безопасности, такие как IADsSecurityDescriptor, IADsAccessControlList и IADsAccessControlEntry, устанавливают списки управления доступом в Active Directory, Exchange, file, общей папке или объектах раздела реестра. Прежде чем использовать эти интерфейсы, дескриптор безопасности может потребоваться изменить, если он использует другой формат интерфейса, или если у вас нет прав доступа к SACL дескриптора безопасности, так как вы не являетесь членом группы администраторов безопасности.

Чтобы получить, задать или изменить дескриптор безопасности, используйте интерфейс IADsSecurityUtility . Этот интерфейс позволяет получить дескриптор безопасности из различных ресурсов в исходном формате, например формат ADSI IADsSecurityDescriptor, необработанный дескриптор безопасности или шестнадцатеричную строку, как используется в Exchange 5.5. При извлечении его можно преобразовать в другой формат, например из необработанного дескриптора безопасности в IADsSecurityDescriptor. Затем вы можете написать новый формат обратно в ресурс.

Некоторые значения свойств IADsAccessControlEntry, такие как AccessMask и AceFlags, будут отличаться для различных типов объектов. Например, объект Active Directory будет использовать элемент ADS_RIGHT_GENERIC_READ перечисления ADS_RIGHTS_ENUM для свойства IADsAccessControlEntry.AccessMask, но эквивалентный доступ для объекта файла FILE_GENERIC_READ. Небезопасно предположить, что все значения свойств будут одинаковыми для объектов Active Directory и объектов, отличных от Active Directory. В следующем списке показаны свойства IADsAccessControlEntry , которые отличаются для объектов, отличных от Active Directory, и где можно получить соответствующие значения.

AccessMask

Дополнительные сведения и список возможных значений для объектов файлов или общих папок см. в разделе "Безопасность файлов и права доступа".

Дополнительные сведения и список возможных значений для объектов реестра см. в разделе "Безопасность раздела реестра и права доступа".

AceType

Дополнительные сведения см. в элементе AceType структуры ACE_HEADER.

AceFlags

Дополнительные сведения см. в элементе AceFlags структуры ACE_HEADER .

Flags

Содержит ноль или сочетание одного или нескольких следующих значений из WinNT.h.

ACE_OBJECT_TYPE_PRESENT (1)

ObjectType содержит допустимое значение.

ACE_INHERITED_OBJECT_TYPE_PRESENT (2)

InheritedObjectType содержит допустимое значение.

ObjectType

Дополнительные сведения см. в элементе ObjectType ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE и аналогичных структурах. Это свойство не должно быть задано или изменено для объектов, отличных от Active Directory.

InheritedObjectType

Дополнительные сведения см. в элементе InheritedObjectType ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE и аналогичных структурах. Это свойство не должно быть задано или изменено для объектов, отличных от Active Directory.

Как правило, IADsSecurityUtility.GetSecurityDescriptor извлекает все части дескриптора безопасности, такие как владелец, группа, SACL или DACL. Аналогичным образом IADsSecurityUtility.SetSecurityDescriptor перезаписывает все части дескриптора безопасности по умолчанию. Свойство IADsSecurityUtility.SecurityMask можно использовать для указания отдельных частей дескриптора безопасности для извлечения или задания. Например, можно задать для SecurityMaskзначение ADS_SECURITY_INFO_DACL перед вызовом GetSecurityDescriptor, чтобы получить только DACL без получения других частей дескриптора безопасности.

Дополнительные сведения и пример кода, использующий интерфейс IADsSecurityUtility для добавления ACE в файл, см. в примере кода для добавления ACE в файл.

В следующем примере кода содержатся постоянные идентификаторы для объектов файлов, общей папки и реестра для свойств AccessMask, AceType, AceFlags и Flags для использования с Visual Basic и Microsoft Visual Basic Scripting Edition.

' Identifiers for the IADsAccessControlEntry.AccessMask property for file,
' file share, and registry objects.
Const DELETE = &H10000
Const READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Const SYNCHRONIZE = &H100000

Const STANDARD_RIGHTS_REQUIRED = &HF0000

Const STANDARD_RIGHTS_READ = &H20000
Const STANDARD_RIGHTS_WRITE = &H20000
Const STANDARD_RIGHTS_EXECUTE = &H20000

Const STANDARD_RIGHTS_ALL = &H1F0000

Const SPECIFIC_RIGHTS_ALL = &HFFFF

' Identifiers for the IADsAccessControlEntry.AccessMask property for file and
' file share objects.
Const FILE_READ_DATA = &H1                  '  file & pipe
Const FILE_LIST_DIRECTORY = &H1             '  directory

Const FILE_WRITE_DATA = &H2                 '  file & pipe
Const FILE_ADD_FILE = &H2                   '  directory

Const FILE_APPEND_DATA = &H4                '  file
Const FILE_ADD_SUBDIRECTORY = &H4           '  directory
Const FILE_CREATE_PIPE_INSTANCE = &H4       '  named pipe

Const FILE_READ_EA = &H8                    '  file & directory

Const FILE_WRITE_EA = &H10                  '  file & directory

Const FILE_EXECUTE = &H20                   '  file
Const FILE_TRAVERSE = &H20                  '  directory

Const FILE_DELETE_CHILD = &H40              '  directory

Const FILE_READ_ATTRIBUTES = &H80           '  all

Const FILE_WRITE_ATTRIBUTES = &H100         '  all

Const FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H1FF

Const FILE_GENERIC_READ = STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or _
                          FILE_READ_EA Or SYNCHRONIZE

Const FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or _
                           FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE

Const FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE


' Identifiers for the IADsAccessControlEntry.AccessMask property for registry
' objects.
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_WOW64_32KEY = &H200
Const KEY_WOW64_64KEY = &H100
Const KEY_WOW64_RES = &H300

Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And _
                  (Not SYNCHRONIZE))

Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))

Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))

Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or _
                         KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
    

' Identifiers for the IADsAccessControlEntry.AceFlags property for file and
' file share objects.
Const OBJECT_INHERIT_ACE = &H1
Const CONTAINER_INHERIT_ACE = &H2
Const NO_PROPAGATE_INHERIT_ACE = &H4
Const INHERIT_ONLY_ACE = &H8
Const INHERITED_ACE = &H10
    

' Identifiers for the IADsAccessControlEntry.Flags property.
Const ACE_OBJECT_TYPE_PRESENT = 1
Const ACE_INHERITED_OBJECT_TYPE_PRESENT = 2