3

stdin、stdout、および stderr (それ以上でもそれ以下でもない) にのみアクセスできる Linux プロセスを生成できるようにしたいと考えています。プロセスレベル自体でこれを行うことはできますか? また、生成されたプロセスがストリームの反対側が指す「もの」を変更できるようにしたくないことを暗黙のうちに述べています(矛盾した表現)。

比喩的に:

  • プロセスにはどこかから来る入力パイプがあり、パイプがどこから始まるかを変更できないため、入力がどこから来るかを制御できません。
  • プロセスには出力パイプとエラーパイプがあり、出力パイプのもう一方の端が指す場所を変更できないため、出力先を制御できません。
  • 新しいパイプを作成することはできません。

私は現在SElinuxも検討しています。これにより、これら 3 つのストリームにのみアクセスできるプロセスを作成できますか? ありがとうございました。

4

4 に答える 4

2

これは、読み取り、書き込み、および終了を除くすべてのシステムコールを基本的にブロックするこの LWN 記事で説明されている内容と非常によく似ています。

于 2008-10-09T10:08:36.847 に答える
1

SELinux はその仕事をすることができました。特定のプログラムに特定のシステム コールを使用する権限を割り当てることができます。オープン、パイプ、およびその他へのアクセスを拒否することにより、説明したことを正確に実行できるはずです。

2 番目に考えられる方法は、LD_PRELOAD 機能を使用して、独自のオープン パイプなどを提供することです。機能。これは 100% 安全ではありません。プログラムがシステム コールにより直接アクセスする可能性があるためです (これが潜在的に敵対的なプログラムであると仮定します)。

于 2008-10-09T05:14:41.310 に答える
1

root の場合は、ディレクトリに chroot し、権限を落としてファイルシステムへの書き込みアクセス権をなくしてから、exec を実行できます。これにより、プログラムが新しいファイルを作成できなくなります。しかし、プログラムがパイプとソケットを作成するのを防ぐ方法はありません (SELinux ではソケットなしが可能です)。また、プログラムがファイル記述子を再配置して閉じるのを防ぐ方法はありません。

ええと、ptraceすべてのシステムコールをトラップして、承認したものだけを許可するために使用できると思います。したがって、「方法がない」と言うときは、「簡単な方法はない」という意味です。これにはかなりのオーバーヘッドが発生しますが、十分に注意すれば安全にすることができます。この道を進むことにした場合は、straceまたはUMviewプロジェクトが出発点として適している可能性があります。

于 2008-10-09T01:11:52.017 に答える