logo

Virtualizácia Linux - väzenie Chroot

Operačné systémy Chroot on Unix je operácia, ktorá mení zdanlivý koreňový adresár pre súčasný proces prevádzky a jeho deti. Programy, ktoré sa prevádzkujú v tomto upravenom prostredí, nemajú prístup k súborom mimo určeného stromu adresára. To v podstate obmedzuje ich prístup k adresárovému stromu, a tak dostanú meno „Chroot Jail“.

Ide o to, že vytvoríte strom adresára, kde skopírujete alebo prepojíte vo všetkých systémových súboroch potrebných na spustenie procesu. Potom pomocou systému Chroot System Call zmení koreňový adresár tak, aby bol na spodnej časti tohto nového stromu a začal proces spustenia v tomto prostredí chrotov. Pretože v skutočnosti nemôže referenčné cesty mimo modifikovaného koreňa, nedokáže na týchto miestach zlomyseľne čítať ani písať.



Prečo je to potrebné a ako sa líši od virtuálnych strojov?

Toto je virtualizácia na úrovni operačného systému a často sa používa namiesto virtuálnych strojov na vytvorenie viacerých izolovaných inštancií hostiteľského OS. Jedná sa o virtualizáciu na úrovni jadra a nemá prakticky režijné náklady v porovnaní s virtuálnymi strojmi, ktoré sú virtualizáciou aplikačných vrstiev v dôsledku toho, že poskytuje veľmi dobrú metódu na vytváranie viacerých izolovaných inštancií na rovnakom hardvéri. Virtuálny stroj (VM) je implementácia softvéru stroja a často využívajú to, čo je známe ako virtualizácia hardvéru, aby vykreslila virtuálny obraz pracovného operačného systému.

Ako používať väzenie Chroot

Základný príkaz na vytvorenie väzenia Chroot je nasledujúci:

 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: Iba root/privilegovaný používateľ môže používať volanie systému Chroot. Neprivilegovaný užívateľ s prístupom k príkazu môže obísť väzenie Chroot.



Kroky na vytvorenie mini-jailu pre príkaz „bash“ a „LS“


1. Vytvorte adresár, ktorý bude pôsobiť ako koreň príkazu.

 $ mkdir jailed  
$ cd jailed

2. Vytvorte všetky základné adresáre na spustenie príkazu: V závislosti od vášho operačného systému sa požadované adresáre môžu zmeniť. Logicky vytvárame všetky tieto adresáre, aby sme si udržali kópiu požadovaných knižníc. Ak chcete zistiť, čo sú potrebné všetky adresáre, pozri krok 4.

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

3.Run príkaz „ktorý“: Spustite príkaz „ktorý“ na nájdenie umiestnenia príkazu LS a Bash. Po spustení, ktoré veliteľstvo týchto binárnych súborov v adresári „bin“ nášho väzenia. Uistite sa, že nemáte žiadne z týchto príkazov alianed. Odteraz by sme hovorili o našom adresári ako „Uväznený“ adresár pre pohodlie.



 $ 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. Skopírujte príslušné knižnice/objekty : Pre spustiteľné súbory v našich Uväznený adresár do práce, musíme skopírovať príslušné knižnice/objekty v uväznenom adresári. V predvolenom nastavení sa spustiteľná hodnota zameriava na miesta začínajúce '/'. Na nájdenie závislosti používame príkaz „LDD“

tenký algoritmus
$ 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)

Spustite nasledujúce príkazy a vytvorte príslušné adresáre.

$ 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/

Podobne pre 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á štruktúra adresára musí byť podobná tomuto

Uväzniť' title=

5 Sudo Chroot: Spustite tento príkaz a zmeníte koreň na uväznený adresár spolu s cestou k škrupine. V predvolenom nastavení sa pokúsi načítať škrupinu '/bin/sh'.

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

Pri spustení príkazu Chroot môžete čeliť tejto chybe 

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

Môže to byť z dvoch dôvodov, že súbor neexistuje (čo je zrejmé), alebo keď zlyhá knižnica načítania alebo nie je k dispozícii. Dvojitá skontrolujte, či sú knižnice na správnom mieste.

6. Musí sa objaviť nová škrupina: Je to náš uväznený bash. V súčasnosti máme nainštalované iba 2 príkazy Bash a LS. Našťastie CD a PWD sú postavené príkazy v škrupine bash, a preto ich môžete tiež použiť.

Putnajte sa okolo adresára, skúste získať prístup k „CD /../“ alebo niečím podobným. Pokúste sa prelomiť väzenie pravdepodobne, pravdepodobne nebudete schopní. :)

herec ekta kapoor

Odísť z väzenia 

 $ exit

Najdôležitejšou a najzaujímavejšou časťou je, že keď spustíte 

 $ ps aux

a nájdite proces, ktorý zistíte, že existuje iba jeden proces 

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

Zaujímavé procesy vo väzenom škrupine bežia ako jednoduchý detský proces tohto plášťa. Všetky procesy vo väzenom prostredí sú iba jednoduchým procesom na úrovni používateľov v hostiteľskom OS a sú izolované mennými priestormi poskytovanými jadrom, takže existuje minimálna réžia a ako ďalšia výhoda dostávame izoláciu.

Podobne môžete pridať ďalšie príkazy do virtuálneho uväzneného prostredia. Ak chcete pridať zložitejšie programy, možno budete potrebovať viac adresárov ako '/proc' a '/dev'. Tieto zvyšujú zložitosť procesu. Dúfajme, že to nevyžadujeme na náš účel.

To je všetko, čo potrebujete vedieť o Chroot a uväznení adresárov. Naším konečným cieľom je pochopiť, čo sú kontajnery a ako sú služby ako AWS (Amazon Web Services) Google Cloud a Docker schopné poskytnúť toľko virtuálnych inštancií operačných systémov na požiadanie. Ako SYS-ADMIN prevádzkuje aj viacero webových serverov pre viacero domén na jednom fyzickom stroji. Bol to len jeden krok k tomu, aby sme mu pochopili