Ubuntu 20.04: instalando vsftpd

Download PDF

Por muchos años nuestros clientes habían usado una solución libre para FTP en servidores privativos: el grandioso FileZilla server. Hoy traemos a la palestra al antiquísimo (pero confiable) vsftpd.

Tabla de contenido:

Introducción

Tengo mucho trabajo y voy siendo práctico: en la Wikipedia en idioma alemán está bien descrito vsftpd, lo tendré en cuenta para traducirlo al castellano, «el trabajo es mejor que sobre y no que falte».

Instalación

Echaremos mano del comando apt:

sudo apt install vsftpd -y

Y esperaremos que sea instalado.

Configuración

Cortafuegos

El cortafuegos (firewall) predeterminado en Ubuntu es ufw y aunque esté inactivo igual lo configuramos para:

  • Para que acepte conexiones remotas SSH (por si acaso, reverificamos):

sudo ufw allow OpenSSH

  • Para que acepte las conexiones FTP:
sudo ufw allow 20,21,990/tcp
sudo ufw allow 40000:50000/tcp

En la primera línea es la norma para FTP abrir esos puertos, en la segunda arrancamos desde 42000 para que esté por encima del servidor Tentacle de Pandora FMS, hasta 50000, cantidad más que suficientes para puertos pasivos.

Si vamos a usar el cortafuegos:

sudo ufw enable
sudo ufw status

Debería mostrar:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
20,21,990/tcp              ALLOW       Anywhere
42000:50000/tcp            ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
20,21,990/tcp (v6)         ALLOW       Anywhere (v6)
42000:50000/tcp (v6)       ALLOW       Anywhere (v6)

Solo usuarios conocidos

Primero haremos una copia del fichero de configuración:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original

Usaremos el editor de texto nano para editar dicho archivo:

sudo nano /etc/vsftpd.conf

Comenzamos entonces a editar /etc/vsftpd.conf :

  • Impedir visitantes anónimos.
  • Permitir que los usuarios registrados en nuestro servidor GNU/Linux puedan conectar.
  • Permitir que nuestros usuarios puedan crear nuevos archivos y carpetas (ficheros y directorios).
anonymous_enable=NO
local_enable=YES
write_enable=YES

⚠ ¡Atención! Aún faltan ajustes, ya los vamos a agregar, guardamos y cerramos ese fichero y reiniciamos el servicio vsftpd.

Carpeta FTP dedicada

Lo siguiente es que forzaremos a que cada usuario pueda cargar y/o descargar sus archivos solamente en su cuenta de usuario y limitado a una carpeta específica que crearemos luego mediante un guion especial con BASH.

Es un poco complicado pero observad y seguid leyendo hasta el final y comprenderéis, lo coloco en este orden (configurar primero todo en vsftpd) porque me parece más lógico.

chroot_local_user=YES
user_sub_token=$USER
local_root=/home/$USER/ftp

Añadir usuarios autorizados a FTP

Bien, aparte de ser usuario conocido quien se conectará a nuestro FTP, pues también tiene que estar explícitamente autorizado por nosotros… Así que le indicaremos a vsftpd que conecte solamente a nuestra lista:

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

Puertos pasivos

Por último en la configuración de vsftpd le estableceremos los siguientes puertos pasivos, arrancamos desde 42000 para no interferir con el servidor Tentacle de Pandora FMS:

pasv_min_port=42000
pasv_max_port=50000

Pulsamos CTRL+X, luego la tecla Y pulsamos Intro para guardar con el mismo nombre de archivo.

Agregando un usuario cualquiera

Este guion se le pasa el usuario deseado como parámetro ( y luego de verificar que el usuario está registrado en el sistema GNU/Linux que está ejecutando vsftpd) crea los directorios, lo agrega a la lista y reinicia vsftpd:

#/bin/bash
#

if [[ $# -eq 0 ]] ; then
  echo 'Debe colocar el nombre del nuevos usuario vsftpd.'
  exit 0
fi


USUARIO=$(sudo cat /etc/passwd | cut -d: -f1 | grep $1)

if test "$USUARIO" = ""
then
  echo "Ese usuario "$1" no está registrado en este sistema."
  exit 0
else
  sudo mkdir -p /home/$1/ftp
  sudo chown nobody:nogroup /home/$1/ftp
  sudo chmod a-w /home/$1/ftp
  sudo mkdir -p /home/$1/ftp/files
  sudo chown $1:$1 /home/$1/ftp/files
  echo "vsftpd archivo para pruebas." | sudo tee /home/$1/ftp/files/prueba.txt
  USUARIO=$(sudo cat /etc/vsftpd.userlist | grep $1)
  if test "$USUARIO" = ""
  then
    echo $1 | sudo tee -a /etc/vsftpd.userlist
  else
    echo "El usuario ya estaba agregado en /etc/vsftpd.userlist"
  fi
  echo $USUARIO" agregado."
  echo ""
  echo "Reiniciando servicio vsftpd..."
  sudo systemctl restart vsftpd
fi

Fuentes consultadas

  • https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-ubuntu-20-04
Download PDF
Por favor, lea también   Comandos de red GNU/Linux