Cómo instalar y configurar un servidor FTP en Ubuntu con vsftpd paso a paso

目次

1. Introducción

Configurar un servidor FTP en Ubuntu es un método muy práctico para desarrolladores y administradores que desean transferir archivos de manera eficiente. En particular, cuando se trata de crear un servidor casero o un entorno simple de intercambio de archivos en una red interna, el FTP (File Transfer Protocol) sigue siendo una opción sencilla y fácil de implementar.

¿Qué es un servidor FTP?

Un servidor FTP es un software especializado que permite enviar y recibir archivos a través de Internet o una red local. Los usuarios pueden conectarse al servidor mediante un cliente FTP para cargar o descargar archivos.

Si bien existen alternativas seguras como SFTP o SCP, el FTP todavía se utiliza ampliamente por su simplicidad y ligereza. Especialmente en redes limitadas o para usos básicos, sigue siendo un protocolo con gran utilidad.

El papel de un servidor FTP en Ubuntu

Ubuntu es una de las distribuciones Linux más populares y también se emplea ampliamente como sistema de servidores. Al implementar un servidor FTP en un entorno Ubuntu, se facilita el intercambio de archivos entre múltiples dispositivos y usuarios.

Por ejemplo, resulta útil en los siguientes casos:

  • Transferencia de archivos hacia un servidor web
  • Integración con dispositivos IoT como Raspberry Pi
  • Compartición de documentos internos en una organización

De esta forma, la combinación de Ubuntu con un servidor FTP permite una gestión de archivos flexible y eficiente.

Objetivo y público de este artículo

Este artículo explica, paso a paso y de manera sencilla, cómo instalar y configurar un servidor FTP en Ubuntu. Está dirigido especialmente a:

  • Usuarios familiarizados con las operaciones básicas de Ubuntu pero que nunca han usado FTP
  • Quienes desean implementar un servidor FTP para uso local o empresarial básico
  • Personas interesadas en conocer consideraciones de seguridad y cómo evitar problemas como la corrupción de nombres de archivos en japonés

Siguiendo los pasos descritos, podrás construir un entorno FTP seguro y funcional. En la siguiente sección comenzaremos con la instalación de vsftpd, uno de los servidores FTP más populares.

2. Instalación de vsftpd

En Ubuntu, el software más utilizado para implementar servidores FTP es vsftpd (Very Secure FTP Daemon). Tal como su nombre indica, se trata de un servidor FTP diseñado con un enfoque en la seguridad, ligero y estable, por lo cual es adoptado ampliamente en entornos empresariales y educativos.

En esta sección veremos cómo instalar vsftpd en Ubuntu, iniciarlo y configurarlo para que se ejecute automáticamente.

Instalar vsftpd

Primero, utiliza el sistema de gestión de paquetes APT de Ubuntu para instalar vsftpd. Ejecuta los siguientes comandos:

sudo apt update
sudo apt install vsftpd
  • sudo apt update: actualiza la información de los paquetes.
  • sudo apt install vsftpd: instala el paquete vsftpd.

Una vez finalizada la instalación, vsftpd se iniciará automáticamente.

Verificar el estado del servicio

Para confirmar que vsftpd está correctamente instalado y en funcionamiento, utiliza este comando:

sudo systemctl status vsftpd

Si aparece “active (running)”, significa que el servidor FTP está funcionando correctamente.

Configurar el inicio automático

Normalmente vsftpd se habilita automáticamente tras la instalación, pero es recomendable verificarlo:

sudo systemctl enable vsftpd

Con esto, el servicio se iniciará automáticamente en cada arranque del sistema.

No olvides configurar el firewall (UFW)

Si tienes habilitado UFW (Uncomplicated Firewall) en Ubuntu, deberás abrir los puertos del FTP.

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

Esto permite acceso a los puertos estándar del FTP: 20 (datos) y 21 (comandos).

Luego, recarga UFW para aplicar los cambios:

sudo ufw reload

3. Configuración básica

