Montar un servidor de archivos en 10 minutos: vsftpd


Un servidor de ficheros (servidor FTP) puede ser muy útil a la hora de centralizar datos en nuestra red, compartir con otros e incluso recibir datos de cualquier usuario autorizado para hacerlo. Montar un servidor ftp es muy sencillo gracias a VSFTPD, un servidor rápido, ligero, seguro y de fácil configuración.

Entre sus características más interesantes encontramos:
  1. Servidor rápido, estable y seguro
  2. Configuración sencilla
  3. Soporte de usuarios anónimos, registrados y virtuales
  4. Soporte para virtual hosts
  5. Ejecución independiente o mediante (x)inetd
  6. Soporte IPv6 y SSL
  7. Límites por usuario, conexión y ancho de banda


  • Instalación
Gracias a que VSFTPD está presente en los repositorios oficiales de Ubuntu su instalación será tan sencilla como ejecutar la orden:
$ sudo apt-get install vsftpd

El propio proceso de instalación se encarga de crear el usuario no privilegiado ftp, crear el directorio /home/ftp (donde colocaremos los archivos disponibles para el acceso anónimo) y arrancar el servicio.

Nota: En caso de tener un firewall instalado no olvides que deberás abrir el puerto 21 (si no sabes como hacerlo consulta el artículo Administración del firewall con firestarter), además si conectas a internet a través de un router y pretendes dar acceso al servidor de ficheros desde el exterior deberás redireccionar el puerto 21 en la configuración del router (revisa la documentación de tu modelo de router si no sabes como hacerlo).

Podemos comprobar que el proceso ha funcionado apuntando nuestro navegador o cliente de ftp favorito a la dirección ftp://localhost o ftp://127.0.0.1, en caso de acceder desde un ordenador remoto deberemos usar nuestra IP privada (si conectamos desde dentro de una red local) o nuestra IP pública (si conectamos desde Internet):

Firefox conectado a nuestro servidor de ftp

Nota: no muestra ningún archivo porque aun no he colocado nada en el directorio /home/ftp

  • Configuración
La configuración, muy sencilla, se realiza a través de un único archivo de texto plano: /etc/vsftpd.conf. Para realizar cualquier cambio en la configuración editaremos este archivo con la orden:
$ sudo nano /etc/vsftpd.conf
Y una vez hechos los cambios reiniciaremos el servicio con la orden:
$ sudo /etc/init.d/vsftpd restart

Veamos ahora como cambiar la configuración por defecto para dejar el servicio a nuestro gusto con algunos ejemplos.


  • Acceso anónimo
El acceso anónimo permitirá a cualquier persona que conozca nuestra dirección IP conectarse al servicio y navegar por el directorio /home/ftp. Este modo es idoneo para compartir archivos que no necesitan una especial protección.

Para permitir el acceso anónimo editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
anonymous_enable=YES

Para denegar el acceso anónimo editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
anonymous_enable=NO


  • Acceso privado
El acceso privado permite establer nombres de usuario y contraseña para acceder al servicio, cada usuarió podrá acceder tan solo a sus propios archivos. Este es un sistema idóneo para organizar la información por usuarios y otorgar un cierto grado de seguridad a los archivos.

Para permitir el acceso privado editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
local_enable=YES

Para denegar el acceso privado editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
local_enable=NO

Una vez activado el acceso privado apuntaremos nuestro navegador o cliente de ftp a la dirección ftp://usuario:clave@localhost o ftp://usuario:clave@127.0.0.1, en caso de acceder desde un ordenador remoto deberemos usar nuestra IP privada (si conectamos desde dentro de una red local) o nuestra IP pública (si conectamos desde Internet):

Firefox mostrando el contenido privado de un usuario local

  • Seguridad
Aunque la configuración por defecto es bastante segura podemos afinar un poco más este aspecto si nuestros datos lo requieren.

Para evitar que los usuarios registrados puedan salir de su directorio $HOME y navegar así por todo el sistema de ficheros editaremos el archivo de configuración y nos aseguramos de que contiene la linea:
chroot_local_user=YES

Limitar el numero máximo de conexiones simultaneas (para evitar ataques DoS) editaremos el archivo de configuración y nos aseguramos de que contiene las lineas:
listen=YES
max_clients=10


Impedir que los usuarios puedan enviar archivos a nuestro servidor (opcion activada por defecto), editaremos el archivo de configuración y nos aseguramos de que contiene la linea:
write_enable=NO

Cambiar el puerto por el que escucha el servicio puede ayudar a evitar ataques automatizados e intrusos poco experimentados, para cambiarlo y usar por ejemplo el puerto 50 editamos el archivo de configuración y añadimos:
listen_port=50


  • Modo de ejecución
Podemos elegir ejecutar el servidor de ficheros como un servicio del sistema controlado desde el arranque (modo Standalone, responde más rápido a las peticiones) o que se inicie automáticamente en el momento en que se recibe una petición (modo inetd, libera más recursos en caso de no usarse el servicio)

Para establecer el servicio en modo Standalone (recomendado) editaremos el archivo de configuración y nos aseguramos de que contiene la linea:
listen=YES
Para establecer el servicio en modo xinetd comentaremos la linea anterior de manera que quede así:
#listen=YES

Y crearemos el archivo de configuración de xinetd para el servicio de ftp /etc/vsftpd.xinetd con este contenido:

# Configuración para el servicio FTP
service ftp
{
disable                 = no
socket_type             = stream
wait                    = no
user                    = root
server                  = /usr/sbin/vsftpd
per_source              = 5
instances               = 200
no_access               = 192.168.1.3
banner_fail             = /etc/vsftpd.busy_banner
log_on_success          += PID HOST DURATION
log_on_failure          += HOST
}
# Fin del servicio FTP


  • Más información
Sitio web oficial de VSFTPD
http://www.guia-ubuntu.org/index.php?title=Servidor_de_FTP