Создание chroot для враждебного пользователя

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

Если видите ещё какие то меры предосторожности которые я не учёл, кроме того, что UID пользователя в chroot не совпал с UID пользователя в целевой системе, ткните меня мордой

По-этому нельзя дать простой shell, а нужно создать как можно более изолированную и враждебную среду. В принципе вполне бы подошла виртуальная машина, но в его задачах стоит сборка под AMD64, чего на моём компьютере с Ubuntu 8.04.2 i364 не получить, потому решил подвергнуть компьютер супруги риску, создать там специальных LVM раздел для chroot и там настроить требуемую среду. Итак:

# отмонтирую действую фс на LVM
umount /media/media2

# уменьшаю размер ФС до 200Gb
resize2fs /dev/badvg/media2 200G

# проверяю ФС
e2fsck -f /dev/badvg/media2

# монтирую действую фс назад
mount /media/media2

# уменьшаю раздел LVM на 1Gb
lvreduce -L-1G /dev/badvg/media2

# Создаю новый раздел заняв всё доступное место, 1Gb, назвал его chroot
lvcreate -l +100%FREE -n chroot badvg

# Создаю файловую систему
mkfs.ext3 /dev/badvg/chroot

# Дал файловой системе метку
e2label /dev/badvg/chroot chroot

# Создаю каталог и монтирую в него ФС для chroot, включаем опцию для управления квотами, в принципе квоты не нужны, ведь выделен отдельный раздел, но пусть будут
mkdir -p /media/media2/chroot && mount /dev/badvg/chroot /media/media2/chroot -o usrquota

# Устанавливаю переменную окружения указывающую где искать каталог для chroot
export CHROOTDIR=/media/media2/chroot/

# Создаю и первоначально настраиваю chroot с помощью debootstrap
debootstrap --arch amd64 lenny $CHROOTDIR http://mirror.e-kirov.ru/debian-lenny

# Смотрим что получилось, да там целая система :)
ls /media/media2/chroot/
bin boot dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var

# Подлючаем виртуальные ФС нужные для работы
mount -t proc proc $CHROOTDIR/proc
mount -t devpts devpts $CHROOTDIR/dev/pts

# Устанавливаем нужный софт, locales - чтобы по русски date работала
chroot $CHROOTDIR aptitude install nano vim-full mc locales binutils ssh

# Настраиваем локаль
chroot $CHROOTDIR dpkg-reconfigure locales
[*] ru_RU.UTF-8 UTF-8
ru_RU.UTF-8

# Правим настройки ssh, нам нужно поднять его на нестандартном порту, пусть будет 2200
sed -i 's/Port 22/Port 2200/' /media/media2/chroot/etc/ssh/sshd_config

# Создаём файл запуска ssh в chroot
echo '
export CHROOTDIR=/media/media2/chroot # change
mount -t devpts devpts $CHROOTDIR/dev/pts
mount -t proc proc $CHROOTDIR/proc
chroot $CHROOTDIR /etc/init.d/ssh start
' > /etc/init.d/chroot-ssh-init.sh
chmod u+x /etc/init.d/chroot-ssh-init.sh

# Устанавливаем пароль root для входа через ssh в chroot
chroot $CHROOTDIR passwd

# Запускаем ssh в chroot
/etc/init.d/chroot-ssh-init.sh
Starting OpenBSD Secure Shell server: sshd.

# Логинимся в chroot
ssh katya.xxx -l root -p 2200
root@katya.xxx's password:

# создаём практически самого бесправного юзера, у него только то и есть как доступ к /home/skal
adduser skal

# Вычишаем базу накачанных пакетов, чтобы оставить побольше места
chroot $CHROOTDIR aptitude clean

# Теперь осталось пробросить 2200 порт наружу и chroot практически готов
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 2200 -j DNAT --to-destination 192.168.80.77:2200
iptables -A FORWARD -i eth0 -d 192.168.80.77 -p tcp --dport 2200 -j ACCEPT

Вот и всё вроде, осталось сменить внутренние пароли сделать бекапы и выдать аккаунт враждебному пользователю

 


 

Другие варианты применения chroot

похожие страницы

  1. Установка Ubuntu 12.04 на LVM
  2. Запуска apache в окружении chroot
  3. Перенос ядра из другого дистрибутива
  4. Установка "Налогоплательщик ЮЛ" в Linux
  5. Установка Slackware13 на LVM

#1:

мааленький комментарий:
если сделать chroot $CHROOTDIR /etc/init.d/ssh $1, скрипт можно будет использовать точно как стандартный инит-скрипт :)

ответить  2010-05-03 02:56:46