logo

Віртуалізація Linux - в'язниця Chroot

Chroot з операційних систем UNIX - це операція, яка змінює очевидний кореневий каталог для поточного процесу запуску та його дітей. Програми, які працюють у цьому модифікованому середовищі, не можуть отримати доступ до файлів поза призначеним деревом каталогів. Це по суті обмежує їх доступ до дерева каталогів і, таким чином, вони отримують назву "в'язниця Chroot".

Ідея полягає в тому, що ви створюєте дерево каталогів, де ви копіюєте або посилаєте на всі системні файли, необхідні для запуску процесу. Потім ви використовуєте Chroot System Call, щоб змінити кореневий каталог, щоб бути в основі цього нового дерева, і розпочати процес, що працює в цьому хруєному середовищі. Оскільки він насправді не може посилатися на шляхи поза модифікованим коренем, він не може зловмисно читати чи писати в ці місця.



Чому це потрібно і чим він відрізняється від віртуальних машин?

Це віртуалізація рівня операційної системи і часто використовується замість віртуальних машин для створення декількох ізольованих екземплярів ОС-хоста. Це віртуалізація на рівні ядра і практично не має накладних витрат порівняно з віртуальними машинами, які є віртуалізацією шарів застосування в результаті, це забезпечує дуже хороший метод створення декількох ізольованих екземплярів для одного апаратного забезпечення. Віртуальна машина (VM) - це програмне забезпечення машини, і вони часто використовують те, що відомо як апаратна віртуалізація для візуалізації віртуального зображення робочої операційної системи.

топ 10 хентай

Як користуватися в'язницями Chroot

Основна команда для створення в'язниці в Chroot така:

 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 System Call. Неповерховий користувач з доступом до команди може обійти в'язницю Chroot.



Кроки для створення міні-лейка для "Bash" та команди "LS"


1. Створіть каталог, який буде виступати як корінь команди.

 $ mkdir jailed  
$ cd jailed

2. Створіть усі основні каталоги для запуску команди: Залежно від вашої операційної системи необхідні каталоги можуть змінюватися. Логічно ми створюємо всі ці каталоги, щоб зберегти копію необхідних бібліотек. Щоб побачити, які всі каталоги потрібні, див. Крок 4.

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

3.Прокуйте команду "який": Запустіть команду "яка", щоб знайти місце розташування команд LS та Bash. Після того, як запускає, що CommandCopy цих бінарних файлів у каталозі нашої в'язниці "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/


Кінцева структура каталогів повинна бути схожа на це

В'язниця Чрут' 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

Це може бути пов’язано з двома причинами або файлу не існує (що очевидно), або коли бібліотека завантаження не виходить з ладу, або не доступна. Подвійна перевірка, якщо бібліотеки знаходяться в правильному місці.

що таке f5 на клавіатурі

6. Нова оболонка повинна з’явитися: Це наш тюрма. Наразі у нас встановлені лише 2 команди та 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 запускає декілька веб-серверів для декількох доменів на одній фізичній машині. Це було лише один крок до його розуміння