VSFTP | Guia para la instalacion de un servidor ftp seguro con VSFTP

Tagged:  

En la actualidad donde se necesita transferir grandes cantidades de información de un lugar a otro de manera rapida y segura se hace cada vez mas compleja esta tarea. Hace algunas decadas cuando comenzaron a aflorar las redes como internet con fines militares y academicos donde practicamente todo el mundo que estaba conectado a esas redes se conocia era muy simple configurar un servidor FTP (File Transfer Protocol) y publicarlo en la red sin pensar que alguna persona tendria interes en la informacion montada sobre el equipo y mucho menos intentar atacar el servidor para que este no pueda brindar mas servicios.

En los proximos parrafos vamos a ver como se instala un servidor FTP con el servidor VSFTP (Very Secure File Transfer Protocol), pero antes vamos a conocer un poco mas de que se trata el VSFTP.
El VSFTP es un servidor FTP para sistemas Unix incluido Linux. Es seguro, extremadamente rapido y esta licenciado por medio de la licencia GPL.

Algunas de las caracteristicas principales

• Configuracion de direcciones IP Virtuales
• Usuarios Virtuales
• Operacion por medio de Inetd o Standalone
• Poderosa configuracion por usuario
• Control de ancho de banda
• Limite de conexiones IP por usuario
• Encripcion por medio de SSL

Deberia utilizar VSFTP si lo que busca es:

• Seguridad
• Estabilidad
• Performance

Cuales son los sitios mas grandes que utilizan VSFTP (lista a Junio de 2004)

• ftp.redhat.com
• ftp.suse.com
• ftp.debian.org
• ftp.openbsd.org
• ftp.freebsd.org
• ftp.gnu.org
• ftp.gnome.org
• ftp.kde.org
• ftp.kernel.org
• rpmfind.net
• ftp.linux.org.uk
• ftp.gimp.org
• ftp-stud.fht-esslingen.de
• gd.tuwien.ac.at
• ftp.sunet.se
• ftp.ximian.com
• ftp.engardelinux.org
• ftp.sunsite.org.uk
• ftp.isc.org

Ahora si, a instalar!

Lo primero que debemos hacer para instalar este servidor FTP es descargarlo de ftp://vsftpd.beasts.org/users/cevans/, para poder hacer esto debemos utilizar nuestro cliente FTP preferido en consola grafica o simplemente utilizar el comando FTP desde un shell.

nessussrv01:/tmp# ftp vsftpd.beasts.org
Connected to vsftpd.beasts.org.
220 sphinx.mythic-beasts.com FTP server ready.
Name (vsftpd.beasts.org:root): anonymous
331 Guest login ok, type your name as password.
Password:
230- Welcome to Mythic Beasts Ltd.
230-
230- This system is for authorised users only. All access is logged.
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Una vez conectados al servidor FTP debemos ingresar a los directorios users y luego cevans para poder acceder al directorio donde se encuentran las distintas versiones de VSFTPD. Para poder ver las diferentes versiones disponibles debemos ejecutar el comando ls.

ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for '/bin/ls'.
total 2628
drwxr-x--x 2 530 530 4096 Dec 16 2004 private
drwxr-xr-x 9 530 530 4096 Jul 3 2006 untar
-rw-r--r-- 1 530 530 90425 Sep 22 2001 vsftpd-0.9.2.tar.gz
-rw-r--r-- 1 530 530 92976 Nov 16 2001 vsftpd-1.0.1.tar.gz
-rw-r--r-- 1 530 530 113205 Jul 31 2002 vsftpd-1.1.0.tar.gz
-rw-r--r-- 1 530 530 115836 Oct 7 2002 vsftpd-1.1.1.tar.gz
-rw-r--r-- 1 530 530 117792 Oct 16 2002 vsftpd-1.1.2.tar.gz
-rw-r--r-- 1 530 530 136669 Apr 26 2004 vsftpd-1.2.2.tar.gz
-rw-r--r-- 1 530 530 145467 Jul 1 2004 vsftpd-2.0.0.tar.gz
-rw-r--r-- 1 530 530 189 Jul 1 2004 vsftpd-2.0.0.tar.gz.asc
-rw-r--r-- 1 530 530 146231 Jul 2 2004 vsftpd-2.0.1.tar.gz
-rw-r--r-- 1 530 530 189 Jul 2 2004 vsftpd-2.0.1.tar.gz.asc
-rw-r--r-- 1 530 530 151178 Mar 3 2005 vsftpd-2.0.2.tar.gz
-rw-r--r-- 1 530 530 189 Mar 3 2005 vsftpd-2.0.2.tar.gz.asc
-rw-r--r-- 1 530 530 153266 Mar 19 2005 vsftpd-2.0.3.tar.gz
-rw-r--r-- 1 530 530 189 Mar 19 2005 vsftpd-2.0.3.tar.gz.asc
-rw-r--r-- 1 530 530 151811 Mar 5 2005 vsftpd-2.0.3pre1.tar.gz
-rw-r--r-- 1 530 530 152681 Mar 12 2005 vsftpd-2.0.3pre2.tar.gz
-rw-r--r-- 1 530 530 189 Mar 12 2005 vsftpd-2.0.3pre2.tar.gz.asc
-rw-r--r-- 1 530 530 154857 Jan 9 2006 vsftpd-2.0.4.tar.gz
-rw-r--r-- 1 530 530 189 Jan 9 2006 vsftpd-2.0.4.tar.gz.asc
-rw-r--r-- 1 530 530 277642 Jun 13 2006 vsftpd-2.0.5-snap1.tar.gz
-rw-r--r-- 1 530 530 155985 Jul 3 2006 vsftpd-2.0.5.tar.gz
-rw-r--r-- 1 530 530 189 Jul 3 2006 vsftpd-2.0.5.tar.gz.asc
226 Transfer complete.

