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