Назад | Перейти на главную страницу

Windows Server 2012, приложению требуется административный доступ для открытия порта

Как я могу предоставить приложению доступ для прослушивания одного конкретного порта, не запуская его от имени администратора и не отключая 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) «Результат ОТКЛОНЕН». Это покажет вам все процессы, которые пытаются получить доступ к пути, где у процесса нет разрешений. Вы можете поэкспериментировать с фильтрами, чтобы сузить проблему.