Repository 32bit  Forum
Repository 64bit  Wiki

Chrootare VSFTPD

Da Slacky.eu.

Indice

Introduzione

Viste le vulnerabilita' che da sempre affliggono i vari demoni FTP e dato che un poco di paranoia non guasta ho scritto questo piccolo promemoria su come mettere in una gabbia ( chroot ) il server Vsftpd sotto la nuova Slackware 10.1; cosi' almeno i vari amici riusciranno a mandarmi i loro files senza intasarmi la posta. Nella nuova versione della Slackware Proftpd ha lasciato il posto a Vsftpd compilato con il supporto per lo scambio dei dati sotto SSL; Vsftpd era gia' presente da tempo in altre distribuzioni Linux ma non nella Slackware, solo nella 10.1 Patrick ha 'fatto il cambio'. Lo scopo di questo documento e' rendere "estraneo" il nostro demone FTP dal resto del sistema tanto da "ingabbiarlo" in una directory specifica con propri utenti e librerie limitando il piu' possibile danni da eventuali attacchi o danneggiamenti il resto della nostra Linux box; va' anche detto che Vsftpd possiede gia'una sua funzione simile che àncora gli user alla propria home, ma non e' il solo nostro obbiettivo. Ovviamente tutti i comandi che seguono devono essere impartiti da root.

Installazione

Prima di tutto installiamo Vsftpd se non lo abbiamo gia' fatto scaricandolo direttamente da www.slackware.com oppure dal primo cd della Slackware 10.1 sotto la directory /slackware/n/ installiamolo con un

# installpkg vsftpd-2.0.1-i486-1.tgz

ora per comodita' creiamo un utente di nome ¨test¨ con una sua directory:

# useradd test -g users -d /home/test

e forniamogli una password cosi':

# passwd test

e definiamola

Creazione della nuova struttura

Procediamo con la vera e propria creazione della gabbia chroot e creiamo le cartelle del nostro nuovo ambiente che sara /chroot/vsftpd/

# cd /
# mkdir -p /chroot/vsftpd
# mkdir -p /chroot/vsftpd/etc
# mkdir -p /chroot/vsftpd/tmp
# mkdir -p /chroot/vsftpd/usr
# mkdir -p /chroot/vsftpd/usr/sbin
# mkdir -p /chroot/vsftpd/usr/lib
# mkdir -p /chroot/vsftpd/usr/share
# mkdir -p /chroot/vsftpd/usr/share/empty
# mkdir -p /chroot/vsftpd/home
# mkdir -p /chroot/vsftpd/home/ftp
# mkdir -p /chroot/vsftpd/home/test
# chmod 700 /chroot/vsftpd/home/test
# chown test:users /chroot/vsftpd/home/test
# mkdir -p /chroot/vsftpd/lib
# mkdir -p /chroot/vsftpd/var
# mkdir -p /chroot/vsftpd/var/run
# mkdir -p /chroot/vsftpd/var/log
# chmod 777 /chroot/vsftpd/tmp

abbiamo creato tutte le cartelle che ci possono servire anche la home di test a cui abbiamo assegnato il suo proprietario e settato i permessi a 700. ora dobbiamo essere sicuri di copiarci dentro tutte le librerie necessarie e per farlo usiamo il comando ldd che e' presente nella installazione "standard".

# ldd /usr/sbin/vsftpd

il sistema dovrebbe restituire una cosa simile a questa:

linux-gate.so.1 => (0xffffe000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4002d000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40042000)
libdl.so.2 => /lib/libdl.so.2 (0x4006f000)
libresolv.so.2 => /lib/libresolv.so.2 (0x40072000)
libutil.so.1 => /lib/libutil.so.1 (0x40084000)
libssl.so.0 => /usr/lib/libssl.so.0 (0x40087000)
libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0x400b9000)
libc.so.6 => /lib/libc.so.6 (0x401b8000)
/lib/ld-linux.so.2 (0x40000000)

la presenza delle librerie libssl e libcrypto ci indica che il nostro demone e'compilato con il supporto SSL

# cp /lib/libnsl* /chroot/vsftpd/lib
# cp /lib/libcrypt* /chroot/vsftpd/lib
# cp /lib/libdl* /chroot/vsftpd/lib
# cp /lib/libresolv* /chroot/vsftpd/lib
# cp /lib/libutil* /chroot/vsftpd/lib
# cp /lib/libc* /chroot/vsftpd/lib
# cp /usr/lib/libssl* /chroot/vsftpd/usr/lib
# cp /usr/lib/libcrypto* /chroot/vsftpd/usr/lib
# cp /lib/ld* /chroot/vsftpd/lib
# cp /lib/libnss* /chroot/vsftpd/lib

qui'abbiamo copiato le librerie necessarie all'avvio notate la differenza di posizione nelle direcrory ora invece copiamo all'interno dell'ambiente i file dei gruppi e delle password che sono tre:

