Carlos Reig Matut

Freelance web Developer

Category: Servidores

Configurar VSFTPD con SSL (2/2)

Despué de seguir la primera parte de la guía sobre como configurar un servidor VSFTPD sobre SSL tenemos un servidor configurado para que cualquier usuario del grupo ftp-user pueda subir archivos a su directorio home.

Sin embargo, todavía no hemos configurado nada para que esta conexión funcione sobre SSL. En esta segunda parte de la guía vamos a ver los pasos necesarios para que el servidor solo acepte conexiones que vayan sobre SSL.

Creamos un certificado

Lo primero que tenemos que hacer para que el servicio de FTP funcione sobre SSL es crear el certificado que usaremos. En esta guía vamos a crear un certificado que tenga validez de 365 días y de tipo autofirmado. Si quieres saber más sobre certificado, puedes visitar la página de la Wikipedia donde está muy bien explicado.

Para crear el certificado ejecutamos el siguiente comando:

[sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem]

Después de este comando tendremos el nuevo certificado creado en /etc/ssl/private/vsftpd.pem.

Configurando VSFTPD para usar funcionar sobre SSL

Ya tenemos el certificado creado. Ahora lo que vamos a hacer es añadir a la configuración de VSFTPD las opciones necesarias para que las conexiones se hagan sobre SSL. Para ello tenemos que editar el archivo /etc/vsftpd.conf con nuestro editor favorito.

sudo vim /etc/vsftpd.conf

En el archivo tenemos que localizar la línea:

rsa_cert_file=/etc/ssl/private/vsftpd.pem

Esta línea no hay que modificarla, solo localizarla y añadir las siguientes líneas debajo de ella:

rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Guardamos el archivo y reiniciamos el servicio:

sudo /etc/init.d/vsftpd restart

¡Pues ya está! Ya tenemos nuestro servidor de FTP configurado.

¡Espero que te sea útil el post! No dudes en comentar si encuentras algún problema.

Un saludo,
Carlos

Configurar VSFTPD con SSL (1/2)

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

© 2017 Carlos Reig Matut

Theme by Anders NorenUp ↑