Cómo instalar FTP en Debian 9 Stretch

En este artículo vamos a ver cómo instalar FTP en Debian 9 paso a paso, para tener un servicio de transferencia de ficheros en una red local doméstica, de oficina o incluso a través de Internet. El servicio que vamos a instalar es vsFTPd para Debian. Sigue los pocos pasos de los que consta el tutorial y en unos minutos tendrás tu propio servidor FTP en tu sistema o VPS Debian.

Para seguir este tutorial es recomendable una instalación actualizada de Debian 9, conexión a Internet y poder acceder por consola con un usuario con privilegios de sudo o root.

Cómo instalar FTP en Debian 9 Stretch

En la actualidad existen múltiples opciones de servicios FTP que se pueden instalar sobre multitud de sistemas, pero en esta ocasión nos decantamos por uno de ellos que ofrece a la vez seguridad y sencillez de configuración.

Cómo instalar el servidor FTP vsFTPd en Debian 9

Vamos a instalar vsFTPd en Debian 9 a través de los repositorios del sistema, usando la herramienta apt.

En primer lugar actualizamos la información de los repositorios del sistema:

~$ sudo apt update

Opcionalmente puedes actualizar los paquetes ya instalados:

~$ sudo apt -y upgrade

Con el sistema actualizado ya podemos instalar el paquete vsftpd:

~$ sudo apt -y install vsftpd

Se descargará e instalará el paquete rápidamente, ya que no tiene dependencias. El servidor FTP (servicio vsftpd) queda activado para arrancar con cada inicio del sistema, y también funcionando ya, listo para recibir conexiones.

Podemos comprobar el estado del servicio vsftpd en cualquier momento con el comando systemctl status vsftpd:

como instalar ftp en debian 9 stretch

Configurar el firewall UFW para FTP en Debian 9

Si tienes configurado el firewall UFW en tu sistema Debian 9 necesitarás añadir una regla para permitir conexiones desde la red. En este caso la regla que necesitamos sería la siguiente:

~$ sudo ufw allow ftp

Además, si quieres permitir el modo pasivo debes determinar un rango de puertos y aplicar también la correspondiente regla. En este ejemplo usaremos el rango de puertos del 20000 al 20050.

~$ sudo ufw allow 20000:20050/tcp

Hasta aquí todo fácil. Pero no sabemos cómo está configurado el servicio por defecto. Enseguida vamos a comprobar cómo se comporta nuestro nuevo servidor FTP vsFTPd.

Cómo instalar un cliente FTP en Debian 9

Si estás trabajando en local y quieres probar el servidor FTP con un cliente, en unos instantes puedes descargar un cliente de consola. Basta con instalar el paquete ftp mediante apt:

~$ sudo apt -y install ftp

Una vez instalado, el comando que usaremos en consola es ftp:

~$ ftp
ftp>

Con help obtendremos ayuda sobre los comandos disponibles. Con quit regresaremos a consola.

Cómo configurar vsFTPd en Debian 9 Stretch

Configurar vsFTPd en Debian 9 es muy sencillo. La configuración principal del servidor vsFTPd se encuentra en el archivo /etc/vsftpd.conf, que podemos revisar con nuestro editor de texto favorito (con permisos de sudo, si queremos hacer cambios).

Cada vez que hagamos cambios en vsftpd.conf será necesario recargar la configuración del servidor VSFTPD para que hagan efecto. Recargaremos la configuración con el comando systemctl:

$ sudo systemctl reload vsftpd

Archivo de registro vsftpd.log

Antes de empezar a realizar cambios de configuración es interesante saber que el archivo de registro o log de vsFTPd se encuentra en /var/log/vsftpd.log. Consúltalo siempre que las cosas no funcionen como debieran.

Modo pasivo

Es muy importante configurar el modo pasivo en el servicio FTP, ya que la mayoría de clientes intentan conectar por defecto en este modo. Editaremos el archivo de configuración vsftpd.conf:

~$ sudo nano /etc/vsftpd.conf

Y añadiremos el siguiente conjunto de directivas al final del archivo:

...
# Configuración del modo pasivo
pasv_enable=YES
pasv_min_port=20000
pasv_max_port=20050

Ten en cuenta que el rango de puertos que desees utilizar para el servicio FTP en Debian 9 debe coincidir tanto en el firewall como en la configuración del servicio vsftpd.

Guardaremos los cambios y recargaremos la configuración del servicio.

Cómo comprobar el funcionamiento de vsFTPd

Para probar el funcionamiento del servicio FTP, abre tu navegador favorito y conecta mediante dirección IP, nombre de máquina o dominio (si tienes alguno configurado) que apunte a la máquina Debian 9. Si abres el navegador en la misma máquina, entonces la dirección puede ser ftp://127.0.0.1 ó ftp://localhost. En mi caso, accedo desde otra máquina:

