Vsftpd, instalación y configuración básica de un servidor FTP

noviembre 13, 2020 , 0 Comments

about vsftpd

En el siguiente artículo vamos a echar un vistazo a cómo podemos instalar vsftpd en Ubuntu. Tanto si quieres crear un servidor doméstico, un servidor web, un servidor de juegos o cualquier servidor que se adapte a tu proyecto, un FTP es la forma más sencilla de transferir datos de un sistema a otro. Por eso vamos a ver cómo realizar la instalación y configuración básica de un servidor FTP en Ubuntu.

FTP, o Protocolo de transferencia de archivos, es el sistema que se utiliza para cargar (colocar) o descargar (obtener) archivos de un servidor. Probablemente lo tengas utilizado en algún momento sin darte cuenta, al tomar archivos o cargar imágenes a la web.

Instalar un servidor FTP en Ubuntu

Instalar vsftpd

Para este ejemplo, voy a instalar un servidor FPT en mi red local sobre un Ubuntu 20.04. Si no lo tienes instalado en tu equipo, se puede instalar con el comando (Ctrl+Alt+T):

instalar vsftpd

sudo apt install vsftpd

Una vez instalado, vamos a empezar por hacer una copia del archivo de configuración original. Si algo sale mal, se puede restaurar la configuración predeterminada.

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_default

Ahora vamos a iniciar el servicio con el comando:

sudo systemctl start vsftpd

Confirmamos que se está ejecutando con:

enable vsftpd

sudo systemctl enable vsftpd

Cuenta de usuario FTP

Con esto podremos usar cualquier cliente FTP para acceder a los archivos alojados en el servidor a través de vsftpd. En la terminal (Ctrl+Alt+T) solo tendremos que utilizar el comando:

sudo useradd –m nombre-usuario

Sustituye ‘nombre-usuario‘ por tu nombre de usuario previsto. A continuación vamos a establecer una contraseña:

crear usuario ftp

sudo passwd nombre-usuario

Después nos vamos a mover a la carpeta de usuario recién creada:

cd /home/nombre-usuario

Lo ideal es que el FTP se restrinja a un directorio específico por motivos de seguridad. Vsftpd usa jaulas chroot para lograr esto. Con chroot habilitado, un usuario local está restringido a su directorio de inicio (por defecto). Para este ejemplo, vamos a crear un directorio ftp que actuará como chroot, junto con un directorio de archivos modificables.

Para empezar creamos la carpeta FTP:

sudo mkdir ftp

Estableceremos la propiedad de la carpeta con este otro comando:

propiedad carpeta ftp

sudo chown nobody:nogroup /home/nombre-usuario/ftp

Ahora eliminamos los permisos de escritura de esta carpeta:

sudo chmod a-w /home/nombre-usuario/ftp

Continuamos creando directorio contenedor de archivos y le asignaremos la propiedad:

crear la carpeta files

sudo mkdir /home/nombre-usuario/ftp/files 

sudo chown nombre-usuario:nombre-usuario /home/nombre-usuario/ftp/files

En este punto, vamos a crear un archivo de prueba en la carpeta files:

crear archivo de ejemplo

echo "vsftpd archivo de ejemplo" | sudo tee /home/nombre-usuario/ftp/files/ejemplo.txt

Asegurar el servidor FTP

En esta paso vamos a abrir los puertos 20 y 21 para el tráfico FTP. Los puertos 40000-50000 serán los reservados para el rango de puertos pasivos que eventualmente se establecerán en el archivo de configuración y el puerto 990 se usará cuando se habilite el TLS. Ejecuta lo siguiente para hacerlo:

sudo ufw allow 20/tcp; sudo ufw allow 21/tcp; sudo ufw allow 990/tcp; sudo ufw allow 40000:50000/tcp

Si utilizas un firewall diferente, consulta su documentación para abrir los puertos.

Configurar vsftpd

Como nos interesa que los usuarios puedan cargar archivos, vamos a editar el archivo de configuración de vsftpd:

sudo vim /etc/vsftpd.conf

Dentro del archivo vamos a buscar las siguientes entradas y descomentarlas:

anonymous write local a descomentar

anonymous_enable=NO

write_enable=YES

local_enable=YES

Chroot_local_user tampoco se comentará, con ello nos garantizamos que el usuario conectado solo acceda a los archivos dentro del directorio permitido:

chroot local users a descomentar

chroot_local_user=YES

También vamos a añadir manualmente algunos valores nuevos al final del archivo. Esto permitirá que la configuración funcione con el usuario actual y con cualquier otro usuario que se agregue posteriormente:

usr local USER

user_sub_token=$USER
local_root=/home/$USER/ftp

Reinicia el daemon para cargar los cambios:

sudo systemctl restart vsftpd

Conexiones cifradas

Vamos a utilizar TTL/SSL para garantizar la seguridad. Debemos crear el certificado SSL y usarlo para proteger el servidor FTP. Esto lo haremos con el comando:

generar certificado SSL

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

El flag -days hace que el certificado sea válido por un año y hemos incluido una clave privada RSA de 2048 bits en el mismo comando. Cuando termines de crear el certificado, abre otra vez el archivo de configuración:

sudo vim /etc/vsftpd.conf

El final del archivo debemos encontrar dos líneas que comiencen con «rsa«. Comenta ambas líneas y escribe las siguientes:

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

líneas rsa

Ahora habilitaremos SSL para que solo los clientes que tengan SSL habilitados puedan conectarse. Cambia el valor de ssl_enable a YES:

ssl_enable=YES

Para no permitir conexiones anónimas a través de SSL, añade las líneas:

configuración seguridad

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

Configura el servidor para usar TLS, añadiendo:

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

También conseguiremos que no será necesario reutilizar SSL, porque puede ocasionar que muchos clientes de FTP no funcionen. Además utilizaremos suites de encriptación de alto cifrado, añadiendo las líneas:

require_ssl_reuse=NO
ssl_ciphers=HIGH

Guardamos el archivo y reiniciamos el servicio:

sudo systemctl restart vsftpd

Acceder desde un cliente FTP

Ahora ya podremos conectarnos a nuestro servidor FTP. Para esto podremos utilizar una aplicación desde el entorno gráfico o el comando de terminal ftp. Si optas por el entorno gráfico, necesitarás un cliente FTP como FileZilla. Para instalarlo puedes recurrir al artículo que un compañero escribió en este blog hace un tiempo.

Una vez instalado e iniciado Filezilla, haz clic en Archivo / Gestor de sitios. Lo siguiente será hacer clic en “Nuevo sitio”.

conexión de filezilla a vsftpd

En el panel de la derecha, selecciona como protocolo FTP. Si está utilizando FTPS, selecciona TLS para cifrado. A continuación, escribe el nombre de host o la dirección IP en Servidor y añade el puerto (21). Para el modo de acceso selecciona Normal, y escribe las credenciales de tu cuenta en Usuario y Contraseña. Haz clic en Conectar.

Tendremos que aceptemos el certificado que creamos anteriormente.

aceptar certificado SSL

Llegados a este punto veremos el archivo de ejemplo que creamos dentro de la carpeta files. Ya podemos comenzar a usar nuestro servidor FTP. Simplemente arrastra y suelta los archivos que quieras mover.

filezilla archivo ejemplo

Usando un FTP, podremos capturar los datos siempre que los necesitemos. Se puede saber más sobre vsftpd y su configuración desde la página de documentación de Ubuntu.


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.