Подготовка chroot-окружений для тестирования на сервере Ubuntu 12.04

В системе Linux часто возникает необходимость изолировать определённое приложение, пользователя или окружение. В различных операционных системах для этого применяются разные методы; в Linux для этого традиционно используется окружение chroot. В данном руководстве речь пойдёт о том, как настроить изолированное chroot-окружение, которое служит в качестве барьера между операционной системой и отдельным окружением. Как правило, это необходимо для проведения тестирования. В руководстве рассматриваются случаи, в которых необходимо использовать chroot, а также ситуации, в которых больше подойдёт альтернативное решение. Все примеры выполнены на виртуальном выделенном сервере Ubuntu 12.04. Многим системным администраторам пригодится навык создания окружения chroot.

Что такое chroot-окружение?

Chroot-окружение – это системный вызов, который временно перемещает root каталог в новую папку. Как правило, root каталог находится в «/». Но при помощи chroot можно задать другой каталог, который будет служить как root-каталог в окружении chroot. Любые приложения, которые запускаются внутри изолированного окружения, в принципе не могут взаимодействовать с остальной операционной системой. Кроме того, не-рутовый пользователь (non-root), помещённый в chroot-окружение, не сможет перемещаться по иерархии каталогов. Когда нужны chroot-окружения?

Chroot-окружение необходимо в самых различных ситуациях. К примеру, оно позволяет собирать, устанавливать и тестировать программное обеспечение в среде, которая отделена от остальной операционной системы. Также его можно использовать для запуска 32-битных приложений в 64-битной среде.

В целом, chroot – это способ временно воссоздать окружение операционной системы из подмножества файловой системы.

Это позволяет временно перейти с привычных утилит на их экспериментальные версии, посмотреть, как приложения ведут себя в чистом окружении; также chroot может помочь выполнить операции по восстановлению, развернуть систему или создать дополнительный барьер, чтобы предотвратить потенциальный взлом системы.

Когда не нужно использовать chroot?

Chroot-окружение Linux не стоит использовать в качестве средства защиты. В целом, окружения chroot могут быть использованы как дополнительный уровень безопасности, но они не достаточно изолированы, чтобы выступать в качестве полноценной защиты системы.

Конечно, chroot-окружения, создадут дополнительную работу для непривилегированного пользователя; однако их следует рассматривать как способ усиления безопасности сервера, а не как полноценную защиту, так как они способны только уменьшить количество векторов атаки, не обеспечивая полной безопасности. Для пользователей, которые нуждаются в полной изоляции, существуют боле надёжные решения (контейнеры Linux, Docker и т.п.).

Настройка инструментов

Чтобы добиться максимальной производительности chroot, нужно использовать некоторые инструменты для установки основных файлов дистрибутивов. Это ускорит процесс и предоставит необходимые библиотеки и пакеты.

Первый инструмент – dchroot или schroot – используется для управления chroot-окружениями. Он также позволяет выполнять команды в chroot-окружении.

Команда dchroot несколько устарела и сейчас используется как оболочка совместимости для более современной команды schroot.

Debootstrap – ещё один необходимый инструмент, создающий операционную систему в подкаталоге другой системы. Это позволяет ускорить запуск, так как chroot-окружение требует определенных инструментов и библиотек для того, чтобы функционировать должным образом.

Установите эти пакеты (рекомендуется установить dchroot, так как он поставляется с schroot):

sudo apt-get update
sudo apt-get install dchroot debootstrap

Теперь необходимые инструменты установлены, и нужно только указать каталог, который будет использоваться как root-каталог окружения chroot. Для этого создайте в root-каталоге каталог test:

sudo mkdir /test

Как уже говорилось, команда dchroot в современных системах используется как оболочка для более мощной команды schroot. Потому нужно отредактировать конфигурационный файл schroot, внеся в него свои данные.

Откройте файл с привилегиями администратора:

sudo nano /etc/schroot/schroot.conf

В файл нужно добавить опции, которые будут использоваться для создания изолированной системы. Например, в Ubuntu нужно указать версию и т.п. Для Debian существуют хорошо закомментированные значения (т.к. команда schroot изначально разрабатывалась для Debian).

