cppmm — Работа в chroot.
Иногда возникает необходимость поиграться с ситемой, но есть опасность навредить работающей схеме. Или, к примеру, если надо опробовать какие-то особые версии программ, а установленные ломать неохота. Или, если собрать что-то надо каким-нибудь особым компилятором. В общем, много разных ситуаций бывает.
Разумеется, для всего этого(как и многого другого в linux) есть разные способы. Это один из них - работа в песочнице chroot.
Суть идеи проста. Chroot расшифровывается как Change Root, т.е. сменить корень. Благодаря такому манёвру мы получаем независимую систему со своими настройками/утилитами и т.д. Наиболее частое применение этого приёма - замыкание в песочнице потенциально опасных сервисов на сервере, чтобы крякер, взломавший сервис не получил доступ к остальной системе. Но это тема для отдельной статьи.
Итак, к делу.
Создаём chroot-директорию и дерево каталогов для базовой системы.
Есть как минимум три пути: для ленивых, для терпеливых и ещё один для терпеливых. :)
Для ленивых - это просто взять где-нибудь базовую(минимальную) сборку любого дистрибутива(не Ubuntu и подобные). Либо, как вариант, воспользоваться архивом третьей стадии из gentoo. Взять его можно с gentoo.org.
Для терпеливых - скопировать всё, что нужно руками. Тут подробнее.
Для начала надо сделать дерево каталогов: bin boot dev etc home lib mnt opt proc root sbin tmp usr var.
Теперь его надо наполнить. Копируем нужные утилиты из основной системы в соответствующие директории(/bin/bash в /chroot/bin/bash и т.д.). Потом для каждой из них надо будет отследить библиотеки. Делается это с помощью ldd.
Эти требуемые библиотеки раскидываем в соответствующие директории в /chroot. В зависимости от дистрибутива, их расположение может быть разным.
Когда все нужные программы и библиотеки будут скопированы, надо будет доукомплектовать всё это разными дополнительными, нужными в работе файлами(конфиги всякие и т.д.). Тут к сожалению, нет однозначного решения, потому как для каждой отдельной утилиты эти файлы различаются и лежат в разных местах. Читаем доки и гуглим ошибки.
Готово.
Третий путь - Читаем главу "Сборка системы" книги LFS и делаем, как там описано.
Так или иначе вы получаете песочницу.
Теперь же начинаем там работать.
Монтируем необходимые для работы виртуальные devfs и procfs.
# mount -t proc none /chroot/proc
# mount -o bind /dev/ /chroot/dev
И, наконец, переходим в chroot-окружение:
# chroot /chroot /bin/bash
Всё. Теперь мы полностью отрезаны от остальной ситемы в созданной нами директории. Тут можно делать всё, что угодно(в зависимости от средств, которые вы туда скопировали). Если там есть компилятор, можно всё, что там находится пересобрать, как угодно, и дособрать новое. Можно проводить эксперименты с опасными скриптами(протестировать знаменитый однострочник на perl ;)).
Это совершенно не повлияет на основную систему.
А если ещё и сделать бекап этого раздела, (cd /chroot && tar -cjvf /backups/chroot.tar.bz2 ./), то после своих ошибок его всегда можно быстро восстановить или откатиться до "контрольной точки".
Но всегда стоит учитывать, что песочница работает с тем же ядром, что и основная система, что накладывает некоторые ограничения. К примеру, если ядро 32-битное, а всё, что в песочнице собрано под 64-битную архитектуру, chroot не заработает. Но если там же собрать 64-битное ядро, можно дописать в grub новый пункт, указав ядро и корневой раздел на созданный нами /chroot.
Это лишь краткое описание и ни в коем случае не руководство к действию. Принцип работы я здесь описал, а дальше всё зависит от вашей фантазии. Я, например, собираю таким образом свои сборки linux. Это проще, чем игры с виртуальными машинами или установка той же LFS или Gentoo с LiveCD - пока что-нибудь в chroot'е компилится, можно тут на welinux.ru пофлудить. :)
Разумеется, для всего этого(как и многого другого в linux) есть разные способы. Это один из них - работа в песочнице chroot.
Суть идеи проста. Chroot расшифровывается как Change Root, т.е. сменить корень. Благодаря такому манёвру мы получаем независимую систему со своими настройками/утилитами и т.д. Наиболее частое применение этого приёма - замыкание в песочнице потенциально опасных сервисов на сервере, чтобы крякер, взломавший сервис не получил доступ к остальной системе. Но это тема для отдельной статьи.
Итак, к делу.
Создаём chroot-директорию и дерево каталогов для базовой системы.
Есть как минимум три пути: для ленивых, для терпеливых и ещё один для терпеливых. :)
Для ленивых - это просто взять где-нибудь базовую(минимальную) сборку любого дистрибутива(не Ubuntu и подобные). Либо, как вариант, воспользоваться архивом третьей стадии из gentoo. Взять его можно с gentoo.org.
Для терпеливых - скопировать всё, что нужно руками. Тут подробнее.
Для начала надо сделать дерево каталогов: bin boot dev etc home lib mnt opt proc root sbin tmp usr var.
Теперь его надо наполнить. Копируем нужные утилиты из основной системы в соответствующие директории(/bin/bash в /chroot/bin/bash и т.д.). Потом для каждой из них надо будет отследить библиотеки. Делается это с помощью ldd.
1 2 3 4 5 6 7 |
# ldd /bin/bash | cut -f 2 -d \> | cut -f 1 -d \( /lib/libncurses.so.5 /lib/i686/cmov/libdl.so.2 /lib/i686/cmov/libc.so.6 /lib/ld-linux.so.2 |
Эти требуемые библиотеки раскидываем в соответствующие директории в /chroot. В зависимости от дистрибутива, их расположение может быть разным.
Когда все нужные программы и библиотеки будут скопированы, надо будет доукомплектовать всё это разными дополнительными, нужными в работе файлами(конфиги всякие и т.д.). Тут к сожалению, нет однозначного решения, потому как для каждой отдельной утилиты эти файлы различаются и лежат в разных местах. Читаем доки и гуглим ошибки.
Готово.
Третий путь - Читаем главу "Сборка системы" книги LFS и делаем, как там описано.
Так или иначе вы получаете песочницу.
Теперь же начинаем там работать.
Монтируем необходимые для работы виртуальные devfs и procfs.
# mount -t proc none /chroot/proc
# mount -o bind /dev/ /chroot/dev
И, наконец, переходим в chroot-окружение:
# chroot /chroot /bin/bash
Всё. Теперь мы полностью отрезаны от остальной ситемы в созданной нами директории. Тут можно делать всё, что угодно(в зависимости от средств, которые вы туда скопировали). Если там есть компилятор, можно всё, что там находится пересобрать, как угодно, и дособрать новое. Можно проводить эксперименты с опасными скриптами(протестировать знаменитый однострочник на perl ;)).
Это совершенно не повлияет на основную систему.
А если ещё и сделать бекап этого раздела, (cd /chroot && tar -cjvf /backups/chroot.tar.bz2 ./), то после своих ошибок его всегда можно быстро восстановить или откатиться до "контрольной точки".
Но всегда стоит учитывать, что песочница работает с тем же ядром, что и основная система, что накладывает некоторые ограничения. К примеру, если ядро 32-битное, а всё, что в песочнице собрано под 64-битную архитектуру, chroot не заработает. Но если там же собрать 64-битное ядро, можно дописать в grub новый пункт, указав ядро и корневой раздел на созданный нами /chroot.
Это лишь краткое описание и ни в коем случае не руководство к действию. Принцип работы я здесь описал, а дальше всё зависит от вашей фантазии. Я, например, собираю таким образом свои сборки linux. Это проще, чем игры с виртуальными машинами или установка той же LFS или Gentoo с LiveCD - пока что-нибудь в chroot'е компилится, можно тут на welinux.ru пофлудить. :)