chroot
chroot (від англ. change root) — в Unix-подібних операційних системах операція зміни кореневого каталогу. Програма, запущена зі зміненим кореневим каталогом, матиме доступ тільки до файлів, що містяться в цьому каталозі. Тому, якщо потрібно забезпечити програмі доступ до інших каталогів або файлових систем (наприклад, /proc), потрібно наперед примонтувати в цільовому каталозі необхідні каталоги або пристрої.
Зміна кореневого каталогу виконується за допомогою системного виклику chroot(2) і зачіпає тільки поточний процес (тобто, процес, що зробив системний виклик chroot(2)) і всіх його нащадків. Якщо потрібно запустити деяку програму зі зміненим кореневим каталогом, але в цій програмі не передбачено виконання виклику chroot(2), використовують програму chroot(8). Ця програма приймає як параметри новий кореневий каталог і шлях до програми. Вона спочатку сама виконує виклик chroot(2) для зміни власного кореневого каталогу на вказаний, а потім запускає програму за заданим шляхом. Оскільки змінений кореневий каталог успадковується нащадками процесів, програма запускається зі зміненим кореневим каталогом.
Сам по собі термін chroot може стосуватися або концепції змін кореневого каталогу, або системного виклику chroot(2) або програми chroot(8), що зазвичай зрозуміло з контексту.
Програма, корінь якої був перенесений в інший каталог, не може звертатися до файлів поза цим каталогом. Це забезпечує зручний спосіб помістити в «sandbox» («пісочницю») тестову, ненадійну або будь-яку іншу потенційно небезпечну програму. Це також простій спосіб механізму «jail» («в'язниці»). Але найчастіше chroot використовується для збірки дистрибутивів або окремих програм як би в «чистому» середовищі. (Дивись також Завантаження операційної системи).
На практиці, в chroot складно помістити програми, що мають при запуску знайти вільне місце на диску, файли конфігурації, файли пристроїв і динамічні бібліотеки в конкретних місцях. Для того, щоб дозволити програмам запуститися всередині chroot-каталогу, необхідно забезпечити їх мінімальним набором таких файлів, бажано акуратно вибраним так, щоб не дозволити ненавмисний доступ до системи зовні (наприклад, через файли пристроїв або FIFO).
Програмам дозволяється відкривати файлові дескриптори (для файлів, конвеєрів і мережевих з'єднань) в chroot, які можуть спростити створення jail, роблячи необов'язковим зберігання робочих файлів усередині каталогу chroot. Це також може використовуватися як проста capability-система, в якій програмі явно дається доступ до ресурсів зовні chroot, ґрунтуючись на дескрипторах, які містяться всередині.
Використання
- Розділення привілеїв
- chroot може використовуватися як попереджувальний засіб захисту від пролому безпеки, не дозволяючи потенційному атакуючому нанести будь-які пошкодження або зондувати систему за допомогою скомпрометованої програми. Наприклад, мережевий файловий сервер може робити chroot у той каталог, з якого він роздає файли відразу після з'єднання з клієнтом. Подібний підхід використовується MTA Postfix, який розділяє свою роботу на конвеєр менших, індивідуально ув'язнених в chroot програм.
- Виготовлення honeypot-ів
- chroot-каталог може бути наповнений так, щоб симулювати реальну систему з запущеними мережними сервісами. Механізм chroot в результаті може запобігти витоку інформації, оскільки атакоючий отримає інформацію про штучне оточення, це потенційно ускладнить злом реальної системи.
- Тестування
- Ізоляція, яка забезпечується механізмом chroot, також корисна для цілей тестування. Окрема копія операційної системи може бути встановлена в chroot-каталог як тестове оточення для ПЗ, яке інакше було б дуже ризиковано розгортати на працюючій системі.
Недоліки
Тільки суперкористувач (root) може виконувати системний виклик chroot(2). Це необхідно для того, щоб запобігти атаці з боку користувача за допомогою поміщення setuid-ної програми всередині спеціально виготовленою chroot jail (наприклад, з помилковим файлом /etc/passwd), що призводитиме до того, що вони отримають підвищення привілеїв.
Сам по собі механізм chroot не повністю безпечний. Якщо програма, запущена в chroot має привілеї root, вона може виконати second chroot для того, щоб вибратися назовні. Це працює тому, що деякі ядра Unix не дозволяють правильного вкладення контекстів chroot.
Більшість систем Unix не повністю орієнтовані на файлову систему і залишають потенційно руйнівну функціональність, таку як мережну і контроль процесів, доступною через інтерфейс системних викликів до програми в chroot.
Механізм chroot сам по собі не вміє здійснювати лімітації на ресурси, такі як пропускна спроможність вводу-виводу, дисковий простір або час центрального процесора.
Див. також
Посилання
- chroot(2) сторінка допомоги в FreeBSD(англ.)
- chroot(8) сторінка допомоги в FreeBSD(англ.)
- Ламання chroot(англ.)
- Налаштування OpenSSH chroot в FreeBSD(англ.)