1

計画された目標を達成するために、いくつかの外部バイナリを使用して C プログラムを作成しています。1 つのコマンドを実行して出力を得る必要があり、その出力を処理してから、別のプログラムに入力としてフィードする必要があります。popen を使用していますが、代わりに KornShell (ksh) 一時ファイルを使用するのと同じでしょうか。

例えば:

touch myfile && chmod 700
cat myfile > /tmp/tempfile 
process_file < /tmp/tempfile  && rm /tmp/tempfile

これにより、ルートで読み取り可能な一時ファイルが作成されるため、パイプもファイルであることを知って、Cで popen を使用した場合と同じでしょうか? それとも、オペレーティング システム (OS) が他のプロセスによるパイプの読み取りを許可しないと想定しても安全でしょうか?

4

1 に答える 1

1

「root が読み取ることができる一時ファイルを作成する」と言いますが、これは、root ユーザーが読み取ることができない方法でデータを転送しようとしていることを意味します。それ無理; 一般に、root ユーザーはシステムを完全に制御できるため、一時ファイルにあるかどうかに関係なく、システム上のすべてのデータを読み取ることができます。単一のプロセス内であっても、root ユーザーはそのプロセスのメモリを読み取ることができます。

を使用するpopen()と、ファイルシステムにファイルのエントリはありません。ファイルのように機能するパイプを作成しますが、実際にそのデータをディスクに書き込むのではなく、2 つのプログラム間で渡すだけです。

そのためのファイル記述子があります。システムによっては、そのデータを傍受するのが簡単または困難になる場合がありますが、いつでも可能です。たとえば、Linux では、/proc/<pid>/fd/開いているすべてのファイル記述子を調べて、それらを操作 (読み取りまたは書き込み) することができます。

于 2013-01-02T23:23:57.997 に答える