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

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

Дескриптор безопасности для именованного канала можно указать при вызове функции 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 и SYNCHRONIZE
PIPE_ACCESS_INBOUND (0x00000001) FILE_GENERIC_READ и SYNCHRONIZE
PIPE_ACCESS_OUTBOUND (0x00000002) FILE_GENERIC_WRITE и SYNCHRONIZE

 

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 объекта. Дополнительные сведения см. в разделах Списки управления доступом (ACL) и Права доступа saCL.

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