Una vez instalado vsftpd, el siguiente paso es editar el archivo de configuración para adaptar el comportamiento del servidor FTP a tus necesidades. Aunque el archivo de configuración de vsftpd permite un control muy detallado, en su estado inicial tiene muchas restricciones, por lo que es necesario habilitar explícitamente las funciones requeridas.

En esta sección veremos los parámetros de configuración más comunes.

Ubicación del archivo de configuración

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

/etc/vsftpd.conf

Para modificarlo, edítalo con el siguiente comando:

sudo nano /etc/vsftpd.conf

Después de realizar cambios, reinicia vsftpd para aplicarlos:

sudo systemctl restart vsftpd

Permitir escritura (subidas y ediciones)

Por defecto, vsftpd no permite subir ni editar archivos en el servidor FTP. Para habilitarlo, activa la siguiente línea:

write_enable=YES

Con esto, los usuarios podrán subir, borrar o modificar archivos dentro de su directorio personal.

Permitir inicio de sesión de usuarios locales

Para que los usuarios del sistema Ubuntu puedan iniciar sesión en el servidor FTP, es necesario habilitar lo siguiente:

local_enable=YES

Con esta configuración, los usuarios registrados en /etc/passwd podrán conectarse vía FTP.

Permitir la obtención de listas de directorios

Si el cliente FTP no puede mostrar archivos o directorios, revisa la siguiente configuración:

listen=YES
listen_ipv6=NO

En entornos sin IPv6, mantener listen_ipv6=YES puede causar problemas de conexión.

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

Es posible definir un mensaje que se muestre al conectarse al servidor FTP:

ftpd_banner=Welcome to your custom Ubuntu FTP server!

Esto puede ser útil en entornos corporativos para mostrar información de contacto o advertencias.

Permitir transferencia en modo ASCII (cuando sea necesario)

Si necesitas transferir archivos de texto específicos (por ejemplo, scripts con saltos de línea de Windows), habilita lo siguiente:

ascii_upload_enable=YES
ascii_download_enable=YES

Normalmente, la transferencia binaria es suficiente, pero en algunos casos conviene activar esta opción.

En resumen, la configuración básica de vsftpd se centra en definir qué acciones están permitidas. Tras modificar el archivo, recuerda reiniciar el servicio para aplicar los cambios.

En la siguiente sección, veremos configuraciones de seguridad avanzadas, especialmente importantes al usar FTP en redes públicas.

4. Refuerzo de la seguridad

Aunque FTP es un protocolo práctico, tiene la desventaja de que las comunicaciones no se cifran. Por eso, si planeas usarlo a través de Internet, es indispensable aplicar medidas de seguridad.

En esta sección se presentan configuraciones clave de seguridad para vsftpd.

Restringir el acceso con chroot

Es muy peligroso permitir que los usuarios accedan a directorios fuera de su carpeta personal. Para evitarlo, se debe aplicar la configuración de chroot, que los confina a su directorio de inicio.

chroot_local_user=YES
allow_writeable_chroot=YES
  • chroot_local_user=YES: impide que los usuarios locales salgan de su directorio personal.
  • allow_writeable_chroot=YES: necesario si el directorio personal tiene permisos de escritura.

De lo contrario, aparecerá el error: 500 OOPS: vsftpd: refusing to run with writable root inside chroot.

Restringir qué usuarios pueden acceder

Si todos los usuarios locales pudieran iniciar sesión vía FTP, habría riesgo de filtración de información. Por ello, conviene implementar un sistema de lista blanca.

Agrega estas líneas a vsftpd.conf:

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

Después, añade en /etc/vsftpd.userlist los usuarios autorizados:

ftpuser1
ftpuser2

Con esto, solo los usuarios listados podrán iniciar sesión.

Habilitar FTPS (cifrado con SSL/TLS)

Como el FTP envía datos en texto plano, es vulnerable a ataques de espionaje. Para evitarlo, se debe habilitar FTPS (FTP sobre SSL/TLS).

Primero, genera 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

Luego, configura lo siguiente en 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

De esta forma, los clientes podrán conectarse mediante FTPS explícito.

Deshabilitar funciones innecesarias

