Cómo configurar el servidor FTP con VSFTPD en Ubuntu 20.04

8 mar 2021 5 min di lettura
Cómo configurar el servidor FTP con VSFTPD en Ubuntu 20.04
Indice dei contenuti

Introducción

Este artículo describe cómo instalar y configurar un servidor FTP en Ubuntu 20.04 LTS Focal Fossa que usa para compartir archivos entre sus dispositivos.

FTP (Protocolo de transferencia de archivos) es un protocolo de red estándar que se utiliza para transferir archivos desde y hacia una red remota. Hay varios servidores FTP de código abierto disponibles para Linux. Los más conocidos y ampliamente utilizados son PureFTPd , ProFTPD y vsftpd . Instalaremos vsftpd (Very Secure Ftp Daemon), un servidor FTP estable, seguro y rápido. También le mostraremos cómo configurar el servidor para restringir a los usuarios a su directorio de inicio y cifrar toda la transmisión con SSL / TLS.

Aunque FTP es un protocolo muy popular, para transferencias de datos más seguras y rápidas, debe usar SCP o SFTP.

Instale vsftpd en Ubuntu 20.04

El paquete vsftpd está disponible en los repositorios de Ubuntu. Para instalarlo, ejecute los siguientes comandos:

sudo apt update
sudo apt install vsftpd

El servicio ftp se iniciará automáticamente una vez que se complete el proceso de instalación. Para comprobar esto, imprima el estado del servicio:

sudo systemctl status vsftpd

El resultado debe mostrar que el servicio vsftpd está en funcionamiento:

● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-03-08 20:07:47 CET; 19s ago
   Main PID: 182697 (vsftpd)
      Tasks: 1 (limit: 2286)
     Memory: 588.0K
     CGroup: /system.slice/vsftpd.service
             └─182697 /usr/sbin/vsftpd /etc/vsftpd.conf

Mar 08 20:07:47 TEST-SERVER-1 systemd[1]: Starting vsftpd FTP server...
Mar 08 20:07:47 TEST-SERVER-1 systemd[1]: Started vsftpd FTP server.

Configurar vsftpd

La configuración del servidor vsftpd se almacena en el archivo /etc/vsftpd.conf.

La mayoría de las configuraciones del servidor están bien documentadas dentro del archivo. Para conocer todas las opciones disponibles, visite la página de documentación de vsftpd .

En las siguientes secciones, revisaremos algunas configuraciones importantes necesarias para configurar una instalación segura de vsftpd.

Comience abriendo el archivo de configuración vsftpd:

sudo nano /etc/vsftpd.conf

1. Acceso FTP

Permitiremos el acceso al servidor FTP solo para usuarios locales. Busque las directivas anonymous_enabley local_enablecompruebe la correspondencia de configuración de las líneas siguientes:

anonymous_enable=NO
local_enable=YES
/etc/vsftpd.conf

2. Habilita las cargas

Busque y elimine el comentario de la directiva write_enablepara permitir cambios en el sistema de archivos, como cargar y eliminar archivos:

write_enable=YES
/etc/vsftpd.conf

3. Cárcel de Chroot

Para evitar que los usuarios de FTP local accedan a archivos fuera de sus directorios de inicio, descomente la línea que comienza con chroot_local_user:

chroot_local_user=YES
/etc/vsftpd.conf

De forma predeterminada, por razones de seguridad, cuando chroot está habilitado, vsftpd se negará a cargar archivos si el directorio donde los usuarios están bloqueados es modificable.

Utilice una de las soluciones a continuación para permitir cargas cuando chroot está habilitado:

Método 1. - La opción recomendada es mantener chroot habilitado y configurar directorios FTP. En este ejemplo, crearemos un directorio ftpdentro de la casa del usuario, que servirá como chroot y un directorio uploadsgrabable para cargar archivos:

user_sub_token=$USER
local_root=/home/$USER/ftp
/etc/vsftpd.conf

Método 2. - Otra opción es habilitar la directiva allow_writeable_chroot:

allow_writeable_chroot=YES
/etc/vsftpd.conf

Utilice esta opción solo si necesita otorgar al usuario acceso de escritura a su directorio de inicio.

4. Conexiones FTP pasivas

De forma predeterminada, vsftpd usa el modo activo. Para usar el modo pasivo, configure el rango de puertos mínimo y máximo:

pasv_min_port=30000
pasv_max_port=31000
/etc/vsftpd.conf

