Домашнее задание №4
Задание выполняется на персональных виртуальных машинах. После выполнения нужно записаться в очередь на проверку (ссылка сверху на странице курса). Дедлайн – 01:00 AM (час ночи) 11 декабря.
Не забудьте выполнить предыдущее домашнее задание!
Настройка chroot jail
Задача – запуск программы в специфическом окружении.
Вам необходимо запустить программу usefull-but-strange (лежит на kodomo, /P/ai24/admlin/usefull-but-strange). Она обладает следующими требованиями, первые два из которых довольно специфические.
- Должна быть исполнена от имени пользователя с uid 1324 и gid 1324.
Должна иметь право на создание произвольных файлов в директории /var, так как умеет записывать результат своей работы только в файл /var/log, который не должен заранее существовать.
Требует наличия специального файла /dev/null.
Использует многие файлы из /etc.
- Вызывает в процессе работы следующие программы:
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.
