是否可以使用 BPF/eBPF 读取用户空间文件从内核空间?

问题描述

我知道一般来说,不应该从内核空间读取文件

但是我对使用 BPF 程序在某些文件中查找关键字很感兴趣。

理想情况下,我希望 BPF 程序能够附加到 kprobe,当事件触发时,我希望它说读取文件并计算关键字出现在文件中的实例。

谁能告诉我是否可以读取这样的文件,并可能提供一些有关我如何处理此文件的指导。

谢谢, 山姆

解决方法

不,这是不可能的。

但如果你重新考虑你的设计,你可能会取得一些接近的结果:

  • 如果您要读取的文件与您要探测的进程直接关联,那么例如您可以将一个 eBPF 程序附加到该进程使用的函数以访问该文件(例如 readwrite 系统调用)。您将无法访问该文件,但您可以访问您的进程读取或写入的数据,并计算其中的关键字实例。
  • 如果文件内容与您跟踪的进程没有直接关系,但需要以某种方式做出决定,您可以使用用户空间程序对其进行处理,然后提供相关数据(例如出现次数您的关键字)转换为 eBPF 映射。然后,eBPF 程序可以读取这些数据并根据它做出决定。