logo

Linux виртуализация - затвор Chroot

Chroot на UNIX операционни системи е операция, която променя очевидната коренова директория за текущия процес на работа и нейните деца. Програмите, които се изпълняват в тази модифицирана среда, не могат да получат достъп до файловете извън определеното дърво на директорията. Това по същество ограничава достъпа им до дърво на директория и по този начин те получават името „затвор Chroot“.

Идеята е, че създавате дърво на директория, където копирате или свържете във всички системни файлове, необходими за изпълнение на процес. След това използвате системния разговор на Chroot, за да промените основната директория, за да бъде в основата на това ново дърво и да започнете процеса, работещ в тази Chrooted среда. Тъй като всъщност не може да се позовава на пътища извън модифицирания корен, той не може злонамерено да чете или пише на тези места.



Защо се изисква и как се различава от виртуалните машини?

Това е виртуализация на ниво операционна система и често се използва вместо виртуални машини за създаване на множество изолирани случаи на хост ОС. Това е виртуализация на ниво ядро ​​на ядро ​​и практически няма режийни разходи в сравнение с виртуални машини, които са виртуализация на лайър на приложението, в резултат на това предоставя много добър метод за създаване на множество изолирани случаи на един и същ хардуер. Виртуална машина (VM) е софтуерна реализация на машина и те често използват това, което е известно като хардуерна виртуализация, за да направи виртуално изображение на работеща операционна система.

Как да използвам затвора за хрут

Основната команда за създаване на затвор за хрут е следната:

 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

ЗАБЕЛЕЖКА: Само потребител на корен/привилегирована може да използва системното повикване на Chroot. Непривилегированият потребител с достъп до командата може да заобиколи затвора Chroot.



Стъпки за създаване на мини-джейл за „Bash“ и командата „LS“


1. Създайте директория, която ще действа като корен на командата.

 $ mkdir jailed  
$ cd jailed

2. Създайте всички основни директории за изпълнение на командата: В зависимост от вашата операционна система необходимите директории могат да се променят. Логично създаваме всички тези директории, за да запазим копие на необходимите библиотеки. За да видите какви са необходими всички директории, вижте стъпка 4.

nat срещу легло
 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3. Наружете командата „коя“: Изпълнете командата „Коя“, за да намерите местоположението на LS и Bash Command. След изпълнение, което командва тези двоични файлове в директорията „Bin“ на нашия затвор. Уверете се, че нямате нито една от тези команди, псевдоним. Отсега нататък щяхме да имаме предвид нашата директория като "Затворен" Директория за удобство.



 $ 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. Копирайте подходящи библиотеки/обекти : За изпълнимите файлове в нашите Затворен Директория за работа Трябва да копираме съответните библиотеки/обекти в директорията, затворена в затвора. По подразбиране изпълнимият се разглежда местоположенията, започващи с '/'. За да намерим зависимостите, използваме командата '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)

Изпълнете следните команди, за да създадете подходящи директории.

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

Подобно за 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/


Крайната структура на директорията трябва да е подобна на тази

режисьор Каран Джохар

Chroot затвор' title=

5. Sudo Chroot: Изпълнете тази команда, за да промените корена в затворената директория заедно с пътя към черупката. По подразбиране той ще се опита да зареди '/bin/sh' черупка.

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

Може да се сблъскате с тази грешка, докато изпълнявате командата chroot 

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

Това може да се дължи на 2 причини или файлът не съществува (което е очевидно), или когато библиотеката за зареждане се провали или не е налична. Двойна проверка, ако библиотеките са на правилно място.

6. Нова черупка трябва да изскочи: Това е нашият затворен баш. В момента имаме само 2 команди, инсталирани Bash и LS. За щастие CD и PWD са вградени команди в Bash Shell и затова можете да ги използвате.

Роам около директорията опитайте да получите достъп до 'cd /../' или нещо подобно. Опитайте се да разбиете затвора вероятно няма да можете. :)

Да излезе от затвора 

 $ exit

Най -важната и интересна част е, че когато бягате 

 $ ps aux

и намерете процеса, който ще откриете, че има само един процес 

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

Интересното е, че процесите в затворената черупка се изпълняват като прост детски процес на тази черупка. Всички процеси в затворената среда са просто прост процес на потребителско ниво в хост ОС и са изолирани от пространствата от имена, предоставени от ядрото, така че има минимални режийни разходи и като допълнителна полза получаваме изолация.

ред срещу колона

По същия начин можете да добавите още команди към вас виртуална затворена среда. За да добавите по -сложни програми, може да се наложи да създадете повече директории като '/proc' и '/dev'. Те увеличават сложността на процеса. Надяваме се, че не го изискваме за нашата цел.

Това е всичко, което трябва да знаете за Chroot и затвора на директории. Нашата крайна цел е да разберем какви са контейнерите и как услугите като AWS (Amazon Web Services) Google Cloud и Docker могат да предоставят толкова много виртуални случаи на операционни системи при поискване. Също така как SYS-Admin работи множество уеб сервъри за множество домейни на една физическа машина. Това беше само една стъпка към разбирането му