10

私はいくつかのファイル システム コールをインターセプトする必要があるアプリケーションを作成しています。リンクを解除します。abcなどのファイルを保存したいと思います。ユーザーがファイルを削除した場合は、別の場所にコピーする必要があります。そのため、abc を削除して保存できるようにする前に、リンクを解除してコードを呼び出す必要があります。システムコールのインターセプトに関連するスレッドを調べましたが、LD_PRELOAD のようなメソッドは、これを安全にしてカーネルに実装したいので、このメソッドは役に立たないので、私の場合は機能しません。inotify はイベント後に通知するため、保存できませんでした。そのような方法を提案できますか。カーネル コード自体を変更するのではなく、これをカーネル モジュールに実装したいと考えています。グラハム・リーが提案した別の方法、私はこの方法を考えていましたが、いくつかの問題があります。スペースを消費しないすべてのファイルのハードリンクミラーが必要ですが、ミラーを最新の状態に保つためにドライブを繰り返しミラーリングする必要があるため、それでも問題になる可能性があります。また、クロスパーティションやリンクをサポートしていないパーティションでは機能しないため、ファイル/ディレクトリにフックを添付して、スキャンを繰り返す代わりに変更を監視できるソリューション。また、ハード リンクを使用できない変更されたファイルの書き込みのサポートを追加したいと考えています。システム コールを置き換えてシステム コールをインターセプトしたいのですが、Linux > 3.0 でそれを行う方法を見つけることができませんでした。それを行うためのいくつかの方法を提案してください。クロスパーティションおよびリンクをサポートしていないパーティションで動作するため、ファイル/ディレクトリにフックを付けて、スキャンを繰り返す代わりに変更を監視できるソリューションが必要です。また、ハード リンクを使用できない変更されたファイルの書き込みのサポートを追加したいと考えています。システム コールを置き換えてシステム コールをインターセプトしたいのですが、Linux > 3.0 でそれを行う方法を見つけることができませんでした。それを行うためのいくつかの方法を提案してください。クロスパーティションおよびリンクをサポートしていないパーティションで動作するため、ファイル/ディレクトリにフックを付けて、スキャンを繰り返す代わりに変更を監視できるソリューションが必要です。また、ハード リンクを使用できない変更されたファイルの書き込みのサポートを追加したいと考えています。システム コールを置き換えてシステム コールをインターセプトしたいのですが、Linux > 3.0 でそれを行う方法を見つけることができませんでした。それを行うためのいくつかの方法を提案してください。

4

4 に答える 4

7

カーネルにフックしてシステム コールをインターセプトする限り、これは私が書いたセキュリティ モジュールで行うことです。

https://github.com/cormander/tpe-lkm

コードについては、hijacks.c と symbols.c を見てください。それらがどのように使用されるかは、hijack_syscallssecurity.c 内の関数にあります。Linux > 3.0 ではまだこれを試していませんが、基本的なコンセプトは同じです。

少しトリッキーで、リンクを解除する前にファイルのコピーを行うために大量のカーネル コードを書かなければならないかもしれませんが、ここでは可能です。

于 2011-12-22T17:11:07.263 に答える
2

inotifyでリンク解除イベントを見ることができますが、これはあなたの目的には遅すぎるかもしれません (私はあなたの目的がわからないのでわかりません。実験して調べる必要があります)。LSM (SMACK、TOMOYO など) に基づくカーネル内の代替手段は、実際には強制アクセス制御のためのものであるため、目的には適していない可能性があります。

于 2011-12-21T11:25:21.657 に答える
1

削除のみを処理したい場合は、link監視されているファイルへのハードリンクの「シャドウ」ディレクトリ (を介して作成) を保持できます ( inotifyGraham Lee が提案したように、を介して)。

元のファイルがリンクされていない場合でも、カーネル モジュールを使用せずに、必要に応じてシャドウ ファイルを処理できます。

于 2011-12-21T13:12:44.027 に答える