Фон
У меня есть 2 службы Windows (запущенные на WinServer2016), которые общаются через общую память. Отображение распространяется с помощью DuplicateHandle
Windows API от одного сервиса к другому (есть причины, по которым этот метод является предпочтительным).
Пока службы работают под учетной записью локальной системы, все в порядке, но если мы запускаем их под выделенной учетной записью администратора, передача сопоставления завершается неудачно: OpenProcess
сообщает об отказе в доступе.
Глядя на панель Свойства / Безопасность / Разрешения / Дополнительно процесса получателя в ProcessExplorer, я действительно вижу, что PROCESS_DUP_HANLDE разрешен для локальной системы и запрещен для группы администраторов. Я вижу точно так же, если я выкидываю дескриптор безопасности процесса с помощью CppCheckSD :
O:BAG:SYD:(A;;0x1fffff;;;SY)(A;;0x121411;;;BA)S:AI(ML;;NWNR;;;SI)
Вопрос
Я хотел бы добавить ACE к процессу получателя, который позволяет PROCESS_DUP_HANDLE для любого процесса, запускаемого учетной записью создателя (обе службы работают с одной и той же учетной записью). Я хотел бы сделать это во время создания сервиса.
sc
имеет опции для получения и установки дескриптора безопасности (SD) службы, но я не могу по-настоящему интерпретировать результат sc sdshow
:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Этот DACL имеет 4 записи (по сравнению с 2 выше), и у группы администраторов больше прав, чем у системы.
- Мне кажется, что процесс SD! = Служба SD, это правда?
- Что соответствует SD, установленному
sc
?
- Можно ли добавить необходимое разрешение с помощью
sc sdset
?