logo

Linux Virtualization - Choot Jail

Chroot na operačních systémech UNIX je operace, která mění zjevný kořenový adresář pro současný proces běhu a jeho děti. Programy, které běží v tomto upraveném prostředí, nemohou přistupovat k souborům mimo určený strom adresáře. To v podstatě omezuje jejich přístup ke stromu adresáře, a proto získají jméno „Choot Jail“.

Myšlenka je, že vytvoříte strom adresáře, kde zkopírujete nebo odkazujete ve všech systémových souborech potřebných pro spuštění procesu. Poté použijete volání systému CHROOT pro změnu kořenového adresáře tak, aby byl na základně tohoto nového stromu a zahájil proces spuštěn v tomto prostředí Choroted. Protože ve skutečnosti nemůže odkazovat na cesty mimo modifikovaný kořen, nemůže na těchto místech zločinně číst ani psát.



Proč je to nutné a jak se liší od virtuálních strojů?

Toto je virtualizace na úrovni operačního systému a často se používá místo virtuálních strojů k vytvoření více izolovaných instancí hostitelského operačního systému. Jedná se o virtualizaci na úrovni jádra a nemá prakticky žádnou režii ve srovnání s virtuálními stroji, které jsou virtualizací aplikací vrstvy v důsledku toho, že poskytuje velmi dobrou metodu pro vytvoření více izolovaných instancí na stejném hardwaru. Virtuální stroj (VM) je implementace softwaru stroje a často využívají to, co se nazývá virtualizace hardwaru, aby se vykreslil virtuální obraz funkčního operačního systému.

Jak používat vězení CHROOT

Základní příkaz k vytvoření vězení Chroot je následující:

 chroot /path/to/new/root command  
OR
chroot /path/to/new/root /path/to/server
OR
chroot [options] /path/to/new/root /path/to/server

POZNÁMKA: Systémový volání CHROOT může použít pouze uživatelský/privilegovaný uživatel. Nepřátelský uživatel s přístupem k příkazu může obejít vězení CHROOT.



Kroky k vytvoření mini-jail pro příkaz „bash“ a „ls“


1. Vytvořte adresář, který bude působit jako kořen příkazu.

 $ mkdir jailed  
$ cd jailed

2. Vytvořte všechny základní adresáře pro spuštění příkazu: V závislosti na operačním systému se mohou požadované adresáře změnit. Logicky vytváříme všechny tyto adresáře, abychom udrželi kopii požadovaných knihoven. Chcete -li zjistit, co jsou všechny adresáře požadovány, podívejte se na krok 4.

 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3.Run the What 'Command: Spusťte příkaz „Který“ a najděte umístění příkazu ls a bash. Po spuštění, které příkazové popisování těchto binárních souborů v adresáři „bin“ našeho vězení. Ujistěte se, že nemáte žádný z těchto příkazů alias. Od nynějška bychom odkazovali na náš adresář jako 'Uvězněn' Adresář pro pohodlí.



 $ unalias ls # Required only if you have aliased ls command  
$ unalias bash # Required only if you have aliased bash command
$ cp $(which ls) ./bin/
$ cp $(which bash) ./bin/

4. Zkopírujte příslušné knihovny/objekty : Pro spustitelné soubory v našem Uvězněn Adresář do práce musíme zkopírovat příslušné knihovny/objekty do uvězněného adresáře. Ve výchozím nastavení se spustitelný soubor dívá na místa začínající '/'. K nalezení závislostí používáme příkaz 'ldd'

$ ldd $(which bash)  
linux-vdso.so.1 => (0x00007ffc75dd4000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000)
/lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)

Spusťte následující příkazy a vytvořte vhodné adresáře.

$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu/  
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/

Podobně pro LS 

$ ldd $(which ls)  
linux-vdso.so.1 => (0x00007fff4f05d000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000)
/lib64/ld-linux-x86-64.so.2 (0x000055e836c69000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/  
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/
$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/


Konečná struktura adresáře musí být podobná

CHROOT vězení' title=

5. sudo chroot: Spusťte tento příkaz a změňte kořen na uvězněný adresář spolu s cestou ke skořápce. Ve výchozím nastavení se pokusí načíst shell '/bin/sh'.

 $ cd ..  
$ sudo chroot jailed /bin/bash

Při spuštění příkazu chroot můžete čelit této chybě 

chroot: failed to run command `/bin/bash': No such file or directory

To může být způsobeno 2 důvody, proč soubor neexistuje (což je zřejmé), nebo když knihovna načítání selže nebo není k dispozici. Pokud jsou knihovny na správném místě, dvakrát zkontrolujte.

6. Nová skořápka musí vyskočit: Je to náš uvězněný bash. V současné době máme pouze 2 příkazy nainstalované bash a ls. Naštěstí jsou CD a PWD vestavěné příkazy v Bash Shell, a proto je můžete také použít.

Provoďte se kolem adresáře, zkuste přistupovat k 'CD /../' nebo něco podobného. Zkuste zlomit vězení pravděpodobně nebudete schopni. :)

Opustit z vězení 

 $ exit

Nejdůležitější a nejzajímavější část je, že když běžíte 

 $ ps aux

a najděte proces, který zjistíte, že existuje pouze jeden proces 

root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash

Zajímavé je, že zpracovává ve vězněné skořápce jako jednoduchý dětský proces této skořápky. Všechny procesy uvnitř uvězněného prostředí jsou v hostitelském operaci jen jednoduchý proces na úrovni uživatelů a jsou izolovány jmennými prostory poskytovanými jádrem, takže existuje minimální režie a jako další výhoda získáme izolaci.

Podobně vám můžete přidat více příkazů k virtuálnímu uvězněnému prostředí. Chcete -li přidat složitější programy, možná budete muset vytvořit více adresářů jako '/proc' a '/dev'. Ty zvyšují složitost procesu. Doufejme, že to pro náš účel nevyžadujeme.

To je vše, co potřebujete vědět o Chootu a uvěznění adresářů. Naším konečným cílem je pochopit, jaké jsou kontejnery a jak jsou služby jako AWS (Amazon Web Services) Google Cloud a Docker schopné poskytnout na vyžádání tolik virtuálních instancí operačních systémů. Také jak Sys-admin provozuje více serverů webových stránek pro více domén na jediném fyzickém stroji.