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.
Tabla de contenidos
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
:
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:
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.
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:
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:
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.
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:
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:
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:
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!
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
¡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.