2012-06-08 55 views
3

我正在使用C for Windows(使用MinGW/GCC,在Windows 7上测试)编写一个类似于服务器的小程序,最终应该使用LocalSystem作为服务运行帐户。我正在创建套接字,并使用Windows套接字bind(),listen()accept()侦听传入的连接。如果我从命令行运行应用程序(即不是作为服务,而是作为普通用户),我没有任何问题从外部IP连接到它。但是,如果我使用LocalSystem帐户作为服务运行该程序,则只能通过我自己的PC连接到该服务,或者使用127.0.0.1或本地地址192.168.1.80(我位于小型本地网络中的路由器后面)。即使在没有作为服务运行的情况下没有问题,使用本地地址的外部IP或同一本地网络中的其他PC也无法连接。Windows服务:在以LocalSystem身份运行时侦听套接字

现在,我听说在以LocalSystem或LocalService运行时,网络处理方式不同或甚至无法访问(?),或者服务无法访问桌面和网络(请注意:我的服务不是交互式)同时出于安全考虑。本质上,我需要找出发生了什么问题/如何监听服务中的连接。 NetworkService与LocalSystem一样运行,但具有网络访问权限?当然,必须有可以作为后台服务运行的服务器,那么他们如何做到这一点?

UPDATE:看来,建议关闭防火墙在正确的轨道上–我可以加入Windows防火墙的例外后的连接。我想我没有考虑防火墙,因为当你通常使用套接字运行应用程序时,会得到一个提示,要求添加一个异常,这在第一次运行服务时不会发生。手动添加规则到防火墙有没有更好的方法来处理这个问题? LocalSystem是否有权限将规则添加到防火墙本身,或者在安装过程中是否必须执行此操作?

+2

我认为防火墙是一个更可能的罪魁祸首,试图把它关闭? –

回答

0

至于其他的答案(由rkosegiBen Voigt)建议,Windows防火墙挡住端口,因为我感动的可执行文件到不同的位置进行安装,因为服务不造成一个连接已被阻止的通知(沿用一个按钮来取消阻止应用程序)出现。我最终在.bat文件中使用netsh advfirewall firewall add rule name="%name%" dir=in action=allow program="%path%" enable=yes来轻松地向防火墙添加异常。

3

用于运行服务的用户帐户不会影响TCP/UDP绑定/侦听操作。

确保您已禁用防火墙服务和/或防病毒并重试。

你可以阅读MSDN上更多的细节和内置的服务帐户:

Service accounts

  • ,在LocalSystem帐户的上下文中运行的服务继承SCM.LocalSystem的安全上下文是一个非常高权限的内置帐户。它在本地系统上拥有广泛的权限,并充当网络上的计算机。帐户的实际名称是“NT AUTHORITY \ SYSTEM”。

  • LocalServiceLocalService在本地计算机上拥有最低权限,并在网络上显示匿名凭据。本地服务帐户是一个内置帐户,与作为Users组成员的资源和对象具有相同的访问级别。如果个别服务或流程受到损害,此受限访问有助于保护系统。作为本地服务帐户访问网络资源的服务作为无会话的空会话运行。请注意,本地服务帐户不支持SQL Server或SQL Server代理服务。账户的实际名称是“NT AUTHORITY \ LOCAL SERVICE”。

  • NetworkService帐户的上下文中运行的服务向远程服务器提供计算机的凭据。网络服务帐户是一个内置帐户,比“用户”组的成员更容易访问资源和对象。通过使用计算机帐户的凭据,作为网络服务帐户访问网络资源的服务。该帐户的实际名称是“NT AUTHORITY \ NETWORK SERVICE

我敢肯定,你可以绑定/监听端口,当你运行服务以LocalSystem。 例如Apache 2.2的做到了:

Apache service

一些阅读:

Understanding the Local Service and Network Service Accounts

5

本地系统和LocalService帐户有限制的网络登录权限,但据我所知,应该不会影响到插座连接。

但是,Windows防火墙将处于活动状态,并且如果您将可执行文件移动到新目录以安装作为服务,它可能不再符合您为测试制定的规则。

+0

Windows防火墙似乎是问题所在。有没有一种以编程方式添加异常的好方法?直到现在,我只是运行该程序并在提示出现时添加了一个异常。 – Socob

+0

@Socob:尝试通过http://stackoverflow.com/search?q=windows+firewall查看以编程方式添加规则的信息。 –

相关问题