Сторінка не перевірена
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, ґрунтуючись на дескрипторах, які містяться всередині.
Тільки суперкористувач (root) може виконувати системний викликchroot(2). Це необхідно для того, щоб запобігти атаці з боку користувача за допомогою поміщення setuid-ної програми всередині спеціально виготовленою chroot jail (наприклад, з помилковим файлом /etc/passwd), що призводитиме до того, що вони отримають підвищення привілеїв.
Сам по собі механізм chroot не повністю безпечний. Якщо програма, запущена в chroot має привілеї root, вона може виконати second chroot для того, щоб вибратися назовні. Це працює тому, що деякі ядра Unix не дозволяють правильного вкладення контекстів chroot.
Більшість систем Unix не повністю орієнтовані на файлову систему і залишають потенційно руйнівну функціональність, таку як мережну і контроль процесів, доступною через інтерфейс системних викликів до програми в chroot.
Механізм chroot сам по собі не вміє здійснювати лімітації на ресурси, такі як пропускна спроможність вводу-виводу, дисковий простір або часцентрального процесора.