Zajímalo by mě, co přesně znamená funkce „Podpora jmenných prostorů“ v jádře Linuxu. Používám jádro 3.11.1 (v současnosti nejnovější stabilní jádro).
Pokud se rozhodnu jej zakázat, všimnu si nějaké změny ve svém systému?
A v případě, že se někdo rozhodne využít jmenné prostory, stačí zkompilovat NAMESPACES=Y
v jádře, nebo potřebuje také nástroje pro uživatelský prostor?
Přijatá odpověď:
Stručně řečeno, jmenné prostory poskytují způsob, jak vybudovat virtuální systém Linux uvnitř většího systému Linux. To se liší od spouštění virtuálního stroje, který běží jako neprivilegovaný proces:virtuální stroj se v hostiteli jeví jako jeden proces, zatímco procesy běžící uvnitř jmenného prostoru stále běží na hostitelském systému.
Virtuální systém běžící uvnitř většího systému se nazývá kontejner. Myšlenka kontejneru spočívá v tom, že procesy běžící uvnitř kontejneru věří, že jsou jedinými procesy v systému. Konkrétně uživatel root v kontejneru nemá práva root mimo kontejner (všimněte si, že to platí pouze pro dostatečně nejnovější verze jádra).
Jmenné prostory virtualizují jeden prvek po druhém. Některé příklady typů jmenných prostorů jsou:
- Uživatelské jmenné prostory – to umožňuje procesům chovat se, jako by běžely jako různí uživatelé uvnitř a mimo jmenný prostor. Konkrétně procesy běžící jako UID 0 uvnitř jmenného prostoru mají oprávnění superuživatele pouze s ohledem na procesy běžící ve stejném jmenném prostoru.
Od linuxového jádra 3.8 mohou neprivilegovaní uživatelé vytvářet uživatelské jmenné prostory. To umožňuje běžnému uživateli využívat funkce, které jsou vyhrazeny rootovi (jako je změna směrovacích tabulek nebo možností nastavení). - Jmenné prostory PID – procesy uvnitř jmenného prostoru PID nemohou ukončit ani sledovat procesy mimo tento jmenný prostor.
- Připojit jmenné prostory – to umožňuje procesům mít vlastní pohled na systém souborů. Toto zobrazení může být částečným pohledem, který umožňuje některé části souborového systému skrýt a části překomponovat tak, aby se adresářové stromy objevily na různých místech. Jmenné prostory Mount zobecňují tradiční chroot funkcí Unixu, který umožňuje omezit procesy na konkrétní podstrom.
- Síťové jmenné prostory – umožňují oddělení síťových zdrojů (síťových zařízení) a tím zvyšují izolaci procesů.
Jmenné prostory se spoléhají na jádro, které poskytuje izolaci mezi jmennými prostory. To je docela komplikované správně, takže se stále mohou povalovat bezpečnostní chyby. Riziko bezpečnostních chyb by bylo primárním důvodem nepovolení této funkce. Dalším důvodem, proč to nepovolit, by bylo, když vytváříte malé jádro pro vestavěné zařízení. V jádře pro obecné účely, které byste instalovali na typický server nebo pracovní stanici, by měly být prostory názvů povoleny, stejně jako jakákoli jiná funkce vyspělého jádra.
Související:Linux – Můžeme získat informace o kompilátoru z elfské binárky?Stále existuje málo aplikací, které využívají jmenné prostory. Zde je několik:
- LXC je dobře zavedená. Při poskytování kontejnerů se spoléhá na cgroups.
- virt-sandbox je novější projekt sandboxingu.
- Nejnovější verze prohlížeče Chromium také používají prostory názvů pro izolovaný prostor, pokud jsou k dispozici.
- Rámec uWSGI pro klastrované aplikace používá jmenné prostory pro lepší sandboxing.
Další informace naleznete v sérii článků LWN od Michaela Kerriska.