Безопасность именованных каналов и права доступа
Безопасность 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++.