como instalar y configurar ftp en debian 9 stretch

Al establecer la conexión aparece un diálogo solicitándonos usuario y contraseña. Si alguna vez has accedido a algún servicio FTP público, estarás familiarizado con el funcionamiento de estos servidores. El primer impulso es introducir el usuario anonymous y cualquier otra cosa como contraseña, normalmente una dirección de correo electrónico. Si haces la prueba comprobarás que no es posible el acceso, volviendo a solicitar el navegador unas credenciales de identificación.

Sin embargo, si probamos a acceder con nuestro usuario y contraseña de Debian 9, sí accederemos a nuestro directorio personal.

instalar ftp en debian 9 stretch
Conectando a vsFTPd mediante usuario y contraseña

En este momento ya sabemos dos cosas:

  • La configuración por defecto no permite acceso anónimo.
  • Se permite la conexión a usuarios del sistema.

Pero hay algo que no podemos comprobar con un simple navegador. Accediendo desde un cliente gráfico o de consola descubrimos que nos podemos mover por todo el sistema:

como configurar ftp en debian 9 stretch
El usuario se puede mover libremente por el sistema de archivos

En la imagen anterior vemos que inicialmente accedemos directamente a nuestra carpeta personal, pero mediante los comandos habituales podemos movernos por todo el sistema de archivos (en el ejemplo hemos entrado a /etc/), pudiendo descargar archivos potencialmente sensibles del sistema. No suele ser un comportamiento muy deseable.

Acceso anónimo en vsFTPd

Ya hemos visto que, por defecto, el acceso anónimo al servidor FTP en Debian 9 no está permitido. Pero tal vez te pueda interesar configurarlo por cualquier motivo. Es muy sencillo, basta con editar vsftpd.conf y localizar la directiva anonymous_enable:

...
#
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
...

Como se puede ver, la directiva que se encarga de permitir el acceso anónimo está configurada con un valor de NO. Si queremos permitir el acceso anónimo, deberíamos cambiar este valor a YES. Y puesto que permitimos el acceso anónimo, no tiene sentido solicitar contraseña, así que podemos añadir también la directiva no_anon_password:

...
anonymous_enable=YES
no_anon_password=YES
...

Para que los cambios tengan efecto recargaremos la configuración del sevidor FTP.

Directorio de archivos de acceso anónimo

Si quieres ofrecer archivos a través del servicio FTP debes colocarlos en la carpeta por defecto, que para vsFTPd en Debian 9 es /srv/ftp/. Esa carpeta en principio es propiedad de root, por lo que tendrás que tener permisos para copiar los archivos que quieras poner a disposición de los usuarios anónimos.

Para este ejemplo pondré un archivo de texto vacío:

~$ sudo touch /srv/ftp/bienvenido.txt

Y ya tendremos acceso anónimo sin contraseña y en modo pasivo:

como configurar ftp en debian 9 stretch

No permitir el acceso a usuarios del sistema

Vimos que los usuarios del sistema pueden acceder, inicialmente, a su directorio personal. Esto lo permite la diretiva local_enable del archivo de configuración vsftpd.conf:

...
#
# Uncomment this to allow local users to log in.
local_enable=YES
...

Si directamente deseas denegar el acceso a los usuarios del sistema, basta con cambiar el valor asignado a NO y recargar vsFTPd.

configurar ftp en debian 9 stretch
Acceso denegado a usuarios del sistema

Ahora, al intentar acceder al servicio vsFTPd como usuario de Debian 9 recibimos un mensaje 530 This FTP server is anonymous only, indicándonos que este servidor FTP solamente permite acceso anónimo.

Acceso con permisos de escritura a usuarios locales

Si dejas activado el acceso a usuarios locales, la conexión FTP se realiza solamente en modo lectura. Para poder subir archivos a los directorios personales hay que localizar la directiva write_enable:

...
# Uncomment this to enable any form of FTP write command.
#write_enable=YES
...

Está desactivada por defecto, pero eliminando el carácter # al inicio de línea permitiremos el modo escritura.

Acceso restringido al directorio personal

En el caso de que quieras permitir el acceso a usuarios del sistema, pero que no puedan salir más allá de sus directorios y archivos personales, además de permitir el acceso local debemos configurar la directiva chroot_local_user:

...
#
# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
#chroot_local_user=YES
...

Por defecto viene desactivada mediante comentarios. Si queremos tener acceso «enjaulado» de los usuarios de nuestro sistema, tendremos que eliminar el carácter # al inicio de la línea.

Normalmente los directorios personales de usuario tienen permisos de lectura/escritura para ese usuario, por lo que realizar un chroot o enjaulado no es posible por defecto. Si intentáramos acceder con esta configuración probablemente obtendríamos el mensaje de error 500 OOPS: vsftpd: refusing to run with writable root inside chroot().

