2012-06-08 79 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查看以編程方式添加規則的信息。 –

相關問題