Información importante

Antes de empezar a leer esta entrada tienes que saber que el protocolo FTP es inseguro. Por lo tanto, si puedes evitar usarlo, hazlo. Como alternativa, yo recomendaría usar SFTP.

En cambio, a veces es necesario tener FTP instalado. Si este es tu caso, en esta guía vamos a aprender a configurar VSFTPD, uno de los servidores de FTP más conocidos del mercado. Una de las principales características de VSFTPD es que es muy fácil configurarlo para que funcione sobre SSL, lo que disminuye considerablemente la inseguridad de FTP.

¿Qué vamos a hacer?

Los pasos que se dan en esta guía te proporcionan un camino para obtener un servidor VSFTPD 2.3.5 configurado de la siguiente manera:

  • Los usuarios que pueden acceder al servicio serán usuarios del sistema que pertenecen a un grupo concreto.
  • Los usuarios solo podrán acceder al árbol de archivos que esté debajo de su directorio home.
  • Los usuarios podrán subir y eliminar archivos.
  • El servidor solo aceptará conexiones que vayan sobre SSL

Empecemos

Configurar cualquier tipo de servidor nunca es una tarea sencilla. Hay que tener mucho cuidado con no meter la pata porque, a parte de que queremos que las cosas funcionen bien, uno de los principales agujeros de seguridad que se encuentran en todos los equipos son servidores mal configurados.

En esta guía vamos a seguir los siguientes pasos:

  1. Instalación y configuración básica (sin SSL)
  2. Restringir el acceso al servicio a un grupo de usuarios determinado
  3. Comprobar que todo funciona bien
  4. Crear un certificado
  5. Configurar el servicio para usar SSL

Instalando y configurando VSFTPD

En esta guía vamos a configurar VSFTPD para funcionar sobre Debian. Si tú también estás usando Debian o alguna distribución derivada (Ubuntu o Linux Mint, por ejemplo) puedes utilizar el siguiente comando para instalar el servicio:

sudo apt-get install vsfptd

Una vez termine la ejecución del comando, tendrás instalada en tu máquina la versión más reciente que haya en el repositorio de tu distribución. La versión de VSFTPD utilizada en esta guía es 2.3.5.

Ahora que tenemos instalado el servicio, vamos configurarlo para que se comporte como hemos expuesto anteriormente. Para eso, tenemos que editar el archivo de configuración que se encuentra en /etc/vsftpd.conf. Por lo tanto, lo abrimos con nuestro editor favorito:

vim /etc/vsftpd.conf

En el archivo de configuración encontraremos muchas opciones pero en nuestro caso solo nos interesa modificar unas pocas:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES

Nota: Alguna de estas opciones aparecerá con el valor correcto pero comentada (comentada es cuando la línea comienza con #). En ese caso, simplemente hay que quitar la almohadilla.

Una vez hayamos terminado de editar el archivo, lo guardamos y reiniciamos el servicio para que utilice la nueva configuración:

sudo /etc/init.d/vsftpd restart

¡Y ya está! Ya tenemos nuestro servidor de FTP instalado y configurado

Restringir el acceso al servicio a un grupo de usuarios determinado

Ahora mismo tenemos el servidor configurado de manera que cualquier usuario del sistema puede hacer uso de él. Sin embargo, normalmente tenemos muchos usuarios que no necesitan para nada acceder por FTP. Por eso, en esta parte vamos a restringir el acceso a un grupo de usuarios específico. De esta forma, si un usuario que no pertenece a este grupo intenta acceder al FTP, el servicio rechazará la conexión aunque los credenciales sean correctos.

Lo primero que vamos a hacer es crear el grupo al que tienen que pertenecer los usuarios para conectarse al servidor. A este grupo lo vamos a llamar ftp-user:

sudo groupadd ftp-user

Ahora que tenemos el grupo creado, vamos a modificar el archivo que utiliza VSFTPD para comprobar si un usuario está validado para entrar o no. Por suerte, VSFTPD utiliza PAM (Pluggable Authentication Module) por defecto para esta tarea, lo que hace que sea muy fácil modificarlo para que se comporte como queremos.

En primer lugar, abrimos con nuestro editor favorito el archivo /etc/pam.d/vsftpd:

vim /etc/pam.d/vsftpd

Y añadimos la siguiente línea al final del archivo:

auth    required        pam_succeed_if.so       quiet   user    ingroup ftp-user

Guardamos el archivo y ¡ya lo tenemos!

Prueba que todo funcione

Si has llegado hasta aquí deberías tener un servidor FTP funcionando que solo te permita el acceso para los usuarios del grupo ftp-user. Ahora solo tienes que probar a conectarte a tu servidor con algún usuario que pertenezca al grupo ftp-user y otro que no para probar que todo vaya bien.

En la siguiente parte de la guía veremos como configurarlo para que funcione sobre SSL y así tener mayor seguridad en la conexión.

Un saludo a todos!

Problemas comunes

No te olvides de acceder con un usuario del grupo ftp-user

Hemos configurado el servidor FTP para que solo permita el acceso a usuarios del grupo ftp-user. Por lo tanto, si el usuario con el que quieres acceder se llama perico_el_de_los_palotes, tendrás que ejecutar el siguiente comando para añadirlo al grupo ftp-user:

sudo groupmod -G ftp-user perico_el_del_los_palotes

Error: vsftpd: refusing to run with writable root inside chroot()

Este problema es debido a que, como medida de seguridad extra, el comando chroot (el que limita el acceso de los usuarios a lo que hay dentro de su directorio home) no permite ejecutarse a un directorio con permisos de escritura.

Esto se puede solucionar creando un directorio con permisos de escritura dentro del home del usuario y luego, quitando los permisos de escritura del directorio home. Suponiendo que nuestro usuario siga siendo perico_el_de_los_palotes  sería algo así:
sudo -u perico_el_de_los_palotes mkdir /home/perico_el_de_los_palotes/files;
sudo chmod a-w /home/perico_el_de_los_palotes