Cómo montar un servidor FTP plano (sin cifrar las conexiones) en Linux Debian 11. Cómo crear usuarios, configurar el acceso FTP, establecer permisos a carpetas, configurar el servidor FTP y acceso desde cliente Filezilla. Mostraremos un ejemplo de conexión al FTP desde Windows a Linux con el comando ftp, enviando un fichero de Windows a Linux.
- Requisitos para montar un servidor FTP en Linux Debian 11.
- Instalar servidor FTP en Linux Debian 11 con vsftpd.
- Configuración del servidor FTP vsftpd en Linux.
- Acceder al servidor FTP con Filezilla desde un equipo Windows (o Linux / MacOS).
- Enviar ficheros de Windows a Linux en FTP plano (sin cifrar) por comando.
- Asignando solo acceso a la carpeta establecida por cada usuario FTP.
- Descarga del fichero /etc/vsftpd.conf para vsftp 3.0.3.
Requisitos para montar un servidor FTP en Linux Debian 11
Como único requisito, necesitaremos disponer de un equipo con Linux Debian 11. Aunque el proceso es similar para otras distribuciones de Linux: Ubuntu, CentOS, Mint, Red Hat, Suse, Fedora, …
En el siguiente enlace explicamos cómo instalar Linux Debian 11 en un equipo:
Necesitaremos acceso SSH al equipo Linux Debian 11 para realizar la instalación y configuración del servidor FTP.
El equipo Linux Debian 11 deberá tener conexión a Internet para la descarga de paquetes.
Hay que tener en cuenta que montaremos un servidor FTP plano, es decir, que la conexión a este servidor NO estará cifrada, será en texto plano, por lo que es un método muy inseguro. Sólo debe usarse este método cuando tenemos equipos legacy (antiguos) que requieren de FTP plano. Y siempre tendremos este servidor lo más aislado del resto de la red posible, usando contraseñas robustas (con más de 12 caracteres, números, letras mayúsculas y minúsculas, caracteres especiales, etc.). Incluso así, la información enviada a este servidor viajará no cifrada.
Instalar servidor FTP en Linux Debian 11 con vsftpd
Desde una consola de comandos, por ejemplo accediendo con PuTTY al equipo Linux Debian 11, ejecutaremos el siguiente comando para actualizar las posibles nuevas versiones de los paquetes instalados:
1 |
apt update |
A continuación ejecutaremos este otro comando para actualizar los paquetes instalados en Debian que tengan versión nueva:
1 |
apt upgrade |
Siempre es conveniente partir de un Sistema Operativo actualizado, por cuestiones de seguridad.
Ahora instalaremos el servidor de FTP propiamente dicho, con el comando:
1 |
apt install vsftpd |
Podríamos usar un usuario del equipo existente para el acceso FTP, pero es recomendable usar usuarios nuevos exclusivos para el servicio de FTP, por seguridad. Por ello agregaremos un nuevo usuario al equipo, por ejemplo «usu_ftp», con el comando:
1 |
adduser usu_ftp |
El comando anterior nos solicitará la contraseña para el nuevo usuario, el nombre completo y algunos datos más. Sólo será obligatorio indicar la contraseña, que recomendamos sea robusta (segura), por ejemplo de 12 caracteres como mínimo, con números, letras mayúsculas y minúsculas y caracteres especiales. Hay que tener en cuenta que los servidores FTP tienen un alto grado de exposición y son vulnerables a ataques por fuerza bruta. Por ello, cuanto más robusta sea la contraseña más difícil será vulnerarla.
Agregaremos este usuario al fichero /etc/vsftpd.listausuarios. Este fichero contendrá la lista de usuarios que tengan acceso al servidor FTP, lo haremos con el comando:
1 |
echo usu_ftp >> /etc/vsftpd.listausuarios |
Crearemos una carpeta de ftp para el usuario usu_ftp en su home:
1 |
mkdir -p /home/usu_ftp/ftp |
Estableceremos los permisos de acceso para el usuario usu_ftp y para su carpeta de ftp, con los comandos:
1 2 |
chmod -R 750 /home/usu_ftp/ftp chown -R usu_ftp: /home/usu_ftp/ftp |
Revisaremos que el servicio de FTP está iniciado con el comando:
1 |
systemctl status vsftpd.service |
Nos devolverá «Active: active (running)»:
Si tenemos cortafuegos en el servidor Linux Debian 11 deberemos abrir el puerto 20 para FTP y 21 para SFTP (si lo vamos a activar):
1 2 3 |
ufw allow 20/tcp ufw allow 21/tcp ufw reload |
Configuración del servidor FTP vsftpd en Linux
Para configurar el comportamiento del servidor FTP editaremos el fichero /etc/vsftpd.conf, por ejemplo con nano:
1 |
nano /etc/vsftpd.conf |
En primer lugar estableceremos el parámetro anonymous_enable a NO:
anonymous_enable=NO
Esto es muy recomendable por seguridad, dado que si lo establecemos a YES se tendrá acceso al servidor FTP sin solicitar usuario y contraseña.
Estableceremos los siguientes parámetros:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.listausuarios
userlist_deny=NO
Puede que algunos de los parámetros ya existan, si es así y su valor no coincide lo cambiaremos dejándolo como la lista anterior:
Como nos avisa en el fichero de configuración, al establecer el parámetro chroot_local_user=YES y allow_writeable_chroot=YES estamos indicando que cuando se acceda con el usuario FTP tendrá acceso a toda su capeta /home/usuario, tanto de lectura como de escritura. Por eso, hemos recomendado anteriormente crear usuarios nuevos sólo para el servicio de FTP, que únicamente utilicen ficheros en sus carpetas que sepan que quedarán expuestos al acceso FTP.
Guardaremos los cambios en el fichero pulsando Control + O y cerraremos con Control + X.
Para aplicar los cambios reiniciaremos el servicio de vsftpd con el comando:
1 |
systemctl restart vsftpd.service |
Y volveremos a comprobar el estado del servicio, para asegurarnos de que se ha iniciado correctamente:
1 |
systemctl status vsftpd.service |
A partir de ahora tendremos acceso al servidor FTP desde equipos de la red.
Acceder al servidor FTP con Filezilla desde un equipo Windows (o Linux / MacOS)
Podremos utilizar cualquier cliente de FTP para conectarnos al servidor FTP montado en el equipo Linux Debian 11. Como ejemplo usaremos Filezilla, que tendremos instalado en Windows (o cualquier otro SO). Crearemos un nuevo sitio en Filezilla, indicando los datos de conexión:
- Protocolo: elegiremos «FTP – Protocolo de Transferencia de Archivos».
- Servidor: introduciremos la dirección IP del servidor de FTP (el equipo Linux Debian 11).
- Puerto: no hace falta indicarlo salvo que no sea el estándar, 20 y 21 para FTP.
- Cifrado: al ser un FPT «simple», elegiremos «Usar sólo FTP plano (inseguro)». Como indica el aviso es una conexión no cifrada y no segura. Debemos tener esto en cuenta.
- Usuario: el usuario para conexión FTP creado anteriormente, que estará en el fichero /etc/vsftpd.listausuarios. En nuestro caso «usu_ftp».
- Contraseña: la contraseña del usuario anterior.
Realizaremos la conexión pulsando en «Conectar»:
Nos advertirá de que vamos a conectarnos a un servicio no seguro (FTP plano):
Pulsaremos «Aceptar» en la ventana de confirmación anterior y realizará la conexión al servidor FTP, mostrándonos la carpeta raíz del usuario (/home/usu_ftp). Vemos que no tiene acceso a carpetas inferiores del equipo pero sí a toda su carpeta y subcarpetas /home/usr_ftp:
Podremos subir cualquier fichero desde nuestro equipo Windows/Linux/MacOS al servidor FTP:
Y será accesible, por supuesto, desde el equipo Linux Debian 11:
Insistimos en que este método de conexión por FTP plano sólo debe ser usado en ocasiones excepcionales y de forma controlada. Por ejemplo cuando tenemos algún servicio en nuestra red que requiere de este protocolo FTP plano (y no admite otro) para enviar ficheros de backup o similares. En este caso crearemos un servidor todo lo asilado posible y únicamente para este propósito.
Enviar ficheros de Windows a Linux en FTP plano (sin cifrar) por comando
También podremos usar el comando ftp que viene en todas las versiones de Windows y nos permitirá, desde la línea de comandos, enviar ficheros de equipos Windows a Linux.
Para ello, abriremos una ventana de Símbolo del sistema (MS-DOS) y ejecutaremos el siguiente comando para conectar con el servidor FTP:
1 |
ftp 192.168.1.26 |
(Siendo 192.168.1.26 la IP del equipo Linux con el servidor FTP plano)
Nos pedirá usuario y contraseña, los introduciremos. Accederemos a la misma carpeta del usuario FTP que con el cliente Filezilla. Podremos listar el contenido con:
1 |
dir |
Y acceder a una subcarpeta con:
1 |
cd ftp |
También podremos transferir archivos del equipo Windows al equipo Linux con un sencillo comando:
1 |
send D:\Backups\MySQL\proyectoa\20220428\wp_6baea14f98edc9bf_tIJFNDv3.sql.gz |
Transferirá el fichero wp_6baea14f98edc9bf_tIJFNDv3.sql.gz de la unidad y carpeta indicados del equipo Windows a la carpeta en la que nos encontremos del equipo Linux:
Volvemos a reiterar que el comando «ftp» ha quedado obsoleto por ser inseguro y conectar con un servidor FTP plano. Siempre es recomendable usar scp y similares y conectar con servidores SFTP (FTP sobre TLS).
Asignando solo acceso a la carpeta establecida por cada usuario FTP
Para mejorar un poco la seguridad, estableceremos a qué carpeta local tendrá acceso cada usuario, en lugar de tener acceso a todas sus carpetas de /home/usuario. Para ello seguiremos los siguientes pasos.
Crearemos la carpeta ftp para cada usuario, como hemos hecho anteriormente:
1 |
mkdir -p /home/usu_ftp/ftp |
Estableceremos los permisos para dicha carpeta y para el usuario FTP (esto lo hemos hecho anteriormente):
1 2 |
chmod -R 750 /home/usu_ftp/ftp chown -R usu_ftp: /home/usu_ftp/ftp |
Crearemos la carpeta de vsftpd donde estableceremos la configuración por cada usuario de acceso FTP:
1 |
mkdir -p /etc/vsftpd/dir_conf_usuarios/ |
Crearemos un fichero por cada usuario de acceso FTP en la carpeta anterior, para el usuario usu_ftp:
1 |
touch /etc/vsftpd/dir_conf_usuarios/usu_ftp |
Editaremos el fichero creado con nano para agregar la carpeta raíz de FTP de inicio de cada usuario. Para el usuario usu_ftp:
1 |
nano /etc/vsftpd/dir_conf_usuarios/usu_ftp |
Para evitar que los usuarios pueda navegar por toda la estructura de carpetas crearemos el fichero /etc/vsftpd.chroot_list con
1 |
nano /etc/vsftpd.chroot_list |
Dentro de este fichero añadiremos, un usuario por línea, todos los usuarios FTP que queramos que no puedan navegar por toda la estructura de carpetas:
Estableceremos los siguientes parámetros en el fichero de configuración /etc/vsftpd.conf de vsftpd:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.listausuarios
userlist_deny=NO
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/dir_conf_usuarios
Guardaremos los cambios y reiniciaremos el servicio vsftpd para aplicarlos:
1 |
systemctl restart vsftpd.service |
Cuando nos conectemos ahora al servidor FTP, el usuario «usu_ftp» sólo tendrá acceso a su carpeta /home/usu_ftp/ftp y a ninguna otra:
Su carpeta raíz de FTP será la establecida para el usuario y no podrá navegar por el disco duro.
Descarga del fichero /etc/vsftpd.conf para vsftp 3.0.3
El fichero /etc/vsftpd.conf completo para la versión 3.0.5 de vsftpd y para Linux Debian 11, testado y funcionando como FTP plano con usuarios enjaulados (sólo acceso a su carpeta FTP establecida):