Otra medida de seguridad es desactivar lo que no se utiliza. Por ejemplo:

anonymous_enable=NO

Esto bloquea el acceso anónimo (aunque suele estar deshabilitado por defecto, es recomendable definirlo explícitamente).

Con estas medidas, tu servidor FTP en Ubuntu con vsftpd estará protegido con configuraciones básicas de seguridad.
Para entornos en Internet, FTPS es obligatorio.

En la siguiente sección abordaremos cómo manejar los nombres de archivos en japonés y evitar la corrupción de caracteres.

5. Compatibilidad con nombres de archivos en japonés

Al transferir archivos mediante FTP, puede surgir el problema de que los nombres de archivos en japonés aparezcan corruptos. Esto ocurre especialmente en transferencias entre Windows y Ubuntu, debido a diferencias en la codificación de caracteres, lo que produce resultados como “???” o cadenas ilegibles.

En esta sección explicaremos cómo evitar este problema al usar vsftpd.

Causas principales de la corrupción de caracteres

Los errores en los nombres de archivos en japonés suelen deberse a tres factores:

  1. La configuración de locale en Ubuntu no está en UTF-8
  2. El cliente FTP no tiene configurada la codificación adecuada
  3. vsftpd no está trabajando correctamente con UTF-8

Es importante revisar y ajustar cada uno de estos puntos.

Comprobar y configurar el locale de Ubuntu

Primero, confirma que el servidor Ubuntu está usando UTF-8. Ejecuta:

locale

Ejemplo de salida:

LANG=ja_JP.UTF-8

Si LANG o LC_ALL no están en UTF-8, cámbialos así:

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

Además, genera el locale si es necesario:

sudo locale-gen ja_JP.UTF-8

Esto garantiza que los nombres de archivo en el servidor se gestionen en UTF-8.

Confirmar la configuración UTF-8 de vsftpd

vsftpd soporta UTF-8 por defecto, pero conviene asegurarse de que la siguiente línea esté activa:

utf8_filesystem=YES

Si tu versión de vsftpd no reconoce este parámetro, no es un problema, siempre y cuando el sistema ya funcione en UTF-8.

Configuración del cliente FTP (ejemplo con FileZilla)

El cliente FTP también debe configurarse en UTF-8. En FileZilla, sigue estos pasos:

  1. Abre el Administrador de Sitios
  2. Selecciona la conexión del servidor
  3. Accede a la pestaña “Juego de caracteres”
  4. Marca “Usar conjunto de caracteres personalizado” e introduce UTF-8

De este modo, el cliente interpretará correctamente los nombres de archivo y evitarás la corrupción de caracteres.

Nota: cuidado al subir archivos desde otros sistemas operativos

Si subes archivos creados en Windows u otros sistemas que usen Shift_JIS u otra codificación, el nombre puede corromperse durante la subida. En ese caso, lo mejor es convertir el nombre a UTF-8 antes de transferirlo. Herramientas como convmv pueden ayudarte a hacerlo desde la terminal.

Resumen

Para manejar correctamente nombres de archivos japoneses en FTP, es esencial que servidor y cliente usen la misma codificación. Si Ubuntu está en UTF-8 y el cliente FTP también, la mayoría de los problemas desaparecerán.

En la próxima sección veremos cómo configurar el modo pasivo y los ajustes de firewall, esenciales para entornos con routers o en la nube.

6. Configuración del modo pasivo y del firewall

Al usar un servidor FTP a través de Internet o detrás de un router (NAT), suelen aparecer problemas como: “conexión establecida pero sin lista de archivos” o “fallo en la transferencia de datos”.
Estos problemas se deben a una configuración incorrecta del modo de operación FTP (activo/pasivo) y del firewall.

En esta sección veremos cómo activar el modo pasivo en vsftpd y abrir los puertos necesarios.

¿Qué es el modo pasivo?

FTP admite dos modos de conexión:

  • Modo activo: el servidor inicia la conexión hacia el cliente.
  • Modo pasivo: el cliente establece toda la conexión (más seguro detrás de NAT o firewalls).

