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

Хотя соответственная часть кода в листинге программки 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[] = /* Права доступа к именованному каналу. */

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 Защита именованных каналов++) PIPE_WAIT, MAXCLIENTS, 0, 0, INFINITE, pNPSA);

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

}

Защита объектов ядра и приватных объектов

Многие объекты, такие как процессы, потоки либо мьютексы, являются объектами ядра (kernel objects). Для получения и установки дескрипторов безопасности ядра употребляются функции GetKernelObjectsSecurity и SetKernelObjectsSecurity, подобные функциям защиты Защита именованных каналов файлов, описанным в истинной главе. Но при всем этом вы должны знать, какие права доступа соответствуют данному объекту; в последующем разделе показано, как найти эти права.

Существует также возможность связывания дескрипторов безопасности с приватными, сгенерированными программкой объектами, такими как объекты Windows Sockets либо запатентованные базы данных. Надлежащими Защита именованных каналов функциями являются GetPrivateObjectSecurity и SetPrivateObjectSecurity. Ответственность за принудительное введение определенных прав доступа к таким объектам несет программер, который для конфигурации дескрипторов безопасности должен использовать функции CreatePrivateObjectSecurity и DestroyPrivateObjectSecurity.

Значения маски АСЕ

Модели "юзер, группа, остальные", которую реализует функция InitUnixSA почти всегда будет полностью довольно, хотя с внедрением тех же базисных способов Защита именованных каналов могут реализовываться и другие модели.

Совместно с тем, для этого следует знать фактические значения маски АСЕ, которые соответствуют тому либо иному объекту ядра. Эти значения не всегда довольно отлично документированы, но для их нахождения можно пользоваться несколькими методами.

• Прочитайте документацию с описанием функции открытия интересующего вас объекта. Флаги доступа Защита именованных каналов имеют те же значения, что и флаги, применяемые в маске АСЕ. Так, функция OpenMutex употребляет флаги MUTEX_ALL_ACCESS и SYNCHRONIZE (2-ой из обозначенных флагов требуется для хоть какого объекта, который может употребляться с функциями WaitForSingleObject либо WaitForMultipleObjects). Другие объекты, к примеру процессы, имеют огромное количество других дополнительных флагов Защита именованных каналов доступа.

• Нужная тут информация может содержаться также в документации по функциям "сотворения" объектов.

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


zashitnie-i-adaptivnie-processi-pri-narcissizme-ot-haosa-k-strukture-ot-simptoma-k-lichnosti.html
zashitnie-mehanizmi-v-geshtalt-psihologii-obraz-mira.html
zashitnie-meropriyatiya-na-himicheski-opasnih-obektah.html