Se puede utilizar cualquier puerto para conexiones FTP pasivas. Cuando el modo pasivo está habilitado, el cliente FTP abre una conexión al servidor en un puerto aleatorio en el rango que ha elegido.

5. Restricción del acceso de los usuarios

Puede configurar vsftpd para permitir el acceso solo a ciertos usuarios. Para hacer esto, agregue las siguientes líneas al final del archivo:

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
/etc/vsftpd.conf

Cuando esta opción está habilitada, debe especificar explícitamente qué usuarios pueden iniciar sesión agregando nombres de usuario al archivo /etc/vsftpd.user_list(un usuario por línea).

6. Transmisiones seguras con SSL / TLS

Para cifrar las transmisiones FTP con SSL / TLS, debe tener un certificado SSL y configurar el servidor FTP para usarlo.

Puede utilizar un certificado SSL existente firmado por una autoridad certificadora de confianza o crear un certificado autofirmado.

Si tiene un dominio o subdominio que apunta a la dirección IP del servidor FTP, puede generar rápidamente un certificado SSL Let's Encrypt gratuito .

Generaremos una clave privada de 2048 bits y un certificado SSL autofirmado que tendrá una vigencia de diez años:

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

Tanto la clave privada como el certificado se guardarán en el mismo archivo.

Una vez que se crea el certificado SSL, abra el archivo de configuración vsftpd:

sudo nano /etc/vsftpd.conf

Busque las directivas rsa_cert_filey rsa_private_key_filecambie sus valores en la ruta del archivo pamy establezca la directiva ssl_enableen YES:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
/etc/vsftpd.conf

A menos que se especifique lo contrario, el servidor FTP solo utilizará TLS para realizar conexiones seguras.

Reinicie el servicio vsftpd

Una vez que haya terminado de editar, el archivo de configuración de vsftpd (excluidos los comentarios) debería verse así:

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
/etc/vsftpd.conf

Guarde el archivo y reinicie el servicio vsftpd para que los cambios surtan efecto:

sudo systemctl restart vsftpd

Abre el cortafuegos

Si está utilizando un cortafuegos UFW , deberá permitir el tráfico FTP.

Para abrir el puerto 21( puerto de comando FTP), el puerto 20( puerto de datos FTP) y 30000-31000(rango de puerto pasivo), ejecute los siguientes comandos:

sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp

Para evitar ser bloqueado, asegúrese de que la puerta 22esté abierta:

sudo ufw allow OpenSSH

Vuelva a cargar las reglas de UFW deshabilitando y volviendo a habilitar UFW:

sudo ufw disable
sudo ufw enable

Para verificar los cambios, ejecute:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
20:21/tcp                  ALLOW       Anywhere
30000:31000/tcp            ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
20:21/tcp (v6)             ALLOW       Anywhere (v6)
30000:31000/tcp (v6)       ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

Crea un usuario de FTP

Para probar el servidor FTP, crearemos un nuevo usuario.

  • Si el usuario al que desea otorgar acceso FTP ya existe, omita el primer paso.
  • Si lo establece allow_writeable_chroot=YESen el archivo de configuración, omita el tercer paso.

Cree un nuevo usuario llamado newftpuser:

sudo adduser newftpuser

Agregue el usuario a la lista de usuarios FTP permitidos:

echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list

Cree la estructura del directorio FTP y establezca los permisos correctos:

sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp

Como se discutió en la sección anterior, el usuario podrá subir sus archivos al directorio ftp/upload.

En este punto, su servidor FTP es completamente funcional. Debería poder conectarse al servidor mediante cualquier cliente FTP que pueda configurarse para usar el cifrado TLS, como FileZilla .

Deshabilitar el acceso al shell

De forma predeterminada, al crear un usuario, a menos que se especifique explícitamente, el usuario tendrá acceso SSH al servidor. Para deshabilitar el acceso de shell, cree un nuevo shell que imprimirá un mensaje informando al usuario que su cuenta está limitada solo al acceso FTP.

Ejecute los siguientes comandos para crear el archivo /bin/ftponlyy hacerlo ejecutable:

echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
sudo chmod a+x /bin/ftponly

Agregue el nuevo shell a la lista de shells válidos en el archivo /etc/shells:

echo "/bin/ftponly" | sudo tee -a /etc/shells

Cambie el shell de usuario a /bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

Puede usar el mismo comando para cambiar el shell de todos los usuarios a los que desea otorgar acceso FTP únicamente.

Conclusión

Le mostramos cómo instalar y configurar un servidor FTP seguro y rápido en su sistema Ubuntu 20.04 LTS Focal Fossa.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.