En la mayoría de redes modernas se recomienda el modo pasivo. En vsftpd, debe configurarse explícitamente.

Habilitar el modo pasivo en vsftpd

Edita /etc/vsftpd.conf y añade:

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000

Esto define el rango de puertos (40000–50000 en este ejemplo) para conexiones pasivas. Lo ideal es reservar entre 20 y 30 puertos.

Definir la IP externa (entornos NAT)

Si el servidor está detrás de un router o NAT, debes especificar la IP pública:

pasv_address=203.0.113.45

(Sustituye el valor por tu dirección real de IP pública).

Configurar el firewall (UFW)

Abre los puertos necesarios en el firewall de Ubuntu:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
  • 20/tcp: canal de datos (modo activo)
  • 21/tcp: canal de comandos (inicio de sesión y órdenes)
  • 40000:50000/tcp: rango de puertos para modo pasivo

Recarga UFW para aplicar:

sudo ufw reload

Consideraciones en la nube (AWS, GCP, Azure, etc.)

Si el servidor corre en la nube, además de UFW debes abrir los mismos puertos en las reglas de seguridad de tu proveedor.

Ejemplo en AWS: habilita TCP 21 y 40000–50000 en el Security Group.

Resumen

Para un FTP estable necesitas configurar el modo pasivo en vsftpd y abrir los puertos en tu firewall y red. La mayoría de errores de conexión se deben a estas configuraciones.

En la próxima sección aprenderás a gestionar usuarios individuales y sus permisos de acceso.

7. Configuración por usuario

En un entorno real, muchas veces es necesario asignar diferentes permisos o directorios a cada usuario. Por ejemplo, que cada departamento o persona tenga su propia carpeta y que no pueda acceder a la de otros.

En esta sección veremos cómo gestionar configuraciones individuales en vsftpd.

Crear usuarios FTP dedicados

Primero, crea una cuenta exclusiva para FTP, con su propio directorio de inicio:

sudo adduser ftpuser1

Esto generará /home/ftpuser1. Si deseas que sea solo para FTP y sin acceso shell, usa:

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

Configurar permisos del directorio de inicio

Por seguridad, vsftpd no permite que el directorio raíz de un usuario tenga permisos de escritura. La estructura recomendada es:

/home/ftpuser1/
├── files/  ← directorio con permisos de escritura

Ajusta permisos así:

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

De este modo, /home/ftpuser1 no tendrá escritura, pero la carpeta files/ sí permitirá subidas.

Restringir al usuario con chroot

Activa estas líneas en vsftpd.conf:

chroot_local_user=YES
allow_writeable_chroot=YES

Así, cada usuario quedará limitado a su directorio y no podrá acceder al de otros.

Archivos de configuración por usuario (control detallado)

vsftpd permite aplicar configuraciones específicas por usuario. Para ello:

user_config_dir=/etc/vsftpd_user_conf

Crea el directorio y un archivo por usuario:

sudo mkdir /etc/vsftpd_user_conf
sudo nano /etc/vsftpd_user_conf/ftpuser1

Ejemplo de configuración:

local_root=/home/ftpuser1/files
write_enable=YES

Esto limitará al usuario ftpuser1 a /home/ftpuser1/files con permisos de escritura.

Atención al usar SFTP en paralelo

Si planeas usar SFTP (basado en OpenSSH) junto a vsftpd, recuerda que los requisitos de usuario y grupos son distintos. Es mejor separar la administración.

Resumen

vsftpd permite controlar directorios y permisos por usuario de forma flexible. Una buena gestión de usuarios garantiza seguridad y comodidad.

En la siguiente sección veremos cómo comprobar que el servidor FTP funciona correctamente.

8. Verificación de funcionamiento

Ya instalamos, configuramos y gestionamos usuarios en vsftpd. El paso final es verificar que todo funcione. Aquí explicamos cómo probar tanto desde el propio servidor como con un cliente FTP.

Prueba en el servidor (línea de comandos)

Conéctate a localhost con:

ftp localhost

