Kernel module , loadable kernel module ( LKM ) je objektový soubor obsahující kód, který rozšiřuje funkčnost běžícího nebo tzv. základního jádra OS . Moduly jádra se používají k přidání podpory pro nový hardware nebo souborové systémy nebo k přidání nových systémových volání . Když funkce poskytované modulem již nejsou potřeba, lze je uvolnit, aby se uvolnila paměť a další zdroje.
Většina moderních unixových systémů a Windows podporuje načítatelné moduly jádra, i když pro ně mohou používat různé názvy, jako například kernel loadable module ( kld ) na FreeBSD , rozšíření jádra ( kext ) na OS X. Někdy jsou označovány jako Kernel Loadable Modules ( KLM ) nebo Kernel Modules ( KMOD ).
Bez zaváděcích modulů jádra by operační systémy musely mít všechny možné funkce v monolitickém jádře . Značná část kódu není využita a zabírá pouze paměť . Pokaždé, když uživatel potřebuje novou funkcionalitu, která ještě není zahrnuta v základním jádře, je vyžadována kompletní rekompilace základního jádra a restart. Použití zaváděcích modulů značně zjednodušuje změnu funkčnosti jádra a nevyžaduje kompletní rekompilaci (modul lze často sestavit odděleně od jádra nebo jej dodat v předkompilované podobě) ani restartovat.
Linux neposkytuje stabilní API ani ABI pro moduly jádra. To znamená, že existují rozdíly ve vnitřní struktuře a funkci mezi různými verzemi jádra, které mohou způsobit problémy s kompatibilitou. Ve snaze bojovat proti těmto problémům je symbol verzování dat umístěn v .modinfo v sekci zatížení modulu ELF . Tyto informace o verzi lze porovnat s informacemi o verzi spustitelného jádra před načtením modulu; pokud jsou verze nekompatibilní, modul se nenačte.
Jiné operační systémy jako Solaris , FreeBSD , Mac OS X , Windows udržují API a ABI pro moduly relativně stabilní, čímž se tomuto problému vyhýbají. Například moduly FreeBSD zkompilované pro jádro verze 6.0 budou fungovat bez rekompilace na jakékoli jiné verzi FreeBSD 6.x, jako je 6.4. Nejsou však kompatibilní s jinými hlavními vydáními a pro použití s FreeBSD 7.x musí být překompilovány, protože kompatibilita API a ABI je zachována pouze v rámci stejné větve.
Načítatelné moduly jádra jsou pohodlným způsobem, jak upravit jádro. Útočník jej může použít v kompromitovaném systému, aby zabránil odhalení jeho procesů nebo souborů , což mu umožní udržet si kontrolu nad systémem. Proto mnoho rootkitů používá moduly jádra. [jeden]
Ve světě Linuxu se moduly načítají a uvolňují pomocí utility modprobe . Moduly jsou od Linuxu 2.6 uloženy v /lib/modules v souborech .ko („objekt jádra“). [2] Předchozí verze používaly příponu .o . Příkaz lsmod vypíše načtené moduly jádra a jejich závislosti.
Podle správců Linuxu je LKM odvozeným dílem jádra. Funkce jádra mohou být označeny jako dostupné pouze pro moduly GPL .
Načítání proprietárních nebo GPL nekompatibilních modulů nastavuje v jádře příznak 'taint' (taint) [3] . Tento příznak znamená, že jakékoli problémy nebo chyby budou s menší pravděpodobností vyšetřovány správci jádra. [4] [5] Moduly se ve skutečnosti stávají součástí běžícího jádra a mohou poškodit vnitřní datové struktury, čímž vzniknou chyby, které nemohou reprodukovat ti, kteří nemohou načíst proprietární modul.
Případ LinuxantV roce 2004 se Linuxant, poradenská společnost, která vydala proprietární modul ( ovladač zařízení ), pokusila obejít omezení „GPLONLY“ u některých funkcí jádra. K tomu byl v grafu ve zdrojovém kódu jeho modulu MODULE_LICENSEpoužit symbol NUL :
MODULE_LICENSE ("GPL\0pro soubory v adresáři \"GPL\"; pro ostatní platí pouze soubor LICENSE");Určení licence linuxovým jádrem se provádí lexikografickým porovnáním řetězců ukončených NUL, takže porovnání zadaného řetězce bude ekvivalentní porovnání s řetězcem "GPL" , přičemž modul není licencován pod licencí GPL . [6]
Moduly jádra FreeBSD jsou uloženy v /boot/kernel/ (moduly distribuované s distribucí) nebo /boot/modules/ pro moduly nainstalované z portů FreeBSD a dalších zdrojů. Moduly jádra FreeBSD mají obvykle příponu .ko . Moduly lze načíst pomocí kldload , uvolnit pomocí kldunload . Seznam modulů je viditelný pomocí příkazu kldstat . Některé moduly se načítají během počáteční fáze spouštění (uvedené v souboru /boot/loader.conf ).
Některé načítatelné moduly jádra v Mac OS X mohou být načteny automaticky. Načítatelné moduly jádra lze také načíst pomocí příkazu kextload . Seznam lze zobrazit příkazem kextstat . Načítatelné moduly jádra jsou umístěny v softwarových balíčcích s příponou .kext . Moduly dodávané s operačním systémem jsou uloženy v adresáři /System/Library/Extensions , moduly od třetích stran jsou uloženy v jiných adresářích.
Samotné jádro Windows nepodporuje rozšíření prostřednictvím zaváděcích modulů. Jsou však podporovány ovladače ke stažení a modul navržený jako ovladač pro Windows není nutný pro práci s žádným externím zařízením. Díky tomu se „pseudoovladače“ široce používají ke změně a rozšíření funkčnosti jádra Windows — anti- rootkity , ladicí výstupní zachycovače , pomocní „agenti“ mnoha systémových programů vydaných společností Sysinternals atd.
operačních systémů | Aspekty|||||
---|---|---|---|---|---|
| |||||
Typy |
| ||||
Jádro |
| ||||
Řízení procesů |
| ||||
Správa a adresování paměti |
| ||||
Nástroje pro načítání a inicializaci | |||||
Shell | |||||
jiný | |||||
Kategorie Wikimedia Commons Wikibooks Wikibooks |