Ответ
До появления пространств имён (namespaces) в ядре Linux для частичной изоляции использовался механизм chroot (change root).
Что делает chroot?
Он изменяет корневой каталог (/) для процесса и его дочерних процессов на указанный каталог в файловой системе. Это создаёт иллюзию изолированной файловой системы.
Пример использования:
# Создаём минимальную файловую структуру для изоляции
mkdir -p /myjail/{bin,lib,lib64}
# Копируем необходимые бинарные файлы и библиотеки (например, bash)
cp /bin/bash /myjail/bin/
cp /lib/x86_64-linux-gnu/libtinfo.so.6 /myjail/lib/
cp /lib/x86_64-linux-gnu/libc.so.6 /myjail/lib/
cp /lib64/ld-linux-x86-64.so.2 /myjail/lib64/
# Запускаем процесс в изолированном окружении
sudo chroot /myjail /bin/bash
# Теперь для этого bash корень файловой системы — это /myjail
Ключевые ограничения chroot по сравнению с namespaces:
- Неполная изоляция: Процесс видит все запущенные процессы (
ps aux), сетевые интерфейсы, пользователей и т.д. - Уязвимости безопасности: Привилегированный процесс может "сбежать" из chroot.
- Сложность настройки: Требуется ручное копирование всех необходимых библиотек и файлов.
Namespaces (cgroups, PID, network, mount, user и др.), появившиеся позже, обеспечивают полную изоляцию на уровне ядра, что и стало фундаментом для современных контейнеров (Docker, LXC).