Что такое chroot?

«Что такое chroot?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Chroot (change root) — это системный вызов и утилита в Linux, которая изменяет видимый корневой каталог (/) для процесса и его дочерних процессов. Это создает изолированное окружение файловой системы, где процесс не может получить доступ к файлам за пределами нового корня.

Исторический контекст и современное применение в DevOps: Chroot — один из старейших механизмов изоляции. Сегодня он редко используется напрямую для изоляции сервисов в продакшене, так как не изолирует процессы, сеть, пространства пользователей или ресурсы CPU/памяти. Однако он остается полезным инструментом для:

  1. Восстановления систем: При загрузке с LiveCD/USB можно использовать chroot для монтирования диска с поврежденной системой и выполнения ремонтных операций (переустановка загрузчика, обновление ядра).
    mount /dev/sda1 /mnt
    mount --bind /dev /mnt/dev
    mount --bind /proc /mnt/proc
    mount --bind /sys /mnt/sys
    chroot /mnt /bin/bash
  2. Создания минимальных окружений для сборки пакетов: Некоторые системы сборки (например, для создания .deb или .rpm пакетов) могут использовать chroot для обеспечения чистоты и воспроизводимости сборки.
  3. Базовый механизм для контейнеров: Современные контейнерные технологии (Docker, LXC) используют комбинацию namespaces (для полной изоляции процессов, сети, IPC) и cgroups (для ограничения ресурсов), где chroot-подобная изоляция файловой системы — лишь одна из составляющих, реализуемая через pivot_root.

Ключевое ограничение: Процесс в chroot-окружении все еще видит все запущенные процессы системы (через /proc), может потреблять неограниченные ресурсы и, при наличии прав, может "сбежать" из изоляции. Поэтому для production-изоляции используются именно контейнеры на основе namespaces.