ACL именованного канала Windows в IIS
-
22-08-2019 - |
Вопрос
Я пытаюсь подключить процесс CGI к службе Windows с помощью именованного канала.Мой код работает нормально, используя другой сервер на моей машине разработки, но в IIS возникают проблемы с безопасностью, когда я вызываю CreateFile() в процессе CGI.
Служба Windows является сервером именованного канала, поэтому процесс CGI пытается подключиться к этому именованному каналу в качестве клиента.
Я нашел код, который создает глобальный дескриптор безопасности с флагом SECURITY_WORLD_SID_AUTHORITY, вызвав:
InitializeAcl()
AddAccessAllowedAce()
SetSecurityDescriptorDacl()
Но я не совсем понимаю эту концепцию.Я предполагаю, что Pipe Server CreateNamedPipe() должен быть вызван с этим ACL в структуре SECURITY_ATTRIBUTES, но как насчет клиента Named Pipe?
Могу ли я создать еще один глобальный дескриптор безопасности и вызвать с ним CreateFile()?
Я унаследую это с
SecurityAttributes.bInheritHandle = TRUE;
Могу ли я просто передать Null в вызове CreateFile()?
Решение
Поскольку канал создается сервером, только серверу необходимо указать ACL, клиент использует NULL для ACL.
Наследование применяется только в том случае, если именованный канал создается в одном процессе, и этот процесс создает новый процесс, в котором вы хотите, чтобы этот порожденный процесс имел прямой доступ к дескриптору (он не открывает дескриптор повторно, а получает значение другим способом). , как командная строка).
Вы можете использовать Process Explorer на sysinternals чтобы просмотреть именованные каналы, открытые в процессе, а затем просмотреть список ACL.