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
Особисті інструменти