Nemrég megnéztem, hogy hol tart azeweOSfejlesztés és láttam, hogy immáronBPF enabledaz új kernel, illetve a régi is és egy kis kitekintés után azArch,Fedra,OpenSUSEés sok egyéb disztró is kapcsolgatja ezt a bizonyos funkciót, ami egy kezdőnek okozhat némi fejtörést.
Gondoltam készítek egy kis összefoglalót a témában.
🛡️ Tehát mi az az LSM?
AzLSM (Linux Security Modules)egy keretrendszer a Linux kernelben, amely lehetővé teszi, hogy különféle biztonsági modulokközvetlenül a kernel döntéshozatali folyamataibakapcsolódjanak be, pl.:
fájl hozzáférés
hálózati kapcsolatok
processzek létrehozása
jogosultságok ellenőrzése
🧩 Mi az LSM hook?
EgyLSM hookegy olyan pont a kernelben (általában egy függvényhívás), ahol egy LSM modul „be tud szólni”, és például azt mondhatja:
„Ez a folyamat nem nyithatja meg ezt a fájlt!” vagy
„Ez a socket kapcsolat tiltott!”
🔧 Példák LSM hook-okra:
| Hook neve | Mire vonatkozik |
|---|---|
inode_permission | Ellenőrzi, hogy egy fájl elérhető-e az adott művelethez (olvasás, írás) |
task_create | Új folyamat indításának engedélyezése vagy tiltása |
socket_connect | Engedélyezheti vagy megtagadhatja egy hálózati kapcsolat létrehozását |
bpf | eBPF programok betöltésének ellenőrzése |
📦 Milyen LSM-ek használják ezeket?
SELinux: MAC-alapú (Mandatory Access Control) rendszer, policy alapon dönt.
AppArmor: Profile -alapú, egyszerűbb, de szintén LSM hook -okon keresztül működik.
Landlock: Újabb, eBPF -szerű sandboxoló rendszer.
BPF-based LSM: Új lehetőség az LSM hook-okateBPF programmalkezelni (pl. saját biztonsági policy kódolása futásidőben).
🛡️ Mi a BPF?
ABPF(Berkeley Packet Filter) eredetileg egy mechanizmus volt, amit a UNIX rendszerekben fejlesztettek ki ahálózati csomagok szűrésére– például arra, hogy atcpdumpcsak az adott port vagy IP cím forgalmát figyelje.
A BPF célja az volt, hogyhatékonyan és biztonságosan szűrje a hálózati forgalmat a kernel szintjén, mielőtt az bekerülne a felhasználói térbe – ez csökkentette a terhelést és növelte a teljesítményt.
Honnan jött és hogyan fejlődött?
Kezdeti BPF (klasszikus BPF):
Csak hálózati csomagszűrésre alkalmas.
Statikus, korlátozott, nem bővíthető funkciók.
eBPF (extended BPF):
A Linux kernel továbbfejlesztette a BPF-et egyáltalános célú, sandboxolt virtuális géppé.
Most már nemcsak hálózathoz, hanemteljesítményelemzéshez, biztonsághoz, nyomkövetéshezstb. is használható.
Hogyan működik?
A BPF programokat bytecode formájában a kernelbe töltheted.
Ezeket averifikátorellenőrzi: nem lehet végtelen ciklus, memóriasértés stb.
A program egyhook ponthozkapcsolódik (pl. rendszerhívás, hálózati esemény).
A kernel ezután futtatja a BPF programot, amikor az adott esemény megtörténik.
| BPF típus | Funkció | Állapot |
|---|---|---|
| Klasszikus BPF | Hálózati csomagszűrés | Elavult / korlátozott |
| eBPF | Általános célú programok kernel szintű futtatása | Modern, aktívan használt |
🛡️ Mi az eBPF?
📄 Példa: fájlmegnyitások naplózása
A következő bpftrace szkript figyeli aopenatrendszerhívást, és kiírja, hogy ki (PID) milyen fájlt nyit meg:
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat {
printf("PID %d opened file: %s\n", pid, str(args->filename));
}'🔍 Mit csinál ez a szkript?
tracepoint:syscalls:sys_enter_openat: ez a Linux kernel egy tracepointja, ami akkor aktiválódik, amikor egy programopenat()rendszerhívást indít — ez történik minden fájlmegnyitáskor.args->filename: tartalmazza a megnyitni kívánt fájl nevét.pid: az éppen futó folyamat azonosítója.printf(...): kiírja az információt a terminálra.
Lehetőség van egy eBPF programotC-benmegírni és betöltenilibbpfvagybccsegítségével — ez bár mélyebb téma, de nagyobb szabadságot ad.
A BPF hivatalos kernel dokumentáció a legújabb kernelben:
https://www.kernel.org/doc/html/latest/bpf/index.html
AzLSMa kernel doksiban:https://docs.kernel.org/security/lsm.html
GRUB kernel opció a kernel sorban – példa az engedélyezésre:
GRUB_CMDLINE_LINUX="lsm=lockdown,capability,bpf"Egy kis tutorial kezdőknek:
https://eunomia.dev/tutorials/19-lsm-connect/
EweOS progress report:
https://os.ewe.moe/blog/202503-progress-report
Implementációk:
- Arch Linux:
https://github.com/archlinux/svntogit-packages/blob/4615bb2493649ad6fa133f864f94cb95c824f361/trunk/config#L9963 - Fedora:
https://fedorapeople.org/cgit/thl/public_git/kernel.git/tree/kernel-x86_64-fedora.config?h=kernel-5.17.0-0.rc5.20220225git53ab78cd6d5a.106.vanilla.1.fc34&id=e661d91eb909e777a9d28425ef50fcc5ef7fa5ed#n3291 - openSUSE:
https://github.com/openSUSE/kernel-source/commit/c2c25b18721866d6211054f542987036ed6e0a50
Továbbra is várunk mindenkit nagy szeretettel csevegő oldalunkon élőben:
https://skamilinux.hu/chat/
Aktív fórum témák:
https://skamilinux.hu/phpBB3/search.php?search_id=active_topics


















