web-dev-qa-db-ja.com

重要な出力データを別のプログラムへの入力としてリダイレクトするためにUNIXパイプを使用しても安全ですか?

Node.js開発サーバーにHTTPSを使用させ、TLS証明書と秘密鍵ファイルのコンテンツへのアクセスを許可したいのですが。

一方では、TLS秘密鍵ファイルをroot以外の誰もが読み取れるようにするという考えは好きではありません。一方、私はNodeサーバーをrootとして実行することをさらに少なくするという考えを気に入っています。

そのため、次のシェルコマンドを使用して開発サーバーを手動で起動することで、これらの方法に頼らないようにすることができます。

Sudo cat /path/to/private/key/file | /path/to/node/server

(私の場合、サーバープログラムはSTDINを読み取り、必要に応じてキーの内容を解析するように構成できます。)

ここでの私の仮定は、パイプ(|は上記のコマンドで)(名前付きパイプとは対照的に)匿名であり、非特権の3番目のプログラムはそれらに対応するファイル記述子にアクセスできません(少なくともLinuxでは?)。あれは正しいですか?

他に知っておく必要があるセキュリティの側面はありますか?これは良い解決策ですか、それとももっと良い代替案がありますか?

4
Will

|は匿名です。パイプは通常、rootでもプロセスの所有者でもないユーザーにはアクセスできません。標準入力を読み取って閉じると、catプロセスは終了し、パイプは存在しなくなり、ルートまたは残りのプロセスの所有者によって悪用されることもありません。

そうは言っても、通常、プログラムをrootとして開始するようにコーディングするのはそれほど面倒ではありませんが、実際に外部からの入力に注意を向ける前に、特権を落とします。これは、特権ポートをリッスンするために電子メールサーバーとWebサーバーで使用されるメカニズムですが、たとえば、発生するのを待っているルートレベルの外部アクセス可能なセキュリティホールとは見なされません。

7
Ed Grimm