# eBPF

> For AI agents: the complete glossary index is at [llms.txt](https://glossary.cncf.io/ru/llms.txt).
> Markdown versions of every glossary page are available by appending `index.md` to the page URL.

Технология eBPF (англ. extended Berkley Packet Filter — расширенный фильтр пакетов Беркли) 
позволяет небольшим программам или скриптам запускаться в пространстве ядра ОС Linux 
без необходимости изменять код ядра или загружать модули ядра.

В ОС Linux есть два пространства: пространство ядра (kernel space) и пространство пользователя (user space). 
Ядро представляет основу операционной системы и имеет неограниченный доступ к аппаратному обеспечению.

Приложения находятся в пространстве пользователя. 
Когда возникает необходимость в привилегированном доступе, приложения отправляют запрос к ядру.
Для приложений, требующих большей свободы действий, например, прямого доступа к аппаратному обеспечению, 
ядро может быть расширено за счёт модулей ядра Linux. 
Такой подход расширяет функциональность ядра, доступную по умолчанию, открывая приложениям доступ к более низкоуровневым компонентам.
Однако расширение ядра с помощью модулей влечет за собой риски и потенциально снижает безопасность, что делает eBPF привлекательной альтернативой.

## Какую проблему решает

Как правило, приложения работают в пространстве пользователя.
Если возникает необходимость в привилегированном доступе (например, к аппаратному обеспечению),
приложение отправляет запрос к ядру. такой запрос называется «системный вызов».
В большинстве случает такой подход прекрасно работает. 
Однако бывают ситуации, когда разработчики нуждаются в более низкоуровневом доступе к системе.
Такие ситуации, как правило, связаны с наблюдаемостью (observability), безопасностью и работой с сетью.
Использование модулей ядра Linux позволяет решить вышеупомянутую проблему без изменения исходного кода ядра.
К сожалению, у этого подхода есть не только плюсы, но и минусы (в первую очередь, связанные с безопасностью).
Модули ядра работают в пространстве ядра. Это означает, что сбой модуля неминуемо приводит к сбою ядра и, как следствие, падению всей системы.
Кроме того, модули ядра наделены повышенными привилегиями и имеют прямой доступ к системным ресурсам. Если не обеспечить должную защиту, этими свойствами модулей могут воспользоваться злоумышленники.

## Как именно решает проблему

В отличие от модулей ядра, eBPF позволяет запускать пользовательские программы в более контролируемой и ограниченной среде.
eBPF-программа работает в «песочнице» внутри ядра. Тем самым обеспечивается необходимая изоляция и снижаются риски.
Даже если в eBPF-программе обнаружится уязвимость или какой-то изъян, их воздействие ограничится «песочницей».
Более того, прежде чем программа сможет запуститься внутри ядра, она должна пройти процесс верификации.
Верификатор проверяет eBPF-программу на наличие потенциально небезопасного кода: например, доступ к памяти за пределами выделенного буфера, бесконечные циклы и неавторизованный доступ к функциям ядра.
Верификация гарантирует, что eBPF-программа не войдет в бесконечный цикл и не приведет к сбою ядра.
Такие меры безопасности делают eBPF более надежным вариантом запуска приложений в ядре по сравнению с модулями ядра Linux.

---

- Canonical URL: https://glossary.cncf.io/ru/ebpf/
- Status: Completed
- Последнее изменение April 9, 2024: ` Update ebpf.md ` ([85a715f](https://github.com/cncf/glossary/commit/85a715f8e445b6621bde2bf1acfb6520487d5d4d))
- Source: https://github.com/cncf/glossary/blob/main/content/ru/ebpf.md
- License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)
