3

IPC は初めてで、安全な IPC メソッド (暗号化とは関係ありません) を実装しようとしています。

私は Visual Studio 2010 を使用して C++ でシステムを開発しています (ただし、他のプラットフォーム Linux/MacOS/FreeBSD に移植される予定です)。同じコンピューターですが、プロセス「A」に XML を送受信する必要がある「B」のような 14 のプロセス (B1、B2、...、B14) が存在します。

プロセス「A」は、すべてのプロセス「B」間のプロキシ/ブリッジとして機能し、プロセス「B」が送信する必要があるすべてのデータ/XML はプロセス「A」に送信され、プロセス「A」のみが送信されます。データ/XML をプロセス「B」に送信します。

プロセス「A」と「B1…B14」の間でこのデータを交換する IPC メソッドを探しています。共有メモリはこれを行うのに適していますが、どのプロセスでもアドレスへの書き込み/読み取りが可能であるため、これは安全ではありません (許可アクセスを設定できることはわかっています)。

次の IPC メソッドを見つけようとしています。

  1. ローカルのみの方法である必要があります。リモート接続を避ける必要があります。

  2. セキュリティ上の理由から、プロセスが「通信用チャネル」を開いてデータを送受信する場合、他のプロセスは同じ「チャネル」を使用できません (このチャネルに書き込み可能な共有メモリや Boost Message Queue とは異なり、または与えられた名前で別のインスタンスを開く可能性のある NamedPipe など)、偽/悪意のあるプロセスを回避したい。2 つのプロセスが同じポートでリッスンすることはできないため (ただし、ローカルのみではない)、TCP はこれに適しています。

3-プロセス「A」はサービスになり、一部のプロセス「B」もサービスとして実行され、他のプロセス「B」は非特権ユーザーとして実行されるため、これは管理者のみの機能であってはなりません.

4- このプロジェクトはコード クローズドになるため、GPL ライセンスに基づくコード/ライブラリを使用できません。

5- 可能であれば、クロスプラットフォーム (Windows/Linux/MacOS/FreeBSD)。

OSに組み込まれている、またはサードパーティのライブラリを必要とする適切なIPC手法を誰かが提案できますか?

4

1 に答える 1

3

簡潔な答え:

  • Win32 用の Windows パイプ。
  • Linux (およびファミリ) 用の匿名ローカル ソケット。

長い答え:

Windowsプラットフォームでは、次の一般的に使用される代替手段があります

  • メモリマップファイル
  • 名前付きパイプ
  • ネットワークソケット (主に IP)

残念なことに、上記のいずれも本質的にローカルのみではないということです。ファイルはストレージ アクセスによって共有され、共通の RPC/LPC ルーティングによりパイプが使用可能になり、IP はルーティング/転送構成の対象となります (ループバックを使用している場合でも)。

個人的には、Win32 でパイプを使用することをお勧めします。これらは、多かれ少なかれ Linux のローカル ソケットのように動作します (ただし、いくつかの違いがあります)。

Linuxプラットフォームの場合:

  • 共有メモリ
  • パイプ
  • ローカル ソケット (匿名のものを含む)。

パイプとローカル ソケットは安全であり、さまざまなシナリオでそれぞれ独自の利点があります。複数のクライアント/単一サーバーのシナリオがあるため、ローカル (AF_LOCAL) ソケット プログラミングをお勧めします。名前付きソケット (ファイルベースのアクセス制御付き) または匿名ソケットのいずれかを使用できます。どちらのオプションも非常に安全です (攻撃者がローカル アクセスを取得しない限り)。

リンク

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365780(v=vs.85).aspx http://manpages.ubuntu.com/manpages/lucid/man7/unix.7. html

于 2013-07-01T12:12:53.030 に答える