Para evitarlo hay que añadir una directiva allow_writeable_chroot que habilite el enjaulado en directorios de usuario escribibles. La configuración quedaría así:

...
local_enable=YES
...
chroot_local_user=YES
allow_writeable_chroot=YES
...

Tras recargar o reniciar vsFTPd nuestros usuarios del sistema pueden acceder a sus carpetas personales, sin poder acceder a otras partes del sistema de archivos:

configurar vsftpd en debian 9 stretch

Esto puede ser relativamente peligroso, ya que se permite modificar o eliminar archivos y carpetas de la raíz del directorio personal, que en muchas ocasiones son importantes si el usuario además de acceso a FTP tiene cuenta de shell o línea de comandos.

Puedes prescindir de la directiva allow_writeable_chroot si la carpeta personal, tipo /home/usuario/, no tiene permisos de escritura, pero sí su contenido. Esto quiere decir que el usuario no podrá modificar archivos en la raíz de su carpeta personal, pero sí dentro de otras subcarpetas. Este es la típica configuración de un servicio de hosting, donde sólo se puede escribir dentro de la subcarpeta destinada a los archivos web.

Seguridad SSL con vsFTPd en Debian

Podemos configurar nuestro servidor FTP con cifrado SSL para los usuarios del sistema. Buscaremos la sección pertinente en vsftpd.conf:

...
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
...

A simple vista apreciamos que la directiva ssl_enable tiene un valor NO, que debemos cambiar a YES. Las dos líneas superiores indican la ubicación de los certificados que se generan automáticamente durante la instalación de Debian, y están firmados para el nombre y dominio de máquina introducidos durante esa instalación (en el ejemplo de este tutorial, debian9.local).

Se supone que ssl-cert-snakeoil.pem y ssl-cert-snakeoil.key existen y que vamos a conectar a nuestro servidor FTP a través del nombre de máquina FQDN que establecimos en el momento de la instalación del sistema. Si tienes tus propios certificados tendrás que especificar sus ubicaciones.

Hacemos los cambios necesarios en vsftpd.conf:

...
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
...

Para comprobar la configuración usaremos un cliente gráfico como Filezilla. Al configurar una conexión especificamos servidor, puerto, usuario, contraseña y como cifrado elegimos «Use explicit FTP over TLS if available«. En cualquier otro cliente, elige la opción TLS:

como configurar ftp con tls en debian 9 stretch
Configuración de una conexión FTP con cifrado TLS

Al realizar la conexión por primera vez (o si nunca hemos marcado la opción de confiar en el certificado para las futuras conexiones) aparecerá un aviso con toda la información del certificado:

Detalles del certificado SSL del servidor FTP

Vemos fechas de creación y expiración del certificado, datos del dueño del certificado y dominio (máquina) para el que fue creado. Aceptando entraremos en la pantalla de trabajo habitual del cliente de FTP, pero trabajaremos con conexión cifrada.

Si accediéramos con cualquier dominio distinto pero que apuntara al mismo servidor (misma dirección IP) la pantalla anterior nos advertiría que el certificado no corresponde al dominio con el que se conecta, pero aceptando se establece la conexión igualmente.

Conclusión

Ahora que ya sabes cómo instalar FTP en Debian 9 Stretch estás en condiciones de montar tu propio servicio de descarga de ficheros ya sea de forma local o a través de Internet. Sólo tendrás que decidir qué características deseas tener y cuáles no, ya que puedes permitir sólo acceso anónimo, sólo acceso a usuarios, o acceso anónimo y a usuarios.

Si te ha surgido alguna duda o pregunta, has detectado algún error, crees que falta algo, o quieres sugerir algún tema para próximos artículos, déjame un comentario.

Y si has conseguido seguir el tutorial, instalar tu nuevo servidor FTP en Debian 9, y estás tan contento que no sabes cómo agradecérmelo, puedes hacerlo dejando una propina de 1 $ en PayPal:

O, si te sientes especialmente agradecido, puedes invitarme a un café:

¡Gracias!

5/5 - (1 voto)

2 comentarios en «Cómo instalar FTP en Debian 9 Stretch»

  1. Hola, gracias por tu artículo me parece genial y muy didáctico. Siempre me dice el error 530 login incorrect, y he creado usuarios nuevos en Debian. Cómo puedo asegurarme que estos usuarios tienen acceso al ftp

    Responder
    • ¡Hola! La configuración por defecto de vsFTPd recién instalado permite conexión de usuarios en Debian 9. ¿Lo has probado nada más instalarlo?

      Si has modificado la configuración en /etc/vsftpd.conf, ¿has comprobado que la directiva local_enable tiene el valor YES?

      Consulta la información del archivo de log en /var/log/vsftpd.log por si hubiera más información.

      Cualquier cambio en la configuración necesita recargar la configuración del servicio.

      Responder

Deja un comentario

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.