chroot "тюрма" - що це таке і як я ним користуюся?


99

Я багато чув / читав про в'язницю chroot під Linux, але ще ніколи не користувався ним (я використовую Fedora щодня), так що таке chroot "в'язниця"? Коли і навіщо я можу ним користуватися / не використовувати його, чи є ще щось, що я повинен знати? Як би я пішов про створення цього?

chroot 

відповіді тут здаються короткими на тему "як я можу використовувати цю категорію?" :(
Олександр Міллз

Відповіді:


87

Тюрма Chroot - це спосіб ізолювати процес та його дітей від решти системи. Його слід використовувати лише для процесів, які не працюють як root, оскільки користувачі root можуть вирватися з в'язниці дуже легко.

Ідея полягає в тому, щоб ви створили дерево каталогів, куди ви скопіюєте або зв’яжете всі системні файли, необхідні для запуску процесу. Потім ви використовуєте chroot()системний виклик, щоб змінити кореневий каталог, який знаходиться в основі цього нового дерева, і запустити процес, що працює в цьому середовищі chroot'd. Оскільки він насправді не може посилатися на шляхи за межами модифікованого кореня, він не може виконувати операції (читання / запис тощо) зловмисно в цих місцях.

В Linux використання монтажу прив’язки є прекрасним способом заселення дерева chroot. Використовуючи це, ви можете перетягувати папки, як /libі /usr/lib, наприклад, не втягуючи їх /usr. Просто прив’яжіть дерева каталогів, які ви хочете, до каталогів, які ви створюєте, у каталогів.


10
Ваша відповідь чудова. Однак слід зазначити одне, що chroot - це не захищений механізм (процес може вирватися із в'язниці, якщо він стане корінним, а іноді навіть якщо ні). Справжні в'язниці можуть бути застосовані за допомогою в'язниць freebsd тощо. Дивіться це en.wikipedia.org/wiki/FreeBSD_jail#S
similar_technologies

3
Процес установки Gentoo використовує chroot, щоб ви могли налаштувати нову ОС перед тим, як встановити GRUB та ядро ​​Linux тощо.
Chris Huang-Leaver

3
Погляньте на firejail, щоб отримати повний затвор, використовуючи всі простори імен Linux. Є пакети деб і оборотів в хвилину. Як правило, я рекомендую ядро ​​3.18 або пізнішої версії, проте через відому проблему не в змозі встановити нове програмне забезпечення або керувати користувачами під час firejailзапуску.
CivFan

Чудова відповідь! - хоча деякі основні приклади було б приємно бачити.
Габріель Степлес

Чи може користувач у в'язниці Chroot викликати бінарні файли, розташовані під ним /bin, встановлені кореневим користувачем? @Ben Combee
alper

50

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

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

Якщо ви так chroot fooі зробите ls /, ви побачите:

-- bar
-- baz

Що стосується ls(та будь-яких інших інструментів, які ви запускаєте), це єдині каталоги у файловій системі. Причина "тюрма" є неправильним, chrootне призначена для того, щоб змусити програму залишатися в цій змодельованій файловій системі; програма, яка знає, що вона знаходиться в хронічній "в'язниці", може досить легко вийти, тому не слід використовувати chrootв якості заходів безпеки, щоб запобігти програмі змінювати файли поза вашої імітованої файлової системи


16
Було б корисно мати приклад, як вирватися з chroot"в'язниці". Випадок я бачив вимагає ескалації привілеїв суперкористувача. Чи важко попередити процес, що переходить у корінні права?
CivFan

4
Це все ще "ув'язнення", тому "в'язниця" - це хороша стенограма. Чи було б "поле рівня 3 рівня" кращим ?!
MikeW

4
Термін походить з тюрем FreeBSD. Тюрми побудовані на chroot. Сідниці були призначені для вирішення проблем безпеки chroot. З цієї причини люди часто змішуються chrootі jailsозначають те саме. Вони цього не роблять. Термін "в'язниця", як кажуть, придумав Білл Чесвік, коли він встановив медовий горщик, щоб зловити сухаря
BugHunterUK

Отже, ти що, не використовуєш chroot jailгарної ідеї в моєму випадку ?
Шафізаде

10

В основному ви просто змінюєте кореневий каталог свого оточення. Тому

/

стає

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

Коли програма звернеться / вони отримають / деяку в'язницю /. Також програма не може вийти з / деякої в'язниці /, тому ви знаєте, що вона не матиме доступу до нічого іншого на вашій машині. Це дуже простий спосіб сказати: «Ей, ви можете отримати доступ лише до цих речей, які я вам дарую, і ви не можете отримати доступ до нічого іншого в системі.


6

"Коли і навіщо я можу ним користуватися?"

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

Наприклад, у мене є вбудований пристрій під управлінням Linux, я хотів би перевірити роботу деякого bash без a) запустити його на реальному пристрої (так як у мене є кращі інструменти на робочому столі і не хочу цеглити пристрій) б) запущений це справді на моєму робочому столі (так як я не хочу, щоб моя система настільних систем була переплутана)

Крім того, ви можете виявити, які команди або інші файли скриптів використовуються, оскільки запуск буде виходити з помилкою кожного разу, коли він намагатиметься запустити команду або скрипт оболонки, який відсутній у "chroot jail".

(Звичайно, щоб пройти всю свиню, ви можете запустити всередині QEMU або Docker, або VM, але це передбачає створення образу VM тощо - набагато більше роботи)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.