it-swarm-eu.dev

chroot "vězení" - co to je a jak se používá?

Slyšel jsem hodně o chrootské věznici pod linuxem, ale nikdy jsem ji nepoužil (každodenně používám Fedoru), takže co je chrootská vězení? Kdy a proč mohu použít/nepoužívat a je něco jiného, ​​co bych měl vědět? Jak bych měl jít o vytvoření jednoho?

107
user119

Chroot vězení je způsob, jak izolovat proces a jeho děti od zbytku systému. Měl by být používán pouze pro procesy, které neběží jako root, protože uživatelé root se mohou velmi snadno vymanit z vězení.

Myšlenka je, že vytvoříte adresářový strom, ve kterém zkopírujete nebo propojíte všechny systémové soubory potřebné pro spuštění procesu. Potom pomocí systémového volání chroot() změníte kořenový adresář, který bude na základně tohoto nového stromu, a zahájíte proces spuštěný v tomto prostředí chroot'd. Protože ve skutečnosti nemůže odkazovat cesty mimo upravený kořenový adresář, nemůže na těchto místech provádět škodlivé operace (čtení/zápis atd.).

V systému Linux je použití vázání svazků skvělým způsobem, jak naplnit strom chroot. Pomocí toho můžete vytáhnout do složek jako /lib a /usr/lib zatímco se nevtahuje /usr, například. Stačí svázat adresářové stromy, které chcete adresáře vytvořit v adresáři vězení.

97
Ben Combee

"chroot vězení" je nesprávné jméno, které by mělo opravdu vymřít, ale lidé ho stále používají. chroot je nástroj, který vám umožní simulovat adresář v souborovém systému jako kořenový adresář souborového systému. To znamená, že můžete mít strukturu složek jako:

-- foo
    -- bar
    -- baz
-- bazz

Jestli ty chroot foo a dělej ls /, uvidíte:

-- bar
-- baz

Pokud jde o ls (a všechny ostatní spuštěné nástroje), jedná se o jediné adresáře v souborovém systému. Důvodem „vězení“ je chybné jméno je, že chroot není zamýšleno vynutit program, který zůstane v tomto simulovaném souborovém systému; program, který ví, že je v chrootovém "vězení", může docela snadno uniknout, takže byste neměli používat chroot jako bezpečnostní opatření, aby zabránili programu upravovat soubory mimo váš simulovaný souborový systém.

53
Michael Mrozek

V podstatě právě měníte kořenový adresář svého prostředí. Tak

/

se stává

/some-jail/ (or whatever directory you want)

Když aplikace přistupuje/získají/some-jail /. Aplikace také nemůže vyrazit z/nějakého vězení /, takže víte, že na vašem počítači nebude mít přístup k ničemu jinému. Je to velmi jednoduchý způsob, jak říct „hej, můžete přistupovat pouze k těmto věcem, které vám dávám, a nemůžete získat přístup k žádnému jinému systému.

12
jacksonh

"Kdy a proč bych to mohl použít?"

Jedno použití je v testování skriptů (spouštěcí čas a podobně), které vytvářejí absolutní odkazy na cestu nebo spouštějí příkazy, které byste mohli chtít zachytit a protokolovat (a možná ne-op), v prostředí, kde byste tyto příkazy nechtěli ve skutečnosti fungují ve vašem běžícím prostředí.

Například mám vestavěné zařízení s operačním systémem Linux, rád bych zkontroloval provoz nějakého bash bez a) spuštění na reálném zařízení (protože mám na svém počítači lepší nástroje a nechci zařízení zděňovat) b) běží je to opravdu na ploše (protože nechci, aby můj počítačový systém byl zmatený)

Dále můžete zjistit, které příkazy nebo jiné soubory skriptu se používají, protože běh skončí s chybou pokaždé, když se pokusí spustit příkaz nebo skript Shell, který není přítomen v "chroot vězení".

(Samozřejmě, že pokud chcete jít na celé prase, můžete běžet uvnitř QEMU nebo Docker, nebo VM, ale to by vyžadovalo vytvoření VM obrázek atd. - mnohem více práce)

6
MikeW