Cómo crear un servidor FTP seguro en Ubuntu con vsftpd (Guía de principiante a avanzado)

.

目次

1. Introducción

Crear un servidor FTP en Ubuntu es una solución muy práctica para desarrolladores y administradores que desean transferir archivos de forma eficiente. Especialmente al montar un servidor doméstico o un entorno sencillo de intercambio de archivos interno, FTP (File Transfer Protocol) sigue siendo una opción fácil de desplegar y directa.

¿Qué es un servidor FTP?

Un servidor FTP es un software de servidor dedicado que se utiliza para transferir archivos a través de Internet o de una red local. Los usuarios se conectan al servidor mediante una aplicación cliente FTP para subir o descargar archivos.

Aunque alternativas seguras como SFTP y SCP se han vuelto más comunes, FTP sigue muy extendido debido a su simplicidad y ligereza. En redes restringidas o para casos de uso básicos, FTP continúa siendo un protocolo práctico y eficaz.

El papel de un servidor FTP en Ubuntu

Ubuntu es una de las distribuciones Linux más populares y se usa ampliamente en entornos de servidor. Al configurar un servidor FTP en Ubuntu, el intercambio de archivos entre múltiples dispositivos y usuarios se vuelve mucho más sencillo.

Casos de uso típicos incluyen:

  • Transferir archivos a un servidor web
  • Integrarse con dispositivos IoT como Raspberry Pi
  • Compartir documentos internos de la empresa

La combinación de Ubuntu y un servidor FTP permite una gestión de archivos flexible y eficiente.

Propósito de este artículo y público objetivo

Este artículo explica cómo crear un servidor FTP en Ubuntu paso a paso, de forma que sea fácil de entender incluso para principiantes. Está dirigido a lectores que:

  • Conocen las operaciones básicas de Ubuntu pero son nuevos en FTP
  • Quieren montar un servidor FTP para uso local o empresarial ligero
  • Desean comprender consideraciones de seguridad y temas como la codificación de nombres de archivo

Siguiendo los pasos de esta guía, podrás construir un entorno de servidor FTP seguro y práctico. En la siguiente sección comenzaremos con la instalación de uno de los servidores FTP más populares: vsftpd.

2. Instalación de vsftpd

Al crear un servidor FTP en Ubuntu, el software más usado es vsftpd (Very Secure FTP Daemon). Como su nombre indica, está diseñado con la seguridad en mente y es ligero y estable, lo que lo hace muy adoptado en entornos corporativos y educativos.

Esta sección explica cómo instalar vsftpd en Ubuntu y configurar el servicio para que se inicie automáticamente.

Instalación de vsftpd

Primero, instala vsftpd usando el sistema de gestión de paquetes de Ubuntu (APT). Ejecuta los siguientes comandos en orden:

sudo apt update
sudo apt install vsftpd
  • sudo apt update : Actualiza la lista de paquetes
  • sudo apt install vsftpd : Instala el paquete vsftpd

Una vez completada la instalación, el servicio vsftpd se inicia automáticamente.

Verificación del estado del servicio

Para comprobar que vsftpd está instalado y funcionando correctamente, usa el siguiente comando:

sudo systemctl status vsftpd

Si ves active (running), el servidor FTP está operando con normalidad.

Habilitar el inicio automático

vsftpd suele estar configurado para iniciarse automáticamente por defecto, pero es buena práctica confirmarlo:

sudo systemctl enable vsftpd

Esto garantiza que vsftpd arranque automáticamente después de reiniciar el sistema.

No olvidar la configuración del firewall (UFW)

Si UFW (Uncomplicated Firewall) está habilitado en Ubuntu, debes permitir los puertos FTP:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp

Esto abre los puertos estándar de FTP: 20 (datos) y 21 (comandos).

Después de modificar las reglas del firewall, recarga UFW:

sudo ufw reload

3. Configuración básica

Tras instalar vsftpd, el siguiente paso es personalizar su comportamiento editando el archivo de configuración. Aunque vsftpd ofrece un control muy granular, muchas funciones están desactivadas por defecto, por lo que debes habilitar explícitamente las que necesites.

Esta sección explica las opciones de configuración más comunes y esenciales.

Ubicación del archivo de configuración

.

El archivo de configuración principal de vsftpd se encuentra en:

/etc/vsftpd.conf

Edite el archivo con el siguiente comando:

sudo nano /etc/vsftpd.conf

Después de realizar cambios, reinicie vsftpd para que tengan efecto:

sudo systemctl restart vsftpd

Permitir operaciones de escritura (cargas, eliminaciones, modificaciones)

Por defecto, vsftpd no permite subir ni modificar archivos. Para habilitar el acceso de escritura, descomente o añada la siguiente línea:

write_enable=YES

Esto permite a los usuarios subir, eliminar y modificar archivos dentro de sus directorios personales.

Habilitar el inicio de sesión de usuarios locales

Para permitir que los usuarios del sistema Ubuntu inicien sesión mediante FTP, active la siguiente opción:

local_enable=YES

Con esto, los usuarios listados en /etc/passwd podrán iniciar sesión usando FTP.

Habilitar el listado de directorios

Si los listados de directorios fallan en los clientes FTP, verifique la siguiente configuración:

listen=YES
listen_ipv6=NO

Si IPv6 está deshabilitado en su sistema pero listen_ipv6=YES sigue activo, pueden producirse problemas de conexión.

Establecer un banner de inicio de sesión (opcional)

Puede mostrar un mensaje personalizado cuando los usuarios se conecten al servidor FTP:

ftpd_banner=Welcome to your custom Ubuntu FTP server!

Esto es útil para mostrar avisos operativos o información de contacto.

Habilitar transferencias en modo ASCII (si es necesario)