Para este ejercicio vamos a descargar la version 2.0.5 la cual es la ultima disponible al momento de escribir este documento.

ftp> get vsftpd-2.0.5.tar.gz
local: vsftpd-2.0.5.tar.gz remote: vsftpd-2.0.5.tar.gz
200 PORT command successful.
150 Opening BINARY mode data connection for 'vsftpd-2.0.5.tar.gz' (155985 bytes).
226 Transfer complete.
155985 bytes received in 19.87 secs (7.7 kB/s)
ftp>Descarga del paqueteDescarga del paquete
Podemos tipear el comando ls para asegurarnos que el archivo se encuentra donde debe. El proximo paso es descomprimir y desagrupar el archivo descargado y para poder hacer esto debemos ejecutar los siguientes comandos:

nessussrv01:/tmp# gzip -d vsftpd-2.0.5.tar.gz
nessussrv01:/tmp# tar -xvf vsftpd-2.0.5.tar


Ahora debemos ingresar al directorio que se creo al momento de desagrupar con el tar el archivo descargado y luego podemos utilizar el comando ls para listar el contenido del directorio

nessussrv01:/tmp# cd vsftpd-2.0.5
nessussrv01:/tmp/vsftpd-2.0.5# ls
access.c defs.h ftpdataio.h netstr.c privops.c secbuf.h strlist.c TUNING
access.h dummyinc hash.c netstr.h privops.h
SECURITY strlist.h twoprocess.c
ascii.c EXAMPLE hash.h oneprocess.c privsock.c secutil.c sysdeputil.c twoprocess.h
ascii.h FAQ INSTALL oneprocess.h privsock.h secutil.h sysdeputil.h utility.c
AUDIT features.c ipaddrparse.c parseconf.c README session.h sysstr.c utility.h
banner.c features.h ipaddrparse.h parseconf.h README.security SIZE sysstr.h vsf_findlibs.sh
banner.h filesize.h LICENSE port README.ssl SPEED sysutil.c vsftpd.8
BENCHMARK filestr.c logging.c postlogin.c readwrite.c ssl.c sysutil.h vsftpd.conf
BUGS filestr.h logging.h postlogin.h readwrite.h ssl.h tcpwrap.c vsftpd.conf.5
builddefs.h ftpcmdio.c ls.c postprivparent.c RedHat
standalone.c tcpwrap.h vsftpver.h
Changelog ftpcmdio.h ls.h postprivparent.h REFS
standalone.h TODO xinetd.d
COPYING ftpcodes.h main.c prelogin.c REWARD str.c tunables.c
COPYRIGHT ftpdataio.c Makefile prelogin.h secbuf.c str.h tunables.h
nessussrv01:/tmp/vsftpd-2.0.5#