# cp /etc/passwd /chroot/vsftpd/etc
# cp /etc/group /chroot/vsftpd/etc
# cp /etc/shadow /chroot/vsftpd/etc

copiamo anche il file di configurazione standard di vsftpd e file di sistema necessari

# cp /etc/vsftpd.conf /chroot/vsftpd/etc
# cp /etc/resolv.conf /chroot/vsftpd/etc
# cp /etc/hosts /chroot/vsftpd/etc
# cp /etc/nsswitch.conf /chroot/vsftpd/etc
# cp /etc/localtime /chroot/vsftpd/etc

dobbiamo copiare anche l'eseguibile del demone:

# cp /usr/sbin/vsftpd /chroot/vsftpd/usr/sbin

anzitutto editiamo il file /chroot/vsftpd/etc/group avendo cura di eliminare tutte le informazioni dei gruppi che non siano ftp, nobody, nogroup e users, piu´ o meno cosi´ :

ftp::50:
nobody::98:nobody
nogroup::99:
users::100:

replichiamo con il file /chroot/vsftpd/etc/passwd, stessa cosa. attenzione che il nostro utente non ha una shell valida, dovremmo dirlo a Vsftpd.

ftp:x:14:50::/home/ftp:
nobody:x:99:99:nobody:/:
test:x:1001:100::/home/test:

e con il file /chroot/vsftpd/etc/shadow che contiene fisicamente le password dei nostri utenti:

ftp:!!:9797:0:::::
nobody:!!:9797:0:::::
test:$fy/WP/sHeE$L5zwtrRHqeyqHoZpGmRbA.:12866:0:99999:7:::

ora creiamo sotto /chroot/vsftpd/etc/ il file vsftpd.user_list inserendoci solamente il nome del nostro user di prova:

test

editiamo il file /chroot/vsftpd/etc/vsftpd.conf in questa maniera :

anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ls_recurse_enable=NO
listen_port=21
connect_from_port_20=NO
listen=YES
background=YES
chroot_local_user=YES
check_shell=NO
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list

E' tutto abbastanza intuitivo abbiamo disabilitato gli utenti anonimi, posto il server sulla porta 21 in background e sempre in ascolto, ricordiamoci di disabilitarlo in /etc/inetd.con commentandone le righe adeguate. La riga check_shell definisce al server che gli utenti che si collegano possano non avere una shell valida ( abbiamo tolto la dir /bin ); le ultime tre righe definiscono un file vsftpd.user_list dove andiamo ad inserire gli utenti a cui vogliamo dare accesso, tutti gli altri ne sono esclusi. diamo a questi ultimi file un attributo di immutabilita' tanto per sicurezza:

chattr +i /chroot/vsftpd/etc/passwd
chattr +i /chroot/vsftpd/etc/group
chattr +i /chroot/vsftpd/etc/vsftpd.conf
chattr +i /chroot/vsftpd/etc/resolv.conf
chattr +i /chroot/vsftpd/etc/hosts
chattr +i /chroot/vsftpd/etc/nsswitch.conf
chattr +i /chroot/vsftpd/etc/vsftpd.conf
chattr +i /chroot/vsftpd/etc/vsftpd.user_list

Avviare il server

Bene ora non ci resta che avviare il server con il cmando :

# chroot /chroot/vsftpd /usr/sbin/vsftpd

Per automatizzare il tutto potete inserirlo dentro a /etc/rc.d/rc.local , ad ogni avvio verra' lanciato. Se il vostro server e' posto dietro un firewall la porta da aprire sara la 21 e volendo la 20 cambiando il file di configurazione; facendo delle prove in locale sulla stessa macchina cambiate porta dalla 21 alla 75 per esempo. Per aggiungere altri utenti fatelo normalmente da root e poi copiate le strighe che si verranno ad aggiungere ai file /etc/passwd e /etc/shadow copiandole all'interno degli stessi file sotto /chroot/vsftpd/etc/; aggiungete le directory sotto /chroot/vsftpd/home/ con i permessi adeguati cosi' come pure i nomi dei nuovi utenti all'interno del file /chroot/vsftpd/etc/vsftpd.user_list. Una volta aggiunti gli utenti e copiati possiamo tranquillamente eliminarli dal sistema base con

# userdel test

questo dipende ovviamente dai servizi che la macchina eroga all' esterno, valutatelo. Bene spero di non aver sparato troppe fregnacce, siete comunque invitati a farmelo presente, ma volevo solo aiutare qualche pinguinomane.

Conclusione

Il sito ufficiale di VSFTPD e' http://vsftpd.beasts.org Questo documento e'stato scaricato da http://gaby.hopto.org Non mi assumo nessuna responsabilita' per eventuali danni derivanti dal presente documento.

Marzo 2005

gAbY

gaby68@libero.it

Strumenti personali
Namespace

Varianti