3

私はCforWindowsで小さなサーバーのようなプログラムを書いています(MinGW / GCCを使用し、Windows 7でテストします)。これは、最終的にLocalSystemアカウントでサービスとして実行されることになっています。ソケットを作成し、Windows Socketsを使用してbind()listen()着信accept()接続をリッスンしています。コマンドラインから(つまり、サービスとしてではなく、通常のユーザーとして)アプリケーションを実行する場合、外部IPからの接続に問題はありません。ただし、LocalSystemアカウントを使用してプログラムをサービスとして実行すると、自分のPCから、127.0.0.1またはローカルアドレスを使用してのみサービスに接続できます。192.168.1.80(私は小さなローカルネットワークのルーターの後ろにいます)。サービスとして実行しなくても問題がなかったとしても、同じローカルネットワーク内の外部IPも他のPCも、私のローカルアドレスを使用して接続することはできません。

LocalSystemまたはLocalServiceとして実行している場合、ネットワークの処理が異なるか、アクセスできない(?)、またはサービスがデスクトップとネットワークの両方に同時にアクセスできない(注:私のサービスはインタラクティブではない)ため、セキュリティ上の考慮事項。基本的に、何が問題になっているのか、サービスの接続をリッスンする方法を見つける必要があります。NetworkServiceとして実行することは、LocalSystemとして実行することと同じですが、ネットワークアクセスを使用しますか?確かに、バックグラウンドサービスとして実行できるサーバーが必要ですが、どのように実行するのでしょうか。

更新:ファイアウォールをオフにする提案は正しい方向に進んでいたようです。Windowsファイアウォールに例外を追加した後、接続を取得できます。ソケットを使用してアプリケーションを通常実行すると、例外を追加するように求めるプロンプトが表示されるため、ファイアウォールについては考えていなかったと思います。これは、サービスを初めて実行するときには発生しません。ルールをファイアウォールに手動で追加するよりも、これを処理するためのより良い方法はありますか?LocalSystemには、ファイアウォール自体にルールを追加する権限がありますか、それともインストール中にこれを行う必要がありますか?

4

3 に答える 3

5

LocalSystemアカウントとLocalServiceアカウントにはネットワークログオン権限が制限されていますが、私が知る限り、ソケット接続には影響しません。

ただし、Windowsファイアウォールはアクティブになり、サービスとしてインストールするために実行可能ファイルを新しいディレクトリに移動すると、テスト用に作成したルールと一致しなくなる可能性があります。

于 2012-06-08T04:36:53.967 に答える
3

サービスの実行に使用されるユーザーアカウントは、TCP/UDPバインド/リッスン操作には影響しません。

ファイアウォールサービスやウイルス対策を無効にしていることを確認して、再試行してください。

詳細については、MSDNおよび組み込みのサービスアカウントを参照してください。

サービスアカウント

  • LocalSystemアカウントのコンテキストで実行されるサービスは、SCMのセキュリティコンテキストを継承します。LocalSystemは、非常に特権の高い組み込みアカウントです。ローカルシステム上で広範な特権を持ち、ネットワーク上のコンピューターとして機能します。アカウントの実際の名前は「NTAUTHORITY\SYSTEM」です。

  • LocalServiceは、ローカルコンピューターに対する最小限の特権を持ち、ネットワーク上で匿名の資格情報を提示します。LocalServiceアカウントは、Usersグループのメンバーと同じレベルのリソースおよびオブジェクトへのアクセス権を持つ組み込みのアカウントです。この制限されたアクセスは、個々のサービスまたはプロセスが危険にさらされた場合にシステムを保護するのに役立ちます。ローカルサービスアカウントとして実行されるサービスは、資格情報のないnullセッションとしてネットワークリソースにアクセスします。ローカルサービスアカウントは、SQLServerまたはSQLServerエージェントサービスではサポートされていないことに注意してください。アカウントの実際の名前は「 NTAUTHORITY\LOCALSERVICE」です。

  • NetworkServiceアカウントのコンテキストで実行されるサービスは、コンピューターの資格情報をリモートサーバーに提示します。NetworkServiceアカウントは、Usersグループのメンバーよりも多くのリソースとオブジェクトにアクセスできる組み込みのアカウントです。ネットワークサービスアカウントとして実行されるサービスは、コンピューターアカウントの資格情報を使用してネットワークリソースにアクセスします。アカウントの実際の名前は「NTAUTHORITY\NETWORKSERVICE」です。

LocalSystemとしてサービスを実行すると、ポートでバインド/リッスンできると確信しています。たとえば、Apache2.2はそれを行いました。

Apacheサービス

いくつかの読書:

ローカルサービスとネットワークサービスのアカウントを理解する

于 2012-06-08T04:17:42.847 に答える
0

他の回答(rkosegiBen Voigtによる)が示唆しているように、インストールのために実行可能ファイルを別の場所に移動し、サービスが接続がブロックされたという通知を(ボタンとともに)引き起こさないため、Windowsファイアウォールがポートをブロックしていましたアプリケーションのブロックを解除する)が表示されます。netsh advfirewall firewall add rule name="%name%" dir=in action=allow program="%path%" enable=yesファイアウォールに例外を簡単に追加するために、.batファイルを使用することになりました。

于 2012-06-09T16:45:38.587 に答える