Windows Server 2012,应用程序需要管理权限才能打开端口

Windows Server 2012,应用程序需要管理权限才能打开端口

如何授予应用程序访问权限以侦听某个特定端口,而无需以管理员身份运行或禁用 UAC?

根据策略,必须从旧服务器(Windows Server 2003)过渡到 Windows Server 2012。

该服务器的主要目的是运行第三方应用程序,该应用程序侦听特定(非标准)端口并响应请求。(它必须手动运行,它不是 Windows 服务。)

在旧服务器上,只要防火墙设置为允许该端口打开,它就可以以任何旧用户身份运行。在 2012 上,即使防火墙配置为允许它,它也必须以管理员身份运行才能被允许打开端口。

我理解出于安全目的这样做的必要性(任意用户都不应该能够在服务器上打开任意端口,即使他们有登录权限)但是当我确实需要允许该访问时该怎么办?

注意:我不希望应用程序以管理员身份运行。我不想禁用 UAC。我希望所有安全措施保持不变,只允许这个应用程序(它可以有自己的用户帐户)能够打开端口并对其进行侦听。

我搜索了一些有希望的搜索词,但只得到了有关 Windows Server 2012 自身服务所需端口的信息。

编辑有关该应用程序的更多信息。它只使用带有bind()listen()和的普通 Winsock 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 的进程监视器

添加过滤器 (CTRL+L) “结果为 ACCESS DENIED”。这将向您显示所有尝试访问路径但进程缺乏权限的进程。您可以尝试使用过滤器来缩小问题范围。

相关内容