FTP, Ubuntu 22.04 con vSFTPd y TLS

vsFTPd

Dentro de los proyectos que tengo para este 2023 es la creación de un servidor FTP, en este casi implementando algo de seguridad con certificado auto firmado. vSFTPd o «Very Secure FTP Daemon» es un software de servidor FTP gratuito y de código abierto para Unix (incluye Linux) y tiene licencia pública general de GNU. Se integra con PAM y SSL.

Bueno comencemos

Instalación:

sudo apt update
sudo apt install vsftpd
sudo systemctl is-enabled vsftpd
sudo systemctl status vsftpd

Configuración

Creación de certificado autofirmado con OpenSSL para crear u servidor seguro.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout/etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Se hace una copia de la configuración por default de vsFTPd

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Editamos el archivo:

sudo vi /etc/vsftpd.conf

Editamos para no permitir acceso anónimo

anonymous_enable=NO

Descomentar la opción «local_enable» esto permite que los usuarios accedan e inicien sesión en el servidor FTP. Esta opción debe estar activada cuando necesites configurar usuarios virtuales, lo que permitirá que una cuenta de usuario normal en el archivo /etc/passwd pueda iniciar sesión en el servidor FTP.

local_enable=YES

Descomentar la opción «write_enable» para permitir que los usuarios puedan escribir y subir archivos al servidor FTP.

write_enable=YES

Descomentar la opción «chroot_local_users» para habilitar la cárcel («Aislamiento»- para que cada usuario de FTP solo entre a su home). Y un usuario no podrá acceder, ver o listar los archivos que pertenecen a otro usuario.

chroot_local_users=YES

Añade la siguiente configuración para habilitar usuarios virtuales en el servidor vSFTPd. La variable «$USER» se tomará de la variable de entorno del sistema, por lo que cada usuario FTP tendrá su propio directorio raíz y se situará automáticamente en el directorio«/home/nombredeusuario/chroot» tras iniciar la sesión.
En este proyecto agregue un disco adicional de 1TB por lo que la ruta cambio (no esta especificada)

user_sub_token=$USER
local_root=/home/$USER/chroot

Agrega la siguiente configuración para establecer el puerto de alcance para la conexión de datos PASV del servidor vSFTPd.

pasv_min_port=40000
pasv_max_port=50000

Ahora añade la siguiente configuración para habilitar los usuarios virtuales en el servidor vSFTPd. Sólo los usuarios del archivo «/etc/vsftpd.userlist» podrán acceder al servidor FTP.

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

Cambia la configuración SSL/TLS por defecto del vSFTPd utilizando la configuración que aparece a continuación. Esto obligará a los usuarios de FTP a utilizar una conexión TLS segura tanto en el inicio de sesión como en la transferencia de datos, utilizando también sólo el TLSv1.

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Por ultimo Guardamos y cerramos el archivo. A continuación, crea un nuevo archivo para la lista de usuarios de FTP utilizando el siguiente comando. Este archivo es necesario para definir los usuarios FTP.

touch /etc/vsftpd.userlist

Reiniciamos servicios y validamos el estatus

sudo systemctl restart vsftpd
sudo systemctl status vsftpd

Se puede configurar el FireWall para mayor seguridad

Añadir el usuario FTP

Se ha completado la configuración de un servidor FTP seguro utilizando vSFTPd con SSL/TLS activado y se ha asegurado el sistema utilizando el cortafuegos UFW (no descrito en este documento). Ya solo falta crear y modificar un usuario FTP, que es una cuenta de usuario de Linux.

Si configuras un usuario FTP con el shell«/bin/false» o«/usr/sbin/nologin«, tu usuario FTP no podrá acceder al servidor FTP. Esto se debe a que el servicio vSFTPd utiliza el servicio PAM por defecto y los usuarios FTP necesitan un shell válido.

Así que ahora ejecuta el siguiente comando para crear un shell ficticio para los usuarios de FTP«/bin/ftpdummy«.

echo -e '#!/bin/sh\necho "Shell for FTP users only."' | sudo tee -a  /bin/ftpdummy
sudo chmod a+x /bin/ftpdummy

Añade el nuevo shell «/bin/ftpdummy» al archivo de configuración «/etc/shells». Y ahora estás preparado para crear nuevos usuarios FTP.

sudo echo "/bin/ftpdummy" >> /etc/shells

Crearemos el usuario con el nombre «usrTemp» como usuario FTP.
Se ejecuta el siguiente comando para crear un nuevo usuario y con el shell por defecto «/bin/ftpdummy».
En seguida se configura la contraseña del nuevo usuario, asegúrate de utilizar una contraseña fuerte.

sudo useradd -m -s /bin/ftpdummy usrTemp
sudo passwd usrTemp

A continuación, se crea un nuevo directorio «chroot» bajo el directorio principal del usuario utilizando el siguiente comando. Cuando el usuario «usrTemp» se conecte al servidor FTP, el directorio «chroot» será el directorio principal por defecto.

mkdir -p /home/usrTemp/chroot/{data,upload}

cambiamos permisos con el siguiente comando. El directorio«chroot» debe tener el permiso«550«, pero los directorios«data» y«upload» deben tener el permiso«750» para que el usuario pueda escribir/subir archivos en él.

sudo chown -R usrTemp: /home/usrTemp/chroot
sudo chmod 550 /home/usrTemp/chroot
sudo chown -R usrTemp: /home/usrTemp/chroot/{data,upload}
sudo chmod 750 /home/usrTemp/chroot/{data,upload}

se agrega el user a la lista de usarios peritidos en el FTP vSFTPd «/etc/vsftpd.userlist» mediante el siguiente comando y reiniciamos el servicio.

echo "usrTemp" >> /etc/vsftpd.userlist
sudo systemctl restart vsftpd

 

De esta manera concluimos la preparación del server FTP

ADDENDUM:

Script para creación de user:

 

sudo useradd -m -s /bin/ftpdummy test
sudo passwd test
sudo mkdir /FTPDir/FTPHome/test
sudo mkdir /FTPDir/FTPHome/test/chroot &&
sudo mkdir /FTPDir/FTPHome/test/chroot/data &&
sudo mkdir /FTPDir/FTPHome/test/chroot/upload &&
sudo chown -R test /FTPDir/FTPHome/test/chroot &&
sudo chmod 550 /FTPDir/FTPHome/test/chroot &&
sudo chown -R test /FTPDir/FTPHome/test/chroot/data &&
sudo chmod 750 -R /FTPDir/FTPHome/test/chroot/data &&
sudo chown -R test /FTPDir/FTPHome/test/chroot/upload &&
sudo chmod 750 -R /FTPDir/FTPHome/test/chroot/upload &&
echo test | sudo tee -a /etc/vsftpd.userlist

 

También te podría gustar...