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


Права безопасности и доступа именованных каналов

Безопасность Windows позволяет управлять доступом к именованным каналам. Дополнительные сведения о безопасности см. в разделе Access-Controlмодели.

Вы можете указать дескриптора безопасности для именованного канала при вызове функции CreateNamedPipe. Дескриптор безопасности управляет доступом как к клиенту, так и к серверам с именованным каналом. Если указать NULL, именованный канал получает дескриптор безопасности по умолчанию. Списки управления доступом в дескрипторе безопасности по умолчанию для именованного канала предоставляют полный контроль учетной записи LocalSystem, администраторам и владельцу создателя. Они также предоставляют доступ на чтение членам группы "Все" и анонимной учетной записи.

Чтобы получить дескриптор безопасности именованного канала, вызовите функцию GetSecurityInfo. Чтобы изменить дескриптор безопасности именованного канала, вызовите функциюSetSecurityInfo.

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

Аналогичным образом, когда клиент вызывает функцию CreateFile или CallNamedPipe для подключения к концу именованного канала, система выполняет проверку доступа перед предоставлением доступа клиенту.

Дескр иптор, возвращаемый функцией CreateNamedPipe, всегда имеет доступ SYNCHRONIZE. Он также имеет GENERIC_READ, GENERIC_WRITE или оба, в зависимости от открытого режима канала. Ниже приведены права доступа для каждого открытого режима.

Открытый режим Права доступа
PIPE_ACCESS_DUPLEX (0x00000003) FILE_GENERIC_READ, FILE_GENERIC_WRITE и СИНХРОНИЗАЦИЯ
PIPE_ACCESS_INBOUND (0x00000001) FILE_GENERIC_READ и СИНХРОНИЗАЦИЯ
PIPE_ACCESS_OUTBOUND (0x00000002) FILE_GENERIC_WRITE и СИНХРОНИЗАЦИЯ

 

FILE_GENERIC_READ доступ для именованного канала объединяет права на чтение данных из канала, атрибуты канала чтения, чтение расширенных атрибутов и чтение DACL канала.

FILE_GENERIC_WRITE доступ для именованного канала объединяет права на запись данных в канал, добавление к нему данных, запись атрибутов канала, запись расширенных атрибутов и чтение DACL канала. Так как FILE_APPEND_DATA и FILE_CREATE_PIPE_INSTANCE имеют то же определение, поэтому FILE_GENERIC_WRITE позволяет создавать канал. Чтобы избежать этой проблемы, используйте отдельные права вместо использования FILE_GENERIC_WRITE.

Вы можете запросить ACCESS_SYSTEM_SECURITY права доступа к объекту именованного канала, если требуется прочитать или записать SACL объекта. Дополнительные сведения см. в Access-Control списков (ACL) и права доступа SACL.

Чтобы запретить удаленным пользователям или пользователям в другом сеансе служб терминалов доступ к именованному каналу, используйте идентификатор безопасности входа в daCL для канала. Идентификатор безопасности входа также используется в входах запуска от имени; это идентификатор безопасности, используемый для защиты пространства имен объекта для каждого сеанса. Дополнительные сведения см. в статье Получение идентификатора безопасности входа в C++.