1

Linux用のセキュリティソフト(SW)をやっています。SW が行うことの 1 つは、何らかのプロセスが開始されると、SW がプロセスの /proc/ エントリを stat() し、エントリの inode 番号を記憶することです。後でプロセスがまだ実行中であること (および再起動されていないこと) を確認する必要がある場合、SW はプロセスの inode を再度検索し、記憶されているものと比較します。最近まで、特定のアプリケーション (Opera ブラウザー 11.10beta) について誤ったアラートを受け取るようになるまで、すべてが順調でした。基本的に、Opera の実行中に、その /proc/PID エントリの inode 番号が変更されたように見えますが、これは不可能であると考えられていました。これは、SW のセキュリティ概念の動作においてかなり大きな問題です。プロセスが実行されている間、その /proc/ エントリの i ノードが変更されないという事実に大きく依存しています。

なぜそのような行動が見られるのか、どなたか教えてください。ありがとう。

4

2 に答える 2

0

正しい方向を示してくれた sehe と、最終的に成功させてくれた Random832 に感謝します。プロセスを実行し、その PID ls -i /proc/21314 を監視しました。ああ!そのディレクトリの下にあるすべてのエントリの inode 番号は、約 2 秒後に変更されました。15分。したがって、inode番号はprocfsで永続的であることを意図したものではありません:(

于 2011-09-19T19:39:32.077 に答える
0

防御的なプログラミングの習慣に対して+1。

免責事項 自明でない場合: 私はここでブレインストーミングを行っているだけです。すぐに答えを出すことができないことは明らかであり、私の考えはコメントに収まりませんでした。解決につながらないので削除します

私は確かに、オペラがforked/ exec-ed自体をしていないことを確認します(おそらくあなたの知性を侮辱して申し訳ありません:));

次に、名前空間とchrootを見てください

編集

編集

プロセスIDが変更されたに違いないと思います(または、ユーザープロセスに見えるようにprocfsが再マウントされましたか?):

/proc の下には、一般的なシステム情報と特定のプロセス情報および統計情報があります。Linux では、さまざまな種類の情報を inode 番号で区別します。Linux の inode 番号は 32 ビットの数値で表され、PID (プロセス識別子) は 16 ビットの数値で表されます。このスキーマでは、Linux は i ノード番号を 16 ビットの 2 つの半分に分割します。左半分は PID 番号として解釈され、右半分は情報のクラスとして解釈されます。PID=0 は無効であるため、Linux はこの値を使用して、inode にグローバル情報が含まれていることを示します。(ソース

于 2011-09-19T11:38:38.323 に答える