Можно ли прочитать файл пользовательского пространства (из kernelspace) с помощью BPF / eBPF?

#kernel #bpf #ebpf #userspace

#ядро #bpf #ebpf #пользовательское пространство

Вопрос:

Я знаю, что в качестве общего примечания файлы не должны считываться из kernelspace.

Однако мне интересно искать ключевые слова в определенных файлах с помощью программы BPF.

В идеале я хотел бы, чтобы программа BPF могла быть подключена к Kprobe, и когда событие срабатывает, я бы хотел, чтобы оно сообщало о чтении файла и подсчитывало случаи, когда ключевое слово появляется в файле.

Может кто-нибудь сказать мне, возможно ли чтение в таком файле, и, возможно, предложить некоторые рекомендации относительно того, как я мог бы это сделать.

Спасибо, Сэм

Комментарии:

1. Почему вы хотите сделать это из пространства ядра?

Ответ №1:

Нет, это невозможно.

Но, возможно, вы сможете достичь чего-то близкого, если пересмотрите свой дизайн:

  • Если файл, который вы хотите прочитать, напрямую связан с процессом, который вы хотите исследовать, то, например, вы можете присоединить программу eBPF к функции, используемой этим процессом для доступа к файлу (например read , write системные вызовы or ). Вы не сможете получить доступ к файлу, но у вас может быть доступ к данным, прочитанным или записанным вашим процессом, и подсчитать экземпляры ваших ключевых слов там.
  • Если содержимое файла напрямую не связано с отслеживаемым процессом, но оно каким-то образом необходимо для принятия решения, возможно, вы могли бы обработать его с помощью программы пользовательского пространства, а затем передать соответствующие данные (например, количество вхождений вашего ключевого слова) в карту eBPF. Затем программа eBPF может считывать эти данные и принимать решения на их основе.