- Именованный канал
- Содержание
- Именованные каналы в Unix
- Именованные каналы в Windows
- Именованные каналы в сетях Windows
- Практическое руководство. Использование именованных каналов для сетевого взаимодействия между процессами How to: Use Named Pipes for Network Interprocess Communication
- Пример Example
- Пример Example
- Отказоустойчивость Robust Programming
- Сетевой доступ: разрешать анонимный доступ к именованным каналам. Network access: Named Pipes that can be accessed anonymously
- Справочные материалы Reference
- Возможные значения Possible values
- Рекомендации Best practices
- Расположение Location
- Значения по умолчанию Default values
- Управление политикой Policy management
- Необходимость перезапуска Restart requirement
- Групповая политика Group Policy
- Вопросы безопасности Security considerations
- Уязвимость Vulnerability
- Противодействие Countermeasure
- Возможное влияние Potential impact
Именованный канал
В программировании именованный канал или именованный конвейер (англ. named pipe ) — расширение понятия конвейера в Unix и подобных ОС, один из методов межпроцессного взаимодействия. Это понятие также существует и в Microsoft Windows, хотя там его семантика существенно отличается. Традиционный канал — «безымянен», потому что существует анонимно и только во время выполнения процесса. Именованный канал — существует в системе и после завершения процесса. Он должен быть «отсоединён» или удалён когда уже не используется. Процессы обычно подсоединяются к каналу для осуществления взаимодействия между процессами.
Содержание
Именованные каналы в Unix
Вместо традиционного, безымянного конвейера оболочки (англ. shell pipeline ), именованный канал создаётся явно с помощью mknod или mkfifo, и два различных процесса могут обратиться к нему по имени.
Например, можно создать канал и настроить gzip на сжатие того, что туда попадает:
Параллельно, в другом процессе можно выполнить:
что приведёт к сжатию передаваемых данных gzip-ом.
Именованные каналы в Windows
В Windows дизайн именованных каналов смещён к взаимодействию «клиент-сервер», и они работают во многом как сокеты: помимо обычных операций чтения и записи, именованные каналы в Windows поддерживают явный «пассивный» режим для серверных приложений (для сравнения: Unix domain socket). Windows 95 поддерживает клиенты именованных каналов, а системы ветви Windows NT могут служить также и серверами.
К именованному каналу можно обращаться в значительной степени как к файлу. Можно использовать функции Windows API CreateFile, CloseHandle, ReadFile, WriteFile, чтобы открывать и закрывать канал, выполнять чтение и запись. Функции стандартной библиотеки Си такие как fopen, fread, fwrite и fclose, тоже можно использовать, в отличие от сокетов Windows (англ.), которые не реализуют использование стандартных файловых операций в сети. Интерфейс командной строки (как в Unix) отсутствует.
Именованные каналы — не существуют постоянно и не могут, в отличие от Unix, быть созданы как специальные файлы в произвольной доступной для записи файловой системе, но имеют временные имена (освобождаемые после закрытия последней ссылки на них), которые выделяются в корне файловой системы именованных каналов (англ. named pipe filesystem, NPFS ) и монтируются по специальному пути «\\.\pipe\» (т. е. у канала под названием «foo» полное имя будет «\\.\pipe\foo»). Анонимные каналы, использующиеся в конвейерах — это на самом деле именованные каналы со случайным именем.
Именованные каналы обычно не доступны непосредственно пользователю, но есть существенные исключения. Например, средство виртуализации рабочих станций VMWare может открывать эмулируемый последовательный порт для главной системы как именованный канал, а отладчик уровня ядра kd от Microsoft поддерживает именованные каналы в качестве средства сообщения при отладке (фактически, так как kd обычно требует подключения к целевому компьютеру по последовательному порту, VMware и kd можно соединить вместе для отладки драйверов устройств на одном компьютере). Обе программы требуют от пользователя указания имён канала в виде «\\.\pipe\имя».
Именованные каналы в Windows NT могут наследовать контекст безопасности.
Именованные каналы в сетях Windows
Именованные каналы — это также сетевой протокол в SMB, основанный на использовании особой части межпроцессного взаимодействия (IPC). IPC в SMB может бесшовно и прозрачно передавать контекст аутентификации пользователя на другую сторону именованного канала. Наследование аутентификации для именованных каналов Windows NT для пользователя и разработчика настолько прозрачно, что почти незаметно, в связи с чем его часто неправильно понимают.
Практическое руководство. Использование именованных каналов для сетевого взаимодействия между процессами How to: Use Named Pipes for Network Interprocess Communication
Именованные каналы обеспечивают межпроцессное взаимодействие между сервером канала и одним или несколькими клиентами канала. Named pipes provide interprocess communication between a pipe server and one or more pipe clients. Они предоставляют больше функциональных возможностей, чем анонимные каналы, которые обеспечивают межпроцессное взаимодействие на локальном компьютере. They offer more functionality than anonymous pipes, which provide interprocess communication on a local computer. Именованные каналы поддерживают полную дуплексную связь по сети и несколько экземпляров сервера, связь на основе сообщений и олицетворение клиента, позволяющее подключающимся процессам использовать собственные наборы разрешений на удаленных серверах. Named pipes support full duplex communication over a network and multiple server instances, message-based communication, and client impersonation, which enables connecting processes to use their own set of permissions on remote servers.
Для реализации именованных каналов используются классы NamedPipeServerStream и NamedPipeClientStream. To implement name pipes, use the NamedPipeServerStream and NamedPipeClientStream classes.
Пример Example
В примере ниже показано, как создать именованный канал с помощью класса NamedPipeServerStream. The following example demonstrates how to create a named pipe by using the NamedPipeServerStream class. В этом примере серверный процесс создает четыре потока. In this example, the server process creates four threads. Каждый поток может принимать подключение клиента. Each thread can accept a client connection. Процесс подключения клиента передает серверу имя файла. The connected client process then supplies the server with a file name. Если клиенту имеет необходимые разрешения, серверный процесс открывает указанный файл и отправляет клиенту его содержимое. If the client has sufficient permissions, the server process opens the file and sends its contents back to the client.
Пример Example
В примере ниже представлен клиентский процесс, основанный на классе NamedPipeClientStream. The following example shows the client process, which uses the NamedPipeClientStream class. Клиент подключается к серверному процессу и передает серверу имя файла. The client connects to the server process and sends a file name to the server. В этом примере используется олицетворение. Это означает, что у идентификатора, от имени которого выполняется клиентское приложение, должны быть разрешения на доступ к файлу. The example uses impersonation, so the identity that is running the client application must have permission to access the file. Затем сервер отправляет клиенту содержимое файла. The server then sends the contents of the file back to the client. Полученное содержимое файла выводится в консоль. The file contents are then displayed to the console.
Отказоустойчивость Robust Programming
Клиентский и серверный процессы в этом примере предназначены для выполнения на одном компьютере, поэтому объекту NamedPipeClientStream передается имя сервера «.» . The client and server processes in this example are intended to run on the same computer, so the server name provided to the NamedPipeClientStream object is «.» . Если клиентский и серверный процессы выполняются на разных компьютерах, вместо «.» должно быть указано сетевое имя компьютера, на котором осуществляется серверный процесс. If the client and server processes were on separate computers, «.» would be replaced with the network name of the computer that runs the server process.
Сетевой доступ: разрешать анонимный доступ к именованным каналам. Network access: Named Pipes that can be accessed anonymously
Область применения Applies to
В этой статье описываются лучшие методики, расположение, значения, управление политиками и вопросы безопасности для сетевого доступа: именовать конвейеры, к которые можно получить анонимный доступ к параметру политики безопасности. Describes the best practices, location, values, policy management and security considerations for the Network access: Named Pipes that can be accessed anonymously security policy setting.
Справочные материалы Reference
Этот параметр политики определяет, какие сеансы связи или каналы связи имеют атрибуты и разрешения, разреша которыми анонимный доступ. This policy setting determines which communication sessions, or pipes, have attributes and permissions that allow anonymous access.
Ограничение доступа по именированным каналам, таким как COMNAP и LOCATOR, помогает предотвратить несанкционированный доступ к сети. Restricting access over named pipes such as COMNAP and LOCATOR helps prevent unauthorized access to the network.
Возможные значения Possible values
- Пользовательский список общих папок User-defined list of shared folders
- Не определено Not defined
Рекомендации Best practices
- Установите для этой политики значение null; то есть введите параметр политики, но не вводите именовые конвейеры в текстовом поле. Set this policy to a null value; that is, enable the policy setting, but do not enter named pipes in the text box. Это отключит доступ к сеансу null по именовамым каналам, и приложения, которые используют эту функцию или неавтерицированный доступ к именовамым каналам, перестают работать. This will disable null session access over named pipes, and applications that rely on this feature or on unauthenticated access to named pipes will no longer function.
Расположение Location
Конфигурация компьютера\Параметры Windows\Параметры безопасности\Локальные политики\Параметры безопасности Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
Значения по умолчанию Default values
В следующей таблице перечислены фактические и эффективные значения по умолчанию для этой политики. The following table lists the actual and effective default values for this policy. Значения по умолчанию также можно найти на странице свойств политики. Default values are also listed on the policy’s property page.
Тип сервера или объект групповой политики Server type or GPO | Значение по умолчанию Default value |
---|---|
Default Domain Policy Default Domain Policy | Не определено Not defined |
Политика контроллера домена по умолчанию Default Domain Controller Policy | Netlogon, samr, lsarpc Netlogon, samr, lsarpc |
Параметры по умолчанию для автономного сервера Stand-Alone Server Default Settings | Null Null |
Эффективные параметры по умолчанию для DC DC Effective Default Settings | Netlogon, samr, lsarpc Netlogon, samr, lsarpc |
Действующие параметры по умолчанию для рядового сервера Member Server Effective Default Settings | Не определено Not defined |
Действующие параметры по умолчанию для клиентского компьютера Client Computer Effective Default Settings | Не определено Not defined |
Управление политикой Policy management
В этом разделе описываются различные функции и средства, которые помогут вам управлять этой политикой. This section describes different features and tools available to help you manage this policy.
Необходимость перезапуска Restart requirement
Нет. None. Изменения этой политики становятся эффективными без перезапуска устройства, если они сохраняются локально или распространяются посредством групповой политики. Changes to this policy become effective without a device restart when they are saved locally or distributed through Group Policy.
Групповая политика Group Policy
Чтобы этот параметр политики вступил в силу, необходимо также включить сетевой доступ: ограничить анонимный доступ к именованным каналам и ресурсам. For this policy setting to take effect, you must also enable the Network access: Restrict anonymous access to Named Pipes and Shares setting.
Вопросы безопасности Security considerations
В этом разделе описывается, каким образом злоумышленник может использовать компонент или его конфигурацию, как реализовать меры противодействия, а также рассматриваются возможные отрицательные последствия их реализации. This section describes how an attacker might exploit a feature or its configuration, how to implement the countermeasure, and the possible negative consequences of countermeasure implementation.
Уязвимость Vulnerability
Вы можете ограничить доступ по именированным каналам, таким как COMNAP и LOCATOR, чтобы предотвратить несанкционированный доступ к сети. You can restrict access over named pipes such as COMNAP and LOCATOR to help prevent unauthorized access to the network. В следующем списке описываются доступные именуемые конвейеры и их назначение. The following list describes available named pipes and their purpose. Эти конвейеры были предоставлены анонимным доступом в более ранних версиях Windows, и некоторые устаревшие приложения могут по-прежнему использовать их. These pipes were granted anonymous access in earlier versions of Windows and some legacy applications may still use them.
Именоваемая конвейерная Named pipe | Описание Purpose |
---|---|
COMNAP COMNAP | Именоваемая конвейерная база SNABase. SNABase named pipe. Системная архитектура сети (SNA) — это набор сетевых протоколов, изначально разработанных для компьютеров с ibm mainframe. Systems network Architecture (SNA) is a collection of network protocols that were originally developed for IBM mainframe computers. |
COMNODE COMNODE | SNA Server с именем pipe. SNA Server named pipe. |
SQL\QUERY SQL\QUERY | Именователь по умолчанию для SQL Server. Default named pipe for SQL Server. |
SPOOLSS SPOOLSS | Именователь канала для службы печати пулов. Named pipe for the Print Spooler service. |
EPMAPPER EPMAPPER | Конечный mapper с именем pipe. End Point Mapper named pipe. |
LOCATOR LOCATOR | Служба удаленного вызова процедуры с именем pipe. Remote Procedure Call Locator service named pipe. |
TrlWks TrlWks | Распределенный клиент отслеживания ссылок с именем pipe. Distributed Link Tracking Client named pipe. |
TrkSvr TrkSvr | Распределенный сервер отслеживания ссылок с именем pipe. Distributed Link Tracking Server named pipe. |
Противодействие Countermeasure
Настройте сетевой доступ: именуемые конвейеры, к которые можно получить анонимный доступ, установив значение NULL (в этом параметре можно включить, но не указывать именоваемые конвейеры в текстовом поле). Configure the Network access: Named Pipes that can be accessed anonymously setting to a null value (enable the setting but do not specify named pipes in the text box).
Возможное влияние Potential impact
Эта конфигурация отключает доступ к сеансу null по именовамым каналам, и приложения, которые используют эту функцию или неавтерицированный доступ к именовамым каналам, больше не работают. This configuration disables null-session access over named pipes, and applications that rely on this feature or on unauthenticated access to named pipes no longer function. Это может нарушить доверие между доменами Windows Server 2003 в смешанном режиме. This may break trust between Windows Server 2003 domains in a mixed mode environment.