Потребовалось создать рабочее окружение для сборки бинарей фрипаскалем, причём пользователь практически незнакомый и учитывая фрипаскаль враждебный.
Если видите ещё какие то меры предосторожности которые я не учёл, кроме того, что 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
Вот и всё вроде, осталось сменить внутренние пароли сделать бекапы и выдать аккаунт враждебному пользователю