Kernelmodul , betölthető kernelmodul ( LKM ) egy olyan kódot tartalmazó objektumfájl , amely kiterjeszti egy futó vagy úgynevezett alap operációs rendszer kernelének funkcionalitását . A kernelmodulok új hardver- vagy fájlrendszerek támogatására, illetve új rendszerhívások hozzáadására szolgálnak . Ha a modul által biztosított funkciókra már nincs szükség, a memória és egyéb erőforrások felszabadítása érdekében ki lehet tölteni.
A legtöbb modern Unix rendszer és a Windows támogatja a betölthető kernel modulokat, bár eltérő elnevezéseket használhatnak ezekre, mint például a kernel betölthető modulja ( kld ) FreeBSD -n , vagy kernelkiterjesztés ( kext ) OS X -en . Néha Kernel Loadable Modules ( KLM ) vagy Kernel Modules ( KMOD ) néven is hivatkoznak rájuk.
Betölthető kernelmodulok nélkül az operációs rendszereknek minden lehetséges funkcióval rendelkezniük kell egy monolitikus kernelben . A kód jelentős része nincs használatban, csak a memóriát foglalja el . Minden alkalommal, amikor a felhasználónak olyan új funkcióra van szüksége, amely még nem szerepel az alap kernelben, az alap kernel teljes újrafordítása és újraindítás szükséges. A betölthető modulok használata nagymértékben leegyszerűsíti a kernel funkcionalitásának megváltoztatását, és nem igényel teljes újrafordítást (egy modul gyakran a kerneltől külön is felépíthető, vagy előre lefordított formában szállítható) vagy újraindításra.
A Linux nem biztosít stabil API -t vagy ABI -t a kernelmodulokhoz. Ez azt jelenti, hogy a különböző kernelverziók belső felépítésében és működésében eltérések vannak, amelyek kompatibilitási problémákat okozhatnak. A problémák leküzdése érdekében az adatverziós szimbólumot a .modinfo fájlba helyezték el az ELF modul betöltése szakaszában. Ez a verzióinformáció összehasonlítható a végrehajtható kernel verzióinformációival a modul betöltése előtt; ha a verziók nem kompatibilisek, akkor a modul nem töltődik be.
Más operációs rendszerek, például a Solaris , a FreeBSD , a Mac OS X , a Windows viszonylag stabilan tartják a modulok API -ját és ABI -ját, elkerülve ezt a problémát. Például a 6.0-s kernelverzióhoz fordított FreeBSD modulok újrafordítás nélkül működnek a FreeBSD 6.x bármely más verzióján, például a 6.4-en. Azonban nem kompatibilisek más nagyobb kiadásokkal, és újra kell fordítani őket a FreeBSD 7.x-hez való használathoz, mivel az API és az ABI kompatibilitás csak ugyanazon az ágon belül marad fenn.
A betölthető kernelmodulok kényelmes módot jelentenek a kernel módosítására, ezt használhatja a támadó egy feltört rendszerben, hogy megakadályozza folyamatainak vagy fájljainak észlelését , lehetővé téve számára, hogy megtartsa az irányítást a rendszer felett. Ezért sok rootkit használ kernelmodulokat. [egy]
A Linux világában a modulokat a modprobe segédprogram tölti be és tölti ki . A modulokat a / lib/modules .ko ("kernel objektum") fájlokban tárolja a Linux 2.6 óta. [2] A korábbi verziók a .o kiterjesztést használták . Az lsmod parancs felsorolja a betöltött kernelmodulokat és azok függőségeit.
A Linux őrzői szerint az LKM a kernel származékos munkája . Előfordulhat, hogy a kernelfunkciók csak a GPL - modulokhoz használhatók.
A saját vagy GPL-lel nem kompatibilis modulok betöltése beállítja a 'taint' (tajt) jelzőt [3] a kernelben. Ez a jelző azt jelenti, hogy a kernel őrzői kisebb valószínűséggel vizsgálnak ki bármilyen problémát vagy hibát . [4] [5] A modulok tulajdonképpen a futó kernel részévé válnak, és megrongálhatják a belső adatstruktúrákat, olyan hibákat hozva létre, amelyeket nem reprodukálhatnak azok, akik nem tudnak saját modult betölteni.
A Linuxant esete2004-ben a Linuxant, egy tanácsadó cég, amely egy saját modult ( eszközillesztőt ) adott ki, megpróbálta megkerülni a „GPLONLY” korlátozásokat egyes kernelfunkciókra vonatkozóan. Ehhez a NULMODULE_LICENSE szimbólumot használták a gráfban a modul forráskódjában :
MODULE_LICENSE ("GPL\0a \"GPL\" könyvtárban lévő fájlok esetén; másokra csak a LICENC fájl vonatkozik");A licenc meghatározása a Linux kernel által a NUL-végződésű karakterláncok lexikográfiai összehasonlításával történik, így a megadott karakterlánc összehasonlítása egyenértékű a "GPL" karakterlánccal való összehasonlítással , míg a modul nem licencelt a GPL licenc alatt . [6]
A FreeBSD rendszermag moduljai a /boot/kernel/ (a disztribúcióval együtt terjesztett modulok) vagy a /boot/modules/ könyvtárban vannak tárolva a FreeBSD portokról és más forrásokból telepített modulok esetén . A FreeBSD kernelmoduljai általában .ko kiterjesztéssel rendelkeznek . A modulok kldload - al tölthetők , kldunload -al kirakhatók . A modulok listája a kldstat paranccsal látható . Egyes modulok a kezdeti rendszerindítási fázisban töltődnek be ( a /boot/loader.conf fájlban megadva ).
Előfordulhat, hogy a Mac OS X egyes betölthető kernelmoduljai automatikusan betöltődnek. A betölthető kernelmodulok a kextload paranccsal is betölthetők . A lista a kextstat paranccsal jeleníthető meg . A betölthető kernelmodulok .kext kiterjesztésű szoftvercsomagokban találhatók . Az operációs rendszerrel szállított modulok a /System/Library/Extensions könyvtárban , a harmadik féltől származó modulok pedig más könyvtárakban tárolódnak.
Maga a Windows kernel nem támogatja a betölthető modulokon keresztüli bővítményeket. A letölthető illesztőprogramok azonban támogatottak , és a Windows-illesztőprogramnak tervezett modul nem szükséges ahhoz, hogy külső eszközzel működjön. Emiatt a „pszeudo-illesztőprogramokat” széles körben használják a Windows kernel funkcionalitásának megváltoztatására és kiterjesztésére – anti - rootkitek , hibakereső kimeneti elfogók , a Sysinternals által kiadott számos rendszerprogram kiegészítő „ügynökei” stb.
Az operációs rendszerek szempontjai | |||||
---|---|---|---|---|---|
| |||||
Típusok |
| ||||
Sejtmag |
| ||||
Folyamatmenedzsment _ |
| ||||
Memóriakezelés és címzés | |||||
Betöltési és inicializálási eszközök | |||||
Héj | |||||
Egyéb | |||||
Kategória Wikimedia Commons Wikikönyvek Wikiszótár |