Badroot Security Group

W H I T E   P A P E R

Vserver
a cura di: einyx

 

NOTA BENE:
vserver puo' essere usato in combinazione a grsecurity per questo vi
rimando a:
http://www.fatalimpulse.net/badroot/documents/grsec.htm

Cos' è vserver?
Vserver è una macchina virtuale completamente diversa dalla macchina
ospite ma che sfrutta lo stesso kernel di quella ospite (una sorta di UML). Vserver vi
permettera' di far girare qualsiasi distribuzione al'interno di un'altra,
anche su sistemi a 64bit senza alcun limite e addirittura
con indirizzi ip differenti.

Un sistema ospite non puo' essere raggiunto dal sistema ospitato e quindi
avrai un ambiente sicuro evitando di rischiare la compromissione
del sistema originario, potrete testare
pacchetti o applicazioni su un vserver "clone" di un altro vserver per
evitare di compromettere un database, file di configurazione, etc.

Setup
Scarichimo l'ultima patch dal sito:
www.13thfloor.at/vserver/s_release/v1.2.10/patch-2.4.30-vs1.2.10.diff.bz2
e scompattiamola in /usr/src/ con:
bzip2 -d patch-2.4.30-vs1.2.10.diff.bz2
Fatto questo, patchiamo il nostro kernel vanilla (nel nostro caso 2.4.30) quindi entriamo
nella dir dei sorgenti che abbiamo precedentemente scaricato e patchiamo
il kernel cosi:
patch -p1 < ../patch-2.4.30-vs1.2.10.diff

Adesso diamo:
make menuconfig per configurare il nostro kernel o in alternativa copiamo
il config da /boot/config-2.4.x e adattiamolo a dovere. Personalmente
sconsiglio questo passo se non avete la stessa versione del kernel che
state per compilare per ovvi motivi...fate voi.
# make dep
# make bzImage
# make modules
# make modules_install
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.30-vserver
# cp System.map /boot/System.map-2.4.30-vserver

O se usiamo una debian piu' semplicemente:
# apt-get install kernel-package
# make-kpkg kernel-image

Cio' creera' un .deb del nostro kernel patchato, per installarlo bastera'
dare:
# dpkg -i kernel-image-2.4.30-vs1.2.10_10.00.Custom_i386.deb

Controlliamo in /etc/lilo.conf o in /boog/grub/menu.lst
(dipende dal vostro bootloader) che il kernel di boot sia propriamente
linkata a:
/boot/vmlinuz-2.4.30-vs1.2.10 , quindi date:
# lilo -v
o
# grub-install /dev/hda
quindi...
# reboot

Consiglio per questa operazione di inserire nel lilo.conf una sezione
per caricare il vostro vecchio kernel in caso di errori in quello appena
compilato.

Se il vostro kernel non e' andato in "panico" installate util-vserver
che vi aiutera' nella gestione della vostra macchina virtuale:
www.13thfloor.at/vserver/s_release/v1.2.10/util-vserver-0.30.tar.bz2
o per debian
# apt-get install util-vserver.

Adesso editate /etc/vservers.conf inserendo questa riga:
GENERATEMTAB=yes

Creiamo il file di conf per il nostro vserver in:
/etc/ververs/nomevserver.conf , e impostiamo le seguenti opzioni:
IPROOT=10.0.0.3
IPROOTMASK=255.255.255.0
IPROOTDEV=eth0
S_HOSTNAME=hostnamechepreferite
S_FLAGS="lock nproc"
ULIMIT="-H -u 1000"
ONBOOT=yes
Ora siamo quasi a buon punto, creiamo la dir che ospitera' il sistema
virtuale:
# mkdir /etc/vservers/.defaults/vdirbase/debian_v1
Quindi carichiamogli dentro il sistema vero e proprio:
# apt-get install debootstrap
# debootstrap sarge /etc/vservers/.defaults/vdirbase/debian_v1/ \
http://ftp.it.debian.org/debian

Se usate un altra distribuzione vi bastera' un tool per la creazione di
una jail (volendo potete farlo tranquillamente a mano) in ogni caso il
sito ufficiale di linux-vserver riporta questo script (per slackware):

[ CUT ]
#!/bin/bash
#
# mkjail: create vservers
# feedback: rhatto at riseup.net
#

# adjust this to where your packages live
PACKAGES=/slackware

# this is where you put the rc's scripts
SCRIPTS=/scripts

# which disk sets you want to install
SERIES="a ap l n"

if (($# != 1)); then
echo "usage: $0 <server-name>"
exit 1
fi

server=$1
mkdir /vservers/$server

echo "installing the packages"
cd $PACKAGES
for dir $SERIES; do
cd $dir; installpkg -root /vservers/$server *tgz; cd ..
done

echo "copying initialization scripts"
cp $SCRIPTS/rc.* /vservers/$server/etc/rc.d/
cp /etc/resolv.conf /vservers/$server/etc/

echo "creating /etc/fstab /etc/mtab /etc/localtime /etc/profile"
echo /dev/hdv1 / ext2 defaults 1 1 > /vservers/$server/etc/fstab
echo /dev/hdv1 / ext2 rw 0 0 > /vservers/$server/etc/mtab
cp /etc/localtime /vservers/$server/etc/
cp $SCRIPTS/profile /vservers/$server/etc

echo "creating dependency cache"
cd /vservers/$server/
tar xvf /storage/vserver/vserver-dev.tar
ln -s lib/ld-2.3.2.so lib/ld-linux.so.2
chroot /vservers/$server/ sbin/ldconfig

echo "creating config file"
cp $SCRIPTS/skel.conf /etc/vservers/$server.conf

echo "done; now edit /etc/vservers/$server.conf"
echo "then, route your server thru iptables and start it"
echo "dont forget to change your vserver's root passwd"

[ END CUT]

Finito questo passo non ci resta che "accendere" la nostra debian
nuova di zecca con: vserver debian_v1 start e vserver debian_v1 enter