Защита именованных каналов

Защита именованных каналов

Хотя соответствующая часть кода в листинге программы 11.3 опущена, сервер, полный программный код которого находится на Web-сайте книги, предоставляет возможность защиты его именованных каналов для предотвращения доступа к ним пользователей, не обладающих необходимыми полномочиями. Необязательные параметры командной строки позволяют указать имя пользователя и групповое имя:

Server [ИмяПользователя ИмяГруппы]

Если имена пользователя и группы опущены, используются коды защиты, заданные по умолчанию. Заметьте, что для создания необязательных атрибутов защиты в полной версии программы 11.3 (которая доступна на Web-сайте) и в программе 15.6 используются методы из программы 15.3. В то же время, вместо вызова функции InitUnixSA мы теперь вызываем более простую функцию InitializeAccessOnlySA, которая обеспечивает предоставление только доступа, разрешенного элементами АСЕ, и помещает последний АСЕ, запрещающий доступ, в конец списка ACL. В программе 15.6 представлены соответствующие участки кода, которые не были отражены в листинге программы 11.3. В случае именованных каналов важное значение имеют следующие права доступа:

• FILE_GENERIC_READ

• FILE_GENERIC_WRITE

• SYNCHRONIZE (разрешает потоку ожидать освобождения канала)

Если при подключении клиента требуется предоставить все права доступа, можно просто указать уровень доступа STANDARD_RIGHTS_REQUIRED. Для получения полного доступа (дуплексного, входящего, исходящего и так далее) вам также придется воспользоваться маской 0x1FF. В сервере, представленном в программе 15.6, предусмотрена защита экземпляров его именованных каналов с использованием этих прав доступа. Доступ к каналу имеют только клиенты, запущенные на выполнение владельцем канала, хотя предоставление доступа к каналу также членам группы не вызывает никаких сложностей.

Программа 15.6. ServerNP: защита именованного канала 

/* Глава 15. ServerNP. Предусмотрена защита именованного канала.

 * Многопоточный сервер командной строки. Версия на основе

 * именованного канала.

 * Использование: Server [ИмяПользователя ИмяГруппы]. */

_tmain(int argc, LPTSTR argv[]) {

 …

 HANDLE hNp, hMonitor, hSrvrThread[MAXCLIENTS];

 DWORD iNp, MonitorId, ThreadId;

 DWORD AceMasks[] = /* Права доступа к именованному каналу. */

  {STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0X1FF, 0, 0 };

 LPSECURITY_ATTRIBUTES pNPSA = NULL;

 …

 if (argc == 4) /* Необязательный параметр защиты канала. */

  pNPSA = InitializeAccessOnlySA(0440, argv[1], argv[2], AceMasks, &hSecHeap);

 …

 /* Создать экземпляр канала для каждого серверного потока. */

 …

 for (iNp = 0; iNp < MAXCLIENTS; iNp++) {

  hNp = CreateNamedPipe(SERVER_PIPE, PIPE_ACCESS_DUPLEX, PIPE_READMODE_MESSAGE | PIPE_TYPE_MESSAGE | PIPE_WAIT, MAXCLIENTS, 0, 0, INFINITE, pNPSA);

  if (hNp == INVALID_HANDLE_VALUE) ReportError(_T("Невозможно открыть именованный канал."), 1, TRUE);

 }

 …

} 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Практическая работа 45. Вычисления с использованием именованных ячеек

Из книги Компьютер на 100. Начинаем с Windows Vista автора Зозуля Юрий

Практическая работа 45. Вычисления с использованием именованных ячеек Задание. Имеется прайс-лист (рис. 6.32), в котором цена каждого товара указана в долларах; необходимо выполнить пересчет цен в рубли по текущему курсу.Если вы введете в первую ячейку формулу для расчета


4.7. Некоторые свойства именованных и неименованных каналов

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

4.7. Некоторые свойства именованных и неименованных каналов Некоторые свойства именованных и неименованных каналов, относящиеся к их открытию, а также чтению и записи данных, заслуживают более пристального внимания. Прежде всего можно сделать дескриптор неблокируемым


