我如何授予应用程序访问权限以在一个特定的端口上侦听,而不以pipe理员身份运行或禁用UAC?
根据策略,必须从旧服务器(Windows Server 2003)过渡到Windows Server 2012。
此服务器的主要目的是运行第三方应用程序,该应用程序在特定(非标准)端口上侦听并响应请求。 (它必须手动运行,这不是Windows服务。)
在旧服务器上,只要防火墙设置为允许该端口打开,就可以像任何旧用户一样正常运行。 在2012年,即使防火墙configuration为允许,也必须以pipe理员身份运行才能被允许打开端口。
我明白这是出于安全目的的必要(任意用户不应该能够打开服务器上的任意端口,即使他们有login访问权限),但是当我真的需要允许访问时呢?
注意:我不希望应用程序以pipe理员身份运行。 我不想禁用UAC。 我希望所有的安全措施都保持原样,只要允许这个应用程序(它可以有自己的用户帐户)能够打开一个端口并在其上进行监听。
我search了一些有前途的search条件,但只获得了有关Windows Server 2012为自己的服务提供哪些端口的信息。
编辑关于应用程序的更多信息。 它只是用bind()和listen()和accept()使用纯Winsock。 它不使用像HTTPListener这样的任何Windows服务。 那么如何才能find导致套接字在正常用户下运行时无法打开的原因呢?
由于OP提供了更多的信息,所以编辑
侦听TCP端口不需要pipe理员权限。 但是,像HTTPListener这样的帮助者需要pipe理员权限。 在这种情况下,请尝试configuration预留,以便用户可以侦听该端口。
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或需要pipe理员权限。 这是别的。 一个我绝对喜欢的工具,当涉及到权限问题时,是Sysinternal的进程监视器 !
添加一个筛选器(CTRL + L)“结果是访问被拒绝”。 这将向您显示尝试访问path的所有进程,该进程缺less权限。 你可以玩filter来缩小问题的范围。