El proximo comando es ejecutar el comando make para poder crear los binarios propios del servicio

nessussrv01:/tmp/vsftpd-2.0.5# make
gcc -c tcpwrap.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -c ipaddrparse.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -c access.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -c features.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -c readwrite.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -c ssl.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -c sysutil.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -c sysdeputil.c -O2 -Wall -W -Wshadow -idirafter dummyinc
gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o
sstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standa
atures.o readwrite.o ssl.o sysutil.o sysdeputil.o -Wl,-s `./vsf_findlibs.sh`
nessussrv01:/tmp/vsftpd-2.0.5#

Debemos crear los usuarios nobody y ftp los cuales son requeridos por la instalacion, en nuestro caso el usuario ya existia en el sistema. Tambien debemos crear el directorio /usr/share/empty

nessussrv01:/tmp/vsftpd-2.0.5# useradd nobody
useradd: user nobody exists
nessussrv01:/tmp/vsftpd-2.0.5# useradd -d /var/ftp ftp
nessussrv01:/tmp/vsftpd-2.0.5#
nessussrv01:/tmp/vsftpd-2.0.5# mkdir /usr/share/empty
nessussrv01:/tmp/vsftpd-2.0.5#

Luego de esto debemos cambiar permisos sobre algunos directorios:

nessussrv01:/tmp/vsftpd-2.0.5# chown root.root /var/ftp
nessussrv01:/tmp/vsftpd-2.0.5# chmod og-w /var/ftp
nessussrv01:/tmp/vsftpd-2.0.5#

Segun la documentacion de la instalacion, la opcion de ejecutar el make install dejaria parte de los archivos de configuracion y binarios en lugares sensibles del sistema, por lo que se recomienda copiar a mano los siguientes archivos a las siguientes ubicaciones:

nessussrv01:/tmp/vsftpd-2.0.5# cp vsftpd /usr/local/sbin/vsftpd
nessussrv01:/tmp/vsftpd-2.0.5# cp vsftpd.conf.5 /usr/local/man/man5
nessussrv01:/tmp/vsftpd-2.0.5# cp vsftpd.8 /usr/local/man/man8
nessussrv01:/tmp/vsftpd-2.0.5# cp vsftpd.conf /etc
nessussrv01:/tmp/vsftpd-2.0.5#

Listo! la instalacion ya esta completa pero para poder verificar el funcionamiento debemos correr el binario para levante el servidor FTP. A modo de ejemplo correremos el servidor e modo standalone y para poder correrlo de este modo debemos modificar el archivo de configuracion (/etc/vsftpd.conf) agregando la linea:

listen=YES

Luego ejecutamos el binario del servidor con el siguiente comando:

nessussrv01:/tmp/vsftpd-2.0.5# /usr/local/sbin/vsftpd &
[1] 1457
nessussrv01:/tmp/vsftpd-2.0.5#

Y por ultimo para finalizar la prueba podemos conectarnos nostros mismos a nuestro servidor:

nessussrv01:/tmp/vsftpd-2.0.5# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.0.5)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Feb 12 14:37 hola
226 Directory send OK.
ftp>

Comentarios Finales

Lo que se demostro aqui fue unicamente la instalacion del servicio ftp con VSFTP pero unicamente eso. En la segunda parte realizaremos una configuracion mas interesante del servicio junto con un analisis del archivo de configuracion y sus apartados mas importantes. Tambien veremos como configurar el inetd para que maneje el servicio al momento desde el inicio del sistema.

Adjunto tienen una copia en pdf para imprimir.
El articulo sobre configuracion del servicio esta en http://www.linuxcds.com.ar/drupal/node/37

Nicolas Solop
Ver el perfil de Nicolas Solop en LinkedIn


AdjuntoTamaño
instalacion de un servidor seguro con vsftp.pdf579.38 KB