Использование именованных каналов

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Использование именованных каналов Функция CreateNamedPipe создает первый экземпляр именованного канала и возвращает дескриптор. При вызове этой функции указывается также максимально допустимое количество экземпляров каналов, а следовательно, и количество клиентов,


Создание именованных каналов

Из книги Технология XSLT автора Валиков Алексей Николаевич

Создание именованных каналов Серверами именованных каналов могут быть только системы на основе Windows NT (как обычно, здесь имеются в виду версия 4.0 и последующие); системы на базе Windows 9x могут выступать только в роли клиентов.Прототип функции CreateNamedPipe представлен ниже. HANDLE


Подключение клиентов именованных каналов

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Подключение клиентов именованных каналов Как показано на рис. 11.2, для подключения клиента к именованному каналу применяется функция CreateFile, при вызове которой указывается имя именованного канала. Часто клиент и сервер выполняются на одном компьютере, и в этом случае для


Функции состояния именованных каналов

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Функции состояния именованных каналов Предусмотрены две функции, позволяющие получать информацию о состоянии каналов, и еще одна функция, позволяющая устанавливать данные состояния канала. Краткая характеристика этих функций приводится ниже, а одна из этих функций


Функции подключения именованных каналов

Из книги автора

Функции подключения именованных каналов После создания именованного канала сервер может ожидать подключения клиента (осуществляемого с помощью функции CreateFile или функции CallNamedFile, описанной далее в этой главе), используя для этого функцию ConnectNamedPipe, которая является


Подключение клиентов и серверов именованных каналов

Из книги автора

Подключение клиентов и серверов именованных каналов Операции по подключению клиентов и серверов к именованным каналам выполняются в описанном ниже порядке. Сначала мы рассмотрим последовательность операций, выполняемых сервером, при помощи которых сервер создает


Функции транзакций именованных каналов

Из книги автора

Функции транзакций именованных каналов На рис. 11.2 показана типичная конфигурация клиента, в которой клиент выполняет следующие операции:• Открывает экземпляр канала, создавая долговременное соединение с сервером и занимая экземпляр канала.• Периодически посылает


Определение наличия сообщений в именованных каналах

Из книги автора

Определение наличия сообщений в именованных каналах В дополнение к возможности чтения данных из именованного канала с помощью функции ReadFile можно также определить, имеются ли в канале фактические сообщения, используя для этого функцию PeekNamedPipe. Это средство может быть


Сравнение именованных каналов и сокетов

Из книги автора

Сравнение именованных каналов и сокетов Именованные каналы, описанные в главе 11, очень похожи на сокеты, но в способах их использования имеются значительные различия.• Именованные каналы могут быть ориентированными на работу с сообщениями, что значительно упрощает


Сравнение серверов именованных каналов и сокетов

Из книги автора

Сравнение серверов именованных каналов и сокетов Установка соединения с несколькими клиентами при использовании сокетов требует выполнения повторных вызовов функции accept. Каждый из вызовов возвращает очередной подключенный сокет. По сравнению с именованными каналами


Сравнение клиентов именованных каналов и сокетов

Из книги автора

Сравнение клиентов именованных каналов и сокетов В случае именованных каналов необходимо последовательно вызывать функции WaitNamedPipe и CreateFile. Если же используются сокеты, этот порядок вызовов обращается, поскольку можно считать, что функция socket создает сокет, а функция


Использование именованных сущностей вместо кодов символов

Из книги автора

Использование именованных сущностей вместо кодов символов Это требование связано с желанием пользователей видеть в выходящем документе вместо сущности &#xA0; ее более привычный вариант &nbsp;. В настоящее время приходится прибегать ко всяким хитростям вроде<xsl:text


11.4.1. Создание входных точек устройств и именованных каналов

Из книги автора

11.4.1. Создание входных точек устройств и именованных каналов Процессы создают файлы устройств и именованных каналов в файловой системе с помощью вызова mknod().#include <fcntl.h>#include <unistd.h>int mknod(const char *pathname, mode_t mode, dev_t dev);pathname — это имя файла, который нужно создать, mode — это и