Vsftpd, instalación y configuración básica de un servidor FTP
En el siguiente artículo vamos a echar un vistazo a cómo podemos instalar vsftpd en Ubuntu. Tanto si quieres crear un servidor doméstico, un servidor web, un servidor de juegos o cualquier servidor que se adapte a tu proyecto, un FTP es la forma más sencilla de transferir datos de un sistema a otro. Por eso vamos a ver cómo realizar la instalación y configuración básica de un servidor FTP en Ubuntu.
FTP, o Protocolo de transferencia de archivos, es el sistema que se utiliza para cargar (colocar) o descargar (obtener) archivos de un servidor. Probablemente lo tengas utilizado en algún momento sin darte cuenta, al tomar archivos o cargar imágenes a la web.
Instalar un servidor FTP en Ubuntu
Instalar vsftpd
Para este ejemplo, voy a instalar un servidor FPT en mi red local sobre un Ubuntu 20.04. Si no lo tienes instalado en tu equipo, se puede instalar con el comando (Ctrl+Alt+T):
sudo apt install vsftpd
Una vez instalado, vamos a empezar por hacer una copia del archivo de configuración original. Si algo sale mal, se puede restaurar la configuración predeterminada.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_default
Ahora vamos a iniciar el servicio con el comando:
sudo systemctl start vsftpd
Confirmamos que se está ejecutando con:
sudo systemctl enable vsftpd
Cuenta de usuario FTP
Con esto podremos usar cualquier cliente FTP para acceder a los archivos alojados en el servidor a través de vsftpd. En la terminal (Ctrl+Alt+T) solo tendremos que utilizar el comando:
sudo useradd –m nombre-usuario
Sustituye ‘nombre-usuario‘ por tu nombre de usuario previsto. A continuación vamos a establecer una contraseña:
sudo passwd nombre-usuario
Después nos vamos a mover a la carpeta de usuario recién creada:
cd /home/nombre-usuario
Lo ideal es que el FTP se restrinja a un directorio específico por motivos de seguridad. Vsftpd usa jaulas chroot para lograr esto. Con chroot habilitado, un usuario local está restringido a su directorio de inicio (por defecto). Para este ejemplo, vamos a crear un directorio ftp que actuará como chroot, junto con un directorio de archivos modificables.
Para empezar creamos la carpeta FTP:
sudo mkdir ftp
Estableceremos la propiedad de la carpeta con este otro comando:
sudo chown nobody:nogroup /home/nombre-usuario/ftp
Ahora eliminamos los permisos de escritura de esta carpeta:
sudo chmod a-w /home/nombre-usuario/ftp
Continuamos creando directorio contenedor de archivos y le asignaremos la propiedad:
sudo mkdir /home/nombre-usuario/ftp/files sudo chown nombre-usuario:nombre-usuario /home/nombre-usuario/ftp/files
En este punto, vamos a crear un archivo de prueba en la carpeta files:
echo "vsftpd archivo de ejemplo" | sudo tee /home/nombre-usuario/ftp/files/ejemplo.txt
Asegurar el servidor FTP
En esta paso vamos a abrir los puertos 20 y 21 para el tráfico FTP. Los puertos 40000-50000 serán los reservados para el rango de puertos pasivos que eventualmente se establecerán en el archivo de configuración y el puerto 990 se usará cuando se habilite el TLS. Ejecuta lo siguiente para hacerlo:
sudo ufw allow 20/tcp; sudo ufw allow 21/tcp; sudo ufw allow 990/tcp; sudo ufw allow 40000:50000/tcp
Si utilizas un firewall diferente, consulta su documentación para abrir los puertos.
Configurar vsftpd
Como nos interesa que los usuarios puedan cargar archivos, vamos a editar el archivo de configuración de vsftpd:
sudo vim /etc/vsftpd.conf
Dentro del archivo vamos a buscar las siguientes entradas y descomentarlas:
anonymous_enable=NO write_enable=YES local_enable=YES
Chroot_local_user tampoco se comentará, con ello nos garantizamos que el usuario conectado solo acceda a los archivos dentro del directorio permitido:
chroot_local_user=YES
También vamos a añadir manualmente algunos valores nuevos al final del archivo. Esto permitirá que la configuración funcione con el usuario actual y con cualquier otro usuario que se agregue posteriormente:
user_sub_token=$USER local_root=/home/$USER/ftp
Reinicia el daemon para cargar los cambios:
sudo systemctl restart vsftpd
Conexiones cifradas
Vamos a utilizar TTL/SSL para garantizar la seguridad. Debemos crear el certificado SSL y usarlo para proteger el servidor FTP. Esto lo haremos con el comando:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
El flag -days hace que el certificado sea válido por un año y hemos incluido una clave privada RSA de 2048 bits en el mismo comando. Cuando termines de crear el certificado, abre otra vez el archivo de configuración:
sudo vim /etc/vsftpd.conf
El final del archivo debemos encontrar dos líneas que comiencen con «rsa«. Comenta ambas líneas y escribe las siguientes:
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Ahora habilitaremos SSL para que solo los clientes que tengan SSL habilitados puedan conectarse. Cambia el valor de ssl_enable a YES:
ssl_enable=YES
Para no permitir conexiones anónimas a través de SSL, añade las líneas:
allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
Configura el servidor para usar TLS, añadiendo:
ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
También conseguiremos que no será necesario reutilizar SSL, porque puede ocasionar que muchos clientes de FTP no funcionen. Además utilizaremos suites de encriptación de alto cifrado, añadiendo las líneas:
require_ssl_reuse=NO ssl_ciphers=HIGH
Guardamos el archivo y reiniciamos el servicio:
sudo systemctl restart vsftpd
Acceder desde un cliente FTP
Ahora ya podremos conectarnos a nuestro servidor FTP. Para esto podremos utilizar una aplicación desde el entorno gráfico o el comando de terminal ftp. Si optas por el entorno gráfico, necesitarás un cliente FTP como FileZilla. Para instalarlo puedes recurrir al artículo que un compañero escribió en este blog hace un tiempo.
Una vez instalado e iniciado Filezilla, haz clic en Archivo / Gestor de sitios. Lo siguiente será hacer clic en “Nuevo sitio”.
En el panel de la derecha, selecciona como protocolo FTP. Si está utilizando FTPS, selecciona TLS para cifrado. A continuación, escribe el nombre de host o la dirección IP en Servidor y añade el puerto (21). Para el modo de acceso selecciona Normal, y escribe las credenciales de tu cuenta en Usuario y Contraseña. Haz clic en Conectar.
Tendremos que aceptemos el certificado que creamos anteriormente.
Llegados a este punto veremos el archivo de ejemplo que creamos dentro de la carpeta files. Ya podemos comenzar a usar nuestro servidor FTP. Simplemente arrastra y suelta los archivos que quieras mover.
Usando un FTP, podremos capturar los datos siempre que los necesitemos. Se puede saber más sobre vsftpd y su configuración desde la página de documentación de Ubuntu.