Ingresa el usuario y contraseña creados:

Name (localhost:username): ftpuser1
Password: ********

Ejemplos de comandos básicos:

ls            # listar archivos
cd files      # cambiar directorio
put test.txt  # subir archivo
get test.txt  # descargar archivo

Si todo funciona, el servidor FTP está operativo. Nota: en versiones recientes de Ubuntu, el comando ftp está obsoleto. Puedes instalar lftp o ncftp como alternativa.

Prueba desde un cliente GUI (ejemplo: FileZilla)

Un cliente gráfico como FileZilla facilita la validación de conexiones y directorios complejos.

Pasos en FileZilla:

  1. Abrir el Administrador de Sitios
  2. Crear un nuevo sitio
  3. Configurar así:
ParámetroValor
HostIP o dominio del servidor
ProtocoloFTP – File Transfer Protocol
CifradoFTP sobre TLS explícito (si usas FTPS)
Tipo de inicio de sesiónNormal
Usuarioftpuser1 (u otro creado)
Contraseñala correspondiente
  1. Haz clic en “Conectar”.

Si ves la lista de archivos y directorios, la conexión ha sido exitosa. Prueba subir y bajar archivos para confirmarlo.

Problemas comunes y puntos de revisión

ProblemaQué revisar
No conectaVerifica que los puertos estén abiertos en el firewall
Error 530 (Login incorrect)Comprueba usuario/contraseña y vsftpd.userlist
No muestra lista de archivosConfirma que el modo pasivo esté activo y los puertos abiertos
Nombres corruptosVerifica UTF-8 en servidor y cliente

Revisar registros

Si persisten los errores, revisa los logs de vsftpd:

cat /var/log/vsftpd.log

Y también el registro del sistema:

sudo journalctl -u vsftpd

Con esto podrás identificar quién, cuándo y dónde ha fallado la conexión.

Otros consejos

  • Conexiones inestables: comprueba el firewall o antivirus del cliente.
  • Restricciones extra de seguridad: en Ubuntu, AppArmor puede bloquear conexiones.

Resumen

Los errores de FTP suelen repetirse en patrones comunes. Revisa configuración, usuarios, firewall y logs y podrás resolver la mayoría de problemas.

En la próxima sección hablaremos de la resolución de problemas más frecuentes en la operación de FTP.

9. Solución de problemas

Aun cuando el servidor FTP esté correctamente instalado, durante la operación real pueden surgir errores o fallos. Los más comunes se relacionan con la configuración de red, permisos o restricciones de seguridad, lo que ocasiona fallos de conexión o transferencia.

En esta sección se presentan errores frecuentes y sus soluciones, organizados de forma práctica para principiantes.

Errores comunes y cómo resolverlos

Error: 530 Login incorrect

Causa:

  • Usuario o contraseña incorrectos
  • El usuario no está en /etc/vsftpd.userlist (si se usa lista blanca)

Solución:

  • Verifica credenciales
  • Si usas userlist_deny=NO, asegúrate de añadir el usuario en /etc/vsftpd.userlist

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

Causa: el directorio raíz del usuario tiene permisos de escritura con chroot activo.

Solución:

  • Añade en vsftpd.conf:
allow_writeable_chroot=YES
  • O bien, deshabilita escritura en el directorio raíz y habilítala en una subcarpeta como files/

Error: no se obtiene la lista de archivos (timeout)

Causa:

  • No está habilitado el modo pasivo o los puertos no están abiertos
  • En NAT, falta configurar pasv_address

Solución:

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000

Y abre los puertos en UFW o en el firewall de la nube.

Error: nombres de archivos japoneses corruptos

Causa:

  • El cliente FTP no está en UTF-8
  • El locale del servidor no es UTF-8

Solución:

  • Configura Ubuntu en ja_JP.UTF-8 y genera locales con locale-gen
  • En FileZilla, establece manualmente el juego de caracteres a UTF-8

Error: vsftpd no arranca

Causa:

  • Error de sintaxis en vsftpd.conf
  • Conflicto de puertos

