Как я могу предоставить приложению доступ для прослушивания одного конкретного порта, не запуская его от имени администратора и не отключая UAC?
Согласно политике, пришлось перейти со старого сервера (Windows Server 2003) на Windows Server 2012.
Основная цель этого сервера - запускать стороннее приложение, которое прослушивает определенный (нестандартный) порт и отвечает на запросы. (Его нужно запускать вручную, это не служба Windows.)
На старом сервере он отлично работал под управлением любого старого пользователя, если брандмауэр был настроен на открытие этого порта. В 2012 году, даже если брандмауэр настроен на это разрешение, его нужно запускать от имени администратора, чтобы ему было разрешено открыть порт.
Я понимаю необходимость этого в целях безопасности (произвольные пользователи не должны иметь возможность открывать произвольные порты на сервере, даже если у них есть доступ для входа в систему), но как насчет того, когда мне действительно нужно разрешить этот доступ?
Примечание. Я НЕ хочу, чтобы приложение запускалось от имени администратора. Я не хочу отключать UAC. Я хочу, чтобы все меры безопасности остались в силе, просто позвольте этому одному приложению (у него может быть собственная учетная запись пользователя) иметь возможность открывать порт и прослушивать его.
Я искал несколько многообещающих поисковых запросов, но получил информацию только о том, какие порты Windows Server 2012 требуются для собственных служб.
РЕДАКТИРОВАТЬ Подробнее о приложении. Он просто использует простой Winsock с bind()
и listen()
и accept()
. Он не использует никаких служб Windows, таких как HTTPListener. Итак, как мне отследить, почему сокет не открывается при запуске от имени обычного пользователя?
Отредактировано, поскольку 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!
Добавьте фильтр (CTRL + L) «Результат ОТКЛОНЕН». Это покажет вам все процессы, которые пытаются получить доступ к пути, где у процесса нет разрешений. Вы можете поэкспериментировать с фильтрами, чтобы сузить проблему.