FTP, Ubuntu 22.04 con vSFTPd y TLS
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