Kodomo

Пользователь

Домашнее задание №4

Задание выполняется на персональных виртуальных машинах. После выполнения нужно записаться в очередь на проверку (ссылка сверху на странице курса). Дедлайн – 01:00 AM (час ночи) 11 декабря.

Не забудьте выполнить предыдущее домашнее задание!

Настройка chroot jail

Задача – запуск программы в специфическом окружении.

Вам необходимо запустить программу usefull-but-strange (лежит на kodomo, /P/ai24/admlin/usefull-but-strange). Она обладает следующими требованиями, первые два из которых довольно специфические.

  1. Должна быть исполнена от имени пользователя с uid 1324 и gid 1324.
  2. Должна иметь право на создание произвольных файлов в директории /var, так как умеет записывать результат своей работы только в файл /var/log, который не должен заранее существовать.

  3. Требует наличия специального файла /dev/null.

  4. Использует многие файлы из /etc.

  5. Вызывает в процессе работы следующие программы:
    • cat

    • cut

    • date

    • env

    • find

    • grep

    • id

    • md5sum

    • ping

    • paste

    • sh

    • wget

    • xargs

Предлагаю запустить программу с помощью chroot(8), используя предварительно созданную папку с необходимыми правами и файлами в качестве корня файловой системы. Главная проблема – сделать доступными перечисленные программы и файлы внутри темницы chroot jail. Создайте произвольную папку, которая будет корнем темницы. Везде далее она будет называться JAILDIR.

Требование 1

Выполняется с помощью подходящей опции chroot.

Требование 2

Проще всего выполнить, создав пустую папку JAILDIR/var, сделав группу gid 1324 владельцем этой папки и выставив подходящие для группы.

Требование 3

Проще всего создать папку JAILDIR/dev, и воссоздать внутри нее специальный файл dev с помощью утилиты mknod(1). Узнать параметры mknod, необходимые для создания этого файла, можно с помощью file (т.е. file /dev/null).

Требование 4

Оптимальный вариант – смонтировать директорию /etc внутри JAILDIR с помощью mount с опцией --bind, см. описание в mount(8). Не помешает смонтировать etc в новое место в режиме readonly.

Требование 5

Проблема заключается в том, что недостаточно просто скопировать бинарные файлы требуемых программ в JAILDIR/bin, так как все они используют динамические библиотеки в процессе работы. К счастью, все требуемые программы есть в составе busybox(1), поэтому достаточно будет скопировать исполняемый файл busybox, динамические библиотеки, которые он требует, и создать символические ссылки для всех требуемых программ в JAILDIR/bin, указывающие на busybox.

Если в вашей системе busybox не установлен, то установите его, он есть в стандартном репозитории Debian. Для определения, какие динамические библиотеки использует busybox, используйте ldd(1). В списке обязательно будет библиотека, которая и осуществляет динамическую загрузку других разделяемых библиотек. Она обязательно должна располагаться в папке /lib64 (в случае 64-битной ОС), догадайтесь, куда её надо скопировать. Пути ко всем остальным разделяемым библиотекам определяются в процессе загрузки, поэтому файлы этих библиотек можно просто скопировать в JAILDIR/lib, так как /lib – одна из папок, в которых разделяемые библиотеки ищутся по умолчанию. Подробнее процесс описан на man-странице динамического загрузчика ld.so(8).

Вызов chroot

Вызов chroot требует прав суперпользователя. Обратите внимание, путь к исполняемому файлу, который должен быть запущен, должен быть актуален внутри темницы. Поэтому программу useful-but-strange необходимо предвательно переместить внутрь JAILDIR и указать при запуске путь к ней, как будто JAILDIR уже является корневой папкой.

Результатом успешного выполнения программы будет файл JAILDIR/var/log, скопируйте его в папку /root и назовите task4.log.

Main/AdmLin/task4 (последним исправлял пользователь is_rusinov 2025-11-28 21:04:10)