Si necesita transferir correctamente archivos de texto con diferentes formatos de fin de línea, habilite el modo ASCII:

ascii_upload_enable=YES
ascii_download_enable=YES

El modo binario es suficiente en la mayoría de los casos, pero el modo ASCII puede ser útil en entornos específicos.

vsftpd requiere permiso explícito para cada capacidad, lo que hace que la configuración sea transparente y segura. Siempre reinicie el servicio después de modificar el archivo de configuración.

4. Mejora de la seguridad

Aunque FTP es cómodo, no cifra el tráfico por defecto, lo que genera problemas de seguridad, sobre todo cuando se usa a través de Internet. Una configuración de seguridad adecuada es esencial.

Esta sección presenta las principales medidas de seguridad disponibles en vsftpd.

Restringir el acceso del usuario con chroot

Permitir que los usuarios FTP accedan a directorios fuera de su directorio personal es peligroso. Use chroot para confinar a los usuarios a sus directorios personales.

chroot_local_user=YES
allow_writeable_chroot=YES
  • chroot_local_user=YES impide que los usuarios accedan a directorios superiores a su directorio personal.
  • allow_writeable_chroot=YES es necesario cuando el directorio personal tiene permisos de escritura.

Sin esta configuración, se produce el siguiente error:

500 OOPS: vsftpd: refusing to run with writable root inside chroot

Restringir usuarios de inicio de sesión (lista blanca)

Permitir que todos los usuarios del sistema inicien sesión mediante FTP aumenta el riesgo de seguridad. En su lugar, limite el acceso mediante una lista blanca.

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Añada los usuarios permitidos a la lista:

sudo nano /etc/vsftpd.userlist
ftpuser1
ftpuser2

Solo los usuarios listados explícitamente podrán iniciar sesión.

Habilitar comunicación cifrada con FTPS (SSL/TLS)

El FTP estándar transmite credenciales y datos en texto plano. Para evitar la intercepción, habilite FTPS (FTP sobre SSL/TLS).

Cree un certificado SSL:

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

Agregue lo siguiente a vsftpd.conf:

ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

Los clientes ahora pueden conectarse usando FTPS explícito.

Desactivar funciones innecesarias

Desactive las funciones que no use para reducir la superficie de ataque:

anonymous_enable=NO

Esto desactiva explícitamente el inicio de sesión anónimo.

5. Soporte de nombres de archivo japoneses

Al transferir archivos mediante FTP, los nombres de archivo en japonés pueden aparecer corruptos debido a incompatibilidades de codificación, especialmente entre Windows y Ubuntu.

.### Causas comunes de problemas de codificación de nombres de archivo

  1. La localización de Ubuntu no está configurada a UTF-8
  2. La codificación del cliente FTP no coincide
  3. vsftpd no está operando en modo UTF-8

Verificar y configurar la localización de Ubuntu

locale
LANG=ja_JP.UTF-8

Si UTF-8 no está habilitado:

sudo update-locale LANG=ja_JP.UTF-8
source /etc/default/locale
sudo locale-gen ja_JP.UTF-8

Verificar el soporte UTF-8 de vsftpd

utf8_filesystem=YES

Esta opción puede no existir en todas las versiones, pero las locales del sistema UTF-8 suelen ser suficientes.

Configuración del cliente FTP (ejemplo con FileZilla)

  1. Abrir el Administrador de sitios
  2. Seleccionar el servidor
  3. Abrir la pestaña Codificación
  4. Habilitar la codificación personalizada y establecerla en UTF-8

6. Modo pasivo y configuración del firewall

Los problemas de FTP, como listados de directorios fallidos o transferencias detenidas, a menudo son causados por una configuración incorrecta del modo pasivo o del firewall.

¿Qué es el modo pasivo?

  • Modo activo: el servidor inicia la conexión de datos
  • Modo pasivo: el cliente inicia todas las conexiones

Se recomienda encarecidamente el modo pasivo para redes modernas.

Habilitar el modo pasivo en vsftpd

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000

Especificar la dirección IP externa (entornos NAT)

pasv_address=203.0.113.45

Abrir los puertos requeridos en UFW

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw reload

7. Configuración por usuario

En entornos de producción, es común asignar diferentes permisos y directorios por usuario.

Crear usuarios FTP dedicados

sudo adduser ftpuser1
sudo useradd -m -s /usr/sbin/nologin ftpuser2

Estructura de directorios recomendada

/home/ftpuser1/
└── files/
sudo mkdir /home/ftpuser1/files
sudo chown ftpuser1:ftpuser1 /home/ftpuser1/files
sudo chmod 755 /home/ftpuser1

Archivos de configuración específicos por usuario

user_config_dir=/etc/vsftpd_user_conf
sudo mkdir /etc/vsftpd_user_conf
sudo nano /etc/vsftpd_user_conf/ftpuser1
local_root=/home/ftpuser1/files
write_enable=YES

8. Verificación del funcionamiento

Después de completar todos los pasos de configuración, verifique que el servidor FTP funcione correctamente.

Prueba desde la línea de comandos

ftp localhost
ls
cd files
put test.txt
get test.txt

Prueba con cliente GUI (FileZilla)

Verifique la conexión, el listado de directorios, las subidas y descargas.

9. Solución de problemas

Los problemas comunes de FTP y sus soluciones incluyen fallos de inicio de sesión, errores de permisos, configuración incorrecta del modo pasivo y problemas de codificación.

10. Conclusión

Este artículo explicó cómo crear un servidor FTP seguro y práctico en Ubuntu usando vsftpd, cubriendo instalación, configuración, seguridad, codificación, modo pasivo, gestión de usuarios, verificación y solución de problemas.

Preguntas frecuentes

Preguntas frecuentes sobre la configuración y operación de un servidor FTP en Ubuntu.