Итак, в данный момент используется система Ubuntu 12.04; для примера предположим, что вам необходимо протестировать некоторые пакеты для Ubuntu 13.10 (кодовое название – Saucy Salamander). Для того нужно внести следующие данные:

[saucy] description=Ubuntu Saucy
location=/test
priority=3
users=demouser
groups=sbuild
root-groups=root

Сохраните и закройте файл.

Заполнение chroot-окружения

Теперь нужно установить систему в chroot; просто введите:

sudo debootstrap --variant=buildd --arch amd64 saucy /test/ http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/

Флаг –variant задаёт тип chroot-окружения, которое нужно собрать. Опция build указывает, что нужно также установить инструменты сборки программ «из коробки», которые находятся в пакете build-essential. Узнать о доступных опциях больше можно при помощи команды:

man debootstrap

Найдите описание –variant. Флаг –arch указывает архитектуру системы клиента. Если архитектура отличается от родительской архитектуры, нужно также использовать флаг –foreign. После этого нужно вызвать команду debootstrap во второй раз, чтобы завершить установку:

sudo chroot /test /debootstrap/debootstrap --second-stage

Эта команда выполняет установку, в то время как первая команда только загружает пакеты в случае архитектурных различий.

Примечание: Не забудьте флаг –foreign, если архитектура систем не совпадает.

Saucy в команде должно соответствовать имени, заданному в файле schroot.conf. Часть команды /test/ указывает целевой каталог, а URL задаёт адрес репозитория и загружает запрошенные файлы. На самом деле, формат данного файла очень похож на /etc/apt/sources.list. После этого можно просмотреть все файлы, которые были скачаны и установлены, проверив целевой каталог.

ls /test
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

Как видите, выглядит как обыкновенная файловая система, только развёрнута она в нестандартном каталоге.

Работа в chroot-окружении

После установки системы нужно внести несколько заключительных конфигураций, чтобы обеспечить корректную работу chroot-окружения.

Для начала убедитесь в том, что fstab хоста знает о гостевых псевдосистемах. Внесите в конец fstab строки:

sudo nano /etc/fstab
proc /test/proc proc defaults 0 0
sysfs /test/sys sysfs defaults 0 0

Сохраните и закройте файл.

Теперь нужно смонтировать эти системы:

sudo mount proc /test/proc -t proc
sudo mount sysfs /test/sys -t sysfs

Также нужно скопировать файл /etc/hosts, чтобы иметь доступ к корректным данным сети.

cp /etc/hosts /test/etc/hosts

Затем войдите в chroot-окружение из командной строки:

sudo chroot /test/ /bin/bash

Это откроет новое chroot-окружение. Чтобы протестировать его, перейдите в каталог root и введите:

cd /
ls -di

Если команда вернет какое-либо число, кроме 2, значит, вы в окружении chroot. В этом окружении можно устанавливать программы и выполнять различные действия, при этом никак не влияя на остальную систему (кроме использования ресурсов).

Выход из chroot-окружения

Чтобы выйти из окружения chroot, нужно просто отменить некоторые ранее выполненные действия.

Для начала выйдите из chroot как root (как это делается в любом окружении оболочки).

exit

Затем демонитруйте файловые системы:

sudo umount /test/proc
sudo umount /test/sys

Нужно также удалить дополнительные строки из файла /etc/fstab, если только chroot не понадобится позже.

Если же это окружние больше не понадобится, удалите каталог, в котором хранятся все пакеты:

rm -rf /test/

Заключение

Конечно, сегодня существует множество современных технологий (например, Docker), предоставляющих более надёжную изоляцию. Однако chroot-окружения просты в использовании и управлении, а также доступны из операционной системы хоста, что также является несомненным преимуществом.

Запомните случаи, в которых инструмент chroot будет полезен, и старайтесь избегать ситуаций, в которых chroot не сможет помочь.

Chroot-окружения отлично подходят для тестирования и сборки программ различных архитектур без необходимости устанавливать отдельную систему. Это невероятно гибкое решение для различных задач.

Tags: , , , ,

Добавить комментарий