Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #93, СЕНТЯБРЬ 2006 г.

Под защитой песочного демона

Евгений Зобнин ака j1m

Хакер, номер #093, стр. 093-118-2


# создаем каталог для chroot-окружения

mkdir -p $CHROOT

chown root:root $CHROOT

chmod 700 $CHROOT

cd $CHROOT

# создаем каталоговую структуру

DIRS="bin sbin lib etc dev home usr usr/bin /usr/sbin usr/lib"

for dir in $DIRS; do

mkdir -p $dir

done

# копируем необходимые библиотеки

LIBS=`ldd $CMDS|grep -v ':$'|grep -v "not a dynamic executable"|cut -f 3 -d " "|sort|uniq|sed 1d`

for lib in $LIBS; do

cp -P $lib ./$lib

cp -L $lib ./$lib

done

cp -P /lib/ld-linux.so.2 ./lib

cp -L /lib/ld-linux.so.2 ./lib

# копируем команды

for cmd in $CMDS; do

cp -P $cmd ./$cmd

cp -L $cmd ./$cmd

done

# создаем необходимые файлы устройств

mknod -m 666 dev/null c 1 3

mknod -m 666 dev/zero c 1 5

Ставим на скрипт бит исполнения и запускаем:

# chmod +x ~/bin/mkchroot

# ~/bin/mkchroot /usr/chroot/ssh

Каталог /usr/chroot/ssh волшебным образом наполнится почти всем, что может только понадобиться. Следующий шаг - перенос ssh. Потребуется скопировать сам демон /usr/sbin/sshd, файл /usr/libexec/sftp-server (если требуется sftp-сервер), конфигурационные файлы /etc/ssh/{moduli,ssh_config,sshd_config}. Далее следует создать два каталога внутри chroot-окружения: /var/empty (без него sshd не сможет понижать свои привилегии до пользователя sshd), /var/run (для хранения PID-файла) и несколько дополнительных файлов устройств: /dev/urandom, /dev/ptmx, /dev/ptyp*, /dev/ptyq*, /dev/ttyp*, /dev/ttyq* (нужны для работы псевдотерминала). Проще будет скопировать их из корневой машины. Кроме того, рекомендуется перенести каталог /usr/share/terminfo для правильной инициализации терминала (иначе многие клавиши будут работать неверно). Осталось скопировать библиотеки, и перенос sshd можно считать завершенным. Прием с ldd в данном случае не пройдет, так как ssh-демон загружает некоторые библиотеки "на лету". Чтобы узнать о всех (с оговорками) требуемых библиотеках, потребуется запустить sshd на корневой машине и выполнить следующую команду:

$ cat /proc/`cat /var/run/sshd.pid`/maps

Сервер ssh установлен и готов к запуску. Следующий шаг - создание ключей и клиентских аккаунтов. Первая процедура достаточно тривиальна и выполняется несколькими простыми командами:

# cd /usr/chroot/ssh

# ssh-keygen -t dsa -f etc/ssh/ssh_host_dsa_key -N ''

# ssh-keygen -t rsa -f etc/ssh/ssh_host_rsa_key -N ''

С аккаунтами немного сложнее. Дело в том, что стандартные утилиты, манипулирующие привилегиями пользователя, не позволяют изменить месторасположение файлов /etc/{passwd,shadow,group}. Эта проблема может быть решена различными способами. Можно скопировать эти файлы в укромное место, создать на их месте пустые файлы, добавить нужные аккаунты для пользователей, переместить файлы в chroot, восстановить оригиналы. Можно установить в chroot утилиты /usr/sbin/{passwd,useradd,userdel,usermod} (для этого достаточно добавить их в переменную CMDS вышеприведенного скрипта), зайти в сhroot под рутом и добавить пользователей. В конце концов никто не запрещает править файлы в ручную, как это делаю я. Главное создать пользователей root и sshd, а также группы root, sshd и sshusers, в последнюю мы будем помещать наших пользователей.

Назад на стр. 093-118-1  Содержание  Вперед на стр. 093-118-3