Tu sei qui: Portale > Varnish > Varnish in chroot jail
Accedi


Hai dimenticato la tua password?
« febbraio 2012 »
febbraio
lumamegivesado
12345
6789101112
13141516171819
20212223242526
272829
 

Varnish in chroot jail

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
— archiviato sotto: , ,

Breve howto per configurare varnish in chroot, in modo da aumentarne la sicurezza

Premessa

Questo howto è basato su Ubuntu 10.10 Maverick Meerkat su piattaforma AMD64 e sul fatto che varnish 2.1 sia già installato e funzionante sotto la directory /usr/local/varnish, nel caso doveste ancora installarlo, potete seguire questa guida.

Creazione delle directory

Per prima cosa creiamo la struttura di directory necessarie a varnish per poter funzionare:

$ cd /usr/local/varnish
$ sudo mkdir -p usr/bin
$ sudo mkdir mkdir -p usr/lib
$ sudo mkdir -p usr/local
$ sudo mkdir -p dev
$ sudo mkdir -p tmp
$ sudo chmod a+rwx tmp
$ sudo chmod +t tmp

Copia degli eseguibili

Iniziamo a copiare gli eseguibili della bin

$ cd /usr/local/varnish/bin
$ sudo cp -f /bin/bash .
$ sudo ln -s bash sh
$ sudo cp -f /bin/ls .
$ sudo cp -f /bin/mv .
$ sudo cp -f /bin/cp .
$ sudo cp -f /bin/cat .
$ sudo cp -f /bin/mkdir .
$ sudo cp -f /bin/pwd .
$ sudo cp -f /bin/rm .
$ sudo cp -f /bin/false .

Ora passiamo a quelli presenti nella usr/bin

$ cd /usr/local/varnish/usr/bin
$ sudo cp -f /usr/bin/id .
$ sudo cp -f /usr/bin/vim.tiny .
$ sudo ln -s -f vim.tiny vi

 Mentre per la sbin

$ cd /usr/local/varnish/sbin
$ sudo cp -f /sbin/ldconfig.real .
$ sudo ln -s -f ldconfig.real ldconfig

Copia delle librerie

A questo punto iniziamo a copiare le shared lib necessarie,

$ cd /usr/local/varnish/lib
$ sudo cp -f /lib/libncurses.so.5 .
$ sudo cp -f /lib/libdl.so.2 .
$ sudo cp -f /lib/libc.so.6 .
$ sudo cp -f /lib64/ld-linux-x86-64.so.2 .
$ sudo cp -f /lib/libselinux.so.1 .
$ sudo cp -f /lib/librt.so.1 .
$ sudo cp -f /lib/libacl.so.1 .
$ sudo cp -f /lib/libpthread.so.0 .
$ sudo cp -f /lib/libattr.so.1 .
$ sudo cp -f /lib/libnsl.so.1 .
$ sudo cp -f /lib/libm.so.6 .
$ sudo cp -f /lib/libpcre.so.3 .
$ cd /usr/local/varnish/usr/local
$ sudo ln -s -f / varnish
$ cd /usr/local/varnish/lib
$ sudo cp -f /lib/libz.so.1 .
$ sudo cp -f /lib/libnss_compat.so.2 .
$ sudo cp -f /lib/libnss_files.so.2 .
$ sudo cp -f /lib/libnss_nis.so.2 .

Ora creiamo un link simbolico di lib64 a lib:

$ cd /usr/local/varnish
$ sudo ln -s -f lib lib64

Copia degli include

Data la necessità di varnish a compilare in run time gli script vcl copiamo anche gli include:

$ cd /usr/local/varnish/usr
$ sudo cp -R -f /usr/include .

Copia dei file in etc

Adesso diamo la possibilità a varnish in chroot di risolvere i nomi di dominio e gli hostname tramite i file /etc/nsswitch.conf, /etc/resolv.conf e /etc/hosts

$ cd /usr/local/varnish/etc
$ sudo cp -f /etc/resolv.conf .
$ sudo cp -f /etc/nsswitch.conf .
$ sudo cp -f /etc/hosts .

Creazione di /dev/null

Varnish ha bisogno del file speciale /dev/null e per fare utilizziamo il comando mknod

$ sudo mknod -m 666 /usr/local/varnish/dev/null c 1 3

Copia dei file necessari a gcc

Dato che varnish necessita della compilazione in run time, dobbiamo predisporre nella nostra gabbia tutto l'occorrente per gcc

$ cd /usr/local/varnish/usr/bin
$ sudo cp -f /usr/bin/gcc-4.4 .
$ sudo ln -s gcc-4.4 gcc
$ sudo ln -s gcc cc
$ cd /usr/local/varnish/usr/lib
$ sudo cp -R -f /usr/lib/gcc .
$ sudo cp -f /usr/lib/libmpfr.so.4 .
$ sudo cp -f /usr/lib/libgmp.so.3 .
$ sudo cp -f /usr/lib/libgomp.so.1 .
$ cd /usr/local/varnish/lib
$ sudo cp -f /lib/libgcc_s.so.1 .
$ cd /usr/local/varnish/usr/bin
$ sudo cp -f /usr/bin/as .
$ sudo cp -f /usr/bin/ld.bfd ld
$ sudo cp -f /usr/bin/nm .
$ sudo cp -f /usr/bin/strip .
$ cd /usr/local/varnish/usr/lib
$ sudo cp -f /usr/lib/libopcodes-2.20.51-system.20100908.so .
$ sudo cp -f /usr/lib/libbfd-2.20.51-system.20100908.so .
$ sudo cp -f /usr/lib/crti.o .
$ sudo cp -f /usr/lib/libc.so .
$ sudo cp -f /usr/lib/libc_nonshared.a .
$ sudo cp -f /usr/lib/crtn.o .

Creazione dell'utente

Ora creiamo un utente "varnish" nella nostra gabbia con uid e gid corrispondenti a 9999 e shell /bin/false

$ cd /usr/local/varnish/etc
$ echo "varnish:x:9999:9999::/:/bin/false" > /tmp/passwd
$ echo "varnish:\!:14972:0:99999:7:::" > /tmp/shadow
$ sed 's/\\//g' /tmp/shadow > /tmp/shadow2
$ sudo cp -f /tmp/passwd .
$ sudo cp -f /tmp/shadow2 shadow
$ sudo chmod 640 shadow

Esecuzione

Ora non ci resta che effettuare il chroot e lanciare varnish

$ sudo chroot /usr/local/varnish
bash-4.1# /sbin/varnishd -a 0.0.0.0:8080 \
    -f /etc/varnish/default.vcl -s malloc,128M -u varnish

Ricordatevi però di modificare prima il file /usr/local/varnish/etc/varnish/default.vcl secondo le proprie esigenze.

Script per la creazione della gabbia

Qui di seguito potete scaricare un semplice script per preparare l'ambiente del chroot.

Azioni sul documento