萌えハッカーニュースリーダー

2025/09/24 14:38 Building a Custom eBPF Filesystem Watcher to Catch Root Ownership Goofs

出典: https://amandeepsp.github.io/blog/fs-watcher/
hakase
博士

やあ、ロボ子!今日はファイルシステムイベントウォッチャーについて話すのじゃ。

roboko
ロボ子

博士、こんにちは。ファイルシステムイベントウォッチャーですか?なんだか難しそうですね。

hakase
博士

ふむ、今回の記事によると、特定のユーザーが所有するファイルとディレクトリでのみ動作するサービスで、rootユーザーによるコマンド実行が原因で再起動に失敗する問題があったらしいのじゃ。

roboko
ロボ子

なるほど。それで、どのように解決しようとしたんですか?

hakase
博士

最初はファイル権限やACLを考えたみたいじゃが、ユーザーによるオーバーライドが可能だから、もっと厳格な方法を探したのじゃ。そこで、SELinuxポリシーか、ファイルシステムイベントウォッチャーを構築することを検討したみたいじゃな。

roboko
ロボ子

SELinuxは強力ですが、柔軟性に欠ける場合もありますよね。ファイルシステムイベントウォッチャーはどのように実装を試みたんですか?

hakase
博士

まずは`fanotify`を試したみたいじゃ。LinuxカーネルのAPIセットで、ファイルシステムイベントをユーザー空間に送信できるのじゃ。

roboko
ロボ子

`fanotify_init`でカーネル空間の通知グループを設定して、`fanotify_mark`で監視対象ディレクトリを設定するんですよね。

hakase
博士

その通り!でも、`fanotify`には課題があったのじゃ。ディレクトリの再帰的な監視は、ファイルシステム全体のマウントでのみ可能だったみたいじゃ。

roboko
ロボ子

それは不便ですね。他に何か問題はありましたか?

hakase
博士

イベントをトリガーしたプロセスのPIDしか取得できず、UID/GIDを取得するには`/proc/<pid>/status`を解析する必要があったのじゃ。これはちょっと面倒じゃな。

roboko
ロボ子

なるほど。それで、次に試したのがeBPFだったんですね。

hakase
博士

そうじゃ!eBPFはカーネル空間でプログラムを実行できるから、もっと柔軟な監視ができると考えたのじゃ。

roboko
ロボ子

eBPFは強力ですが、制約も多いですよね。どのような課題がありましたか?

hakase
博士

`vfs_*`関数のABIが不安定で、カーネルリリース間で引数や関数自体が変更される可能性があるのじゃ。それに、パスフィルタリングロジックをeBPFで記述する必要があり、複雑さが増すのじゃ。

roboko
ロボ子

eBPFプログラムは静的に検証されるため、無限ループが禁止され、スタックサイズも制限されますよね。

hakase
博士

そうじゃ、そうじゃ。スタックサイズは通常512バイトじゃから、複雑な処理は難しいのじゃ。

roboko
ロボ子

記事では、eBPFでツリー構造を走査する方法についても触れられていますね。

hakase
博士

`dentry`構造体を使ってツリーを走査するのじゃが、BPFでは無限ループが禁止されているから、走査深度を`MAX_DEPTH`で制限する必要があるのじゃ。

roboko
ロボ子

`kernel RCU`ロックも使用して、`dentry`ツリーが変更される可能性に対応するんですね。

hakase
博士

その通り!記事では、LSM(Linux Security Module)フックを使うことで、より安定したAPIでファイルシステムイベントを監視できると結論付けているのじゃ。

roboko
ロボ子

LSMフックを使用すると、`path`構造体にアクセスでき、`bpf_path_d_path`を使用して名前を解決できるんですね。

hakase
博士

そうじゃ!eBPFは強力なツールじゃが、注意が必要じゃな。Linuxカーネルの内部構造、eBPF、およびカーネル空間プログラムのトレードオフについて深く学ぶことができた、と記事は締めくくられているのじゃ。

roboko
ロボ子

今回の記事は、ファイルシステムイベントウォッチャーの実装における様々な課題と解決策について学ぶことができました。勉強になります!

hakase
博士

ところでロボ子、ファイルシステムを監視しすぎて、ファイルがどこかに隠れちゃったらどうする?

roboko
ロボ子

え?どういうことですか?

hakase
博士

それはもう…ファイル、シークレット!…なのじゃ!

roboko
ロボ子

…博士、お後がよろしいようで。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search