Solución:

  • Revisa errores de sintaxis o parámetros mal escritos
  • Consulta registros: /var/log/vsftpd.log o journalctl -xe

Uso de registros

Los registros ayudan a localizar problemas:

cat /var/log/vsftpd.log

Y a nivel de sistema:

sudo journalctl -u vsftpd

Otros consejos

  • Conexión inestable: revisa firewall o antivirus en el cliente
  • Restricciones de seguridad extra: AppArmor o SELinux pueden estar bloqueando accesos

Resumen

La mayoría de errores de FTP responden a patrones comunes. Verifica siempre: configuración, usuarios, firewall y registros.

En la siguiente sección resumiremos todo el proceso de construcción del servidor FTP.

10. Conclusión

En este artículo explicamos cómo configurar un servidor FTP en Ubuntu usando vsftpd (Very Secure FTP Daemon), paso a paso y de forma accesible incluso para principiantes.

Repaso de los pasos clave

PasoContenido
1. InstalaciónInstalar con apt install vsftpd, iniciar servicio y abrir puertos
2. Configuración básicaPermitir escritura, habilitar usuarios locales, personalizar banner
3. SeguridadAplicar chroot, lista blanca de usuarios, habilitar FTPS
4. Compatibilidad con japonésConfigurar UTF-8 en servidor y cliente
5. Modo pasivo y firewallConfigurar rangos de puertos y abrirlos en UFW o en la nube
6. Gestión de usuariosAsignar directorios y permisos individuales
7. VerificaciónProbar conexiones con terminal y clientes GUI
8. Solución de problemasErrores frecuentes y sus soluciones

Consejos para la operación futura

  • Mantén actualizaciones: aplica sudo apt update && sudo apt upgrade
  • Revisa logs periódicamente: vigila /var/log/vsftpd.log
  • Elimina cuentas innecesarias: borra usuarios tras su uso
  • Considera SFTP: para mayor seguridad, puedes migrar a SFTP (OpenSSH)

Reflexión final

Aunque FTP es una tecnología antigua, su simplicidad lo mantiene vigente. Con Ubuntu y vsftpd puedes crear un servidor de archivos seguro y útil. Si deseas ampliar conocimientos, revisa también alternativas como SFTP, rsync o WebDAV.

FAQ (Preguntas frecuentes)

Q1. ¿Cuál es la diferencia entre FTP y FTPS?

A1.
FTP transmite datos sin cifrado, mientras que FTPS usa SSL/TLS para cifrar credenciales y archivos. Para uso en Internet, FTPS es obligatorio.

Q2. ¿Por qué se corrompen los nombres de archivos en japonés?

A2.
Sucede cuando servidor y cliente no usan la misma codificación. Configura Ubuntu en UTF-8 y ajusta el cliente FTP (ej. FileZilla) también a UTF-8.

Q3. ¿Ubuntu trae un servidor FTP por defecto?

A3.
No. Debes instalarlo manualmente con apt install vsftpd.

Q4. No aparece la lista de archivos y expira la conexión. ¿Por qué?

A4.
Probablemente no configuraste modo pasivo o los puertos correspondientes no están abiertos. Define pasv_enable=YES y abre los puertos en el firewall.

Q5. ¿Dónde están los registros de vsftpd?

A5.
Generalmente en:

/var/log/vsftpd.log

Q6. ¿Cómo deshabilitar temporalmente un usuario FTP?

A6.
Opciones:

  • Quitar al usuario de /etc/vsftpd.userlist (si usas lista blanca)
  • Cambiar su shell a /usr/sbin/nologin
  • Bloquear la contraseña:
sudo passwd -l nombre_usuario

Q7. ¿Cómo detener el servidor FTP?

A7.
Detén el servicio con:

sudo systemctl stop vsftpd

Y si no quieres que arranque automáticamente:

sudo systemctl disable vsftpd

Q8. ¿Hay alternativas más seguras que FTP?

A8.
Sí. Una de las más recomendadas es SFTP (SSH File Transfer Protocol), que cifra todos los datos mediante OpenSSH.

侍エンジニア塾