Windows Server 2012, приложению необходим административный доступ к открытому порту
Как я могу предоставить приложению доступ для прослушивания на одном конкретном порту, не запуская его от имени администратора или не отключая UAC?
В соответствии с политикой, пришлось перейти со старого сервера (Windows Server 2003) на Windows Server 2012.
Основное назначение этого сервера - запуск стороннего приложения, которое прослушивает определенный (нестандартный) порт и отвечает на запросы. (Его нужно запускать вручную, это не служба Windows.)
На старом сервере он работал нормально, как любой старый пользователь, если брандмауэр был настроен на открытие этого порта. В 2012 году, даже если брандмауэр настроен на его разрешение, он должен запускаться от имени администратора, чтобы иметь возможность открыть порт.
Я понимаю необходимость этого в целях безопасности (произвольные пользователи не должны открывать произвольные порты на сервере, даже если у них есть доступ для входа в систему), но как быть, когда мне действительно нужно разрешить такой доступ?
Примечание: я не хочу, чтобы приложение запускалось от имени администратора. Я не хочу отключать UAC. Я хочу, чтобы все меры безопасности оставались на месте, просто позвольте этому одному приложению (оно может иметь свою собственную учетную запись пользователя) иметь возможность открывать порт и прослушивать его.
Я искал некоторые многообещающие поисковые термины, но получил только информацию о том, какие порты Windows Server 2012 требуется для собственных служб.
РЕДАКТИРОВАТЬ Более подробную информацию о приложении. Он просто использует простой Winsock с bind()
а также listen()
а также accept()
, Он не использует никаких служб Windows, таких как HTTPListener. Итак, как я могу отследить, что заставляет сокет не открываться при запуске как обычный пользователь?
1 ответ
Отредактировано, потому что OP предоставил больше информации:
Прослушивание портов TCP не требует прав администратора. Однако некоторым помощникам, таким как HTTPListener, потребуются права администратора. В этом случае попробуйте настроить резервирование, чтобы пользователь мог прослушивать этот порт.
netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
https://msdn.microsoft.com/en-us/library/ms733768.aspx?f=255&MSPPError=-2147217396
В вашем случае при использовании winsock привязка к порту не вызывает UAC или не требует прав администратора. Это что-то еще. Инструмент, который мне очень нравится, когда речь заходит о проблемах с разрешениями, это Sysinternal Process Monitor!
Добавьте фильтр (CTRL+L) "Результат недоступен". Это покажет вам все процессы, которые пытаются получить доступ к пути, где у процесса нет разрешений. Вы можете поиграться с фильтрами, чтобы сузить проблему.