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.