Cómo configurar el servidor FTP con VSFTPD en CentOS 8 Linux

1 mar 2021 6 min di lettura
Cómo configurar el servidor FTP con VSFTPD en CentOS 8 Linux
Indice dei contenuti

Introducción

FTP (Protocolo de transferencia de archivos) es un protocolo de red cliente-servidor estándar que permite a los usuarios transferir archivos desde y hacia una red remota.

Hay varios servidores FTP de código abierto disponibles para Linux. Los más populares y utilizados son PureFTPd, ProFTPD y vsftpd.

En este tutorial, instalaremos vsftpd (Very Secure Ftp Daemon) en CentOS 8. Es un servidor FTP estable, seguro y rápido. También le mostraremos cómo configurar vsftpd para restringir a los usuarios a su directorio de inicio y cifrar toda la transmisión con SSL /TLS.

Para transferencias de datos más seguras y rápidas, use SCP o SFTP.

Prerrequisitos

Antes de continuar con este tutorial, asegúrese de haber iniciado sesión como usuario con privilegios de sudo.

Si desea instalar y configurar VSFTPD en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.

Conexión al servidor

Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:

ssh root@IP_DEL_SERVER

A continuación, deberá ingresar la contraseña del usuario root.

Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie root a su nombre de usuario:

ssh nome_utente@IP_DEL_SERVER

Luego se le pedirá que ingrese su contraseña de usuario.

El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:

ssh nome_utente@IP_DEL_SERVER -p PORTA

Instale vsftpd en CentOS 8

El paquete vsftpd está disponible en los repositorios CentOS predeterminados. Para instalarlo, emita el siguiente comando:

sudo yum install vsftpd

Una vez que el paquete esté instalado, inicie el demonio vsftpd y habilite el inicio automático en el inicio:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd

Puede verificar que el servicio vsftpd se esté ejecutando imprimiendo su estado:

sudo systemctl status vsftpd

El resultado se verá así, demostrando que el servicio vsftpd está en funcionamiento:

● vsftpd.service - Vsftpd ftp daemon
 Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
 Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
 Main PID: 29612 (vsftpd)
 CGroup: /system.slice/vsftpd.service
 └─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Configurar vsftpd

La configuración del servicio vsftpd implica editar el /etc/vsftpd/vsftpd.conf La mayoría de las configuraciones están bien documentadas en el archivo de configuración. Para conocer todas las opciones disponibles, visite la página oficial de vsftpd.

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

En este tutorial usamos nano, si lo prefiere puede usar vi instalado por defecto en la mayoría de las distribuciones.

sudo dnf install nano

Comience abriendo el archivo de configuración vsftpd:

sudo nano /etc/vsftpd/vsftpd.conf

local_enable acceso al servidor FTP solo para usuarios locales, busque las directivas anonymous_enable y local_enable y verifique la correspondencia de la configuración en las líneas siguientes:

anonymous_enable=NO
 local_enable=YES

Elimine el comentario de la configuración write_enable para permitir cambios en el sistema de archivos como la carga y eliminación de archivos.

write_enable=YES

Evite que los usuarios de FTP accedan a todos los archivos fuera de sus directorios de inicio (Jail chroot) Descomente la directiva chroot

chroot_local_user=YES

De forma predeterminada, cuando chroot está habilitado, vsftpd se niega a cargar archivos si el directorio donde los usuarios están bloqueados es modificable. Esto es para prevenir una vulnerabilidad de seguridad.

Utilice uno de los siguientes métodos para permitir cargas cuando chroot está habilitado.

Método 1. - El método recomendado para permitir la carga es mantener el chroot habilitado y configurar los directorios FTP. En este tutorial, crearemos un ftp dentro de la casa del usuario que actuará como un chroot y un uploads para cargar archivos:

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

Método 2. - Otra opción es agregar la siguiente directiva en el archivo de configuración vsftpd. Utilice esta opción si necesita otorgar acceso de escritura a su usuario a su directorio de inicio:

allow_writeable_chroot=YES

Conexiones FTP pasivas

vsftpd puede usar cualquier puerto para conexiones FTP pasivas. Especificaremos el rango mínimo y máximo de puertos y luego abriremos el rango en nuestro firewall.

Agregue las siguientes líneas al archivo de configuración:

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

Restringir el acceso de los usuarios

Para permitir que solo ciertos usuarios accedan al servidor FTP, agregue las siguientes líneas después de la userlist_enable=YES:

sudo nano /etc/vsftpd/vsftpd.conf
userlist_file=/etc/vsftpd/user_list
 userlist_deny=NO

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

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 fácilmente un certificado SSL Let's Encrypt gratuito.

En este tutorial, generaremos un certificado SSL autofirmado (Certificado SSL autofirmado) usando el comando openssl.

El siguiente comando creará una clave privada de 2048 bits y un certificado autofirmado válido por 10 años. Tanto la clave privada como el certificado se guardarán en el mismo archivo:

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

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

sudo nano /etc/vsftpd/vsftpd.conf

Busque las rsa_cert_file y rsa_private_key_file, cambie sus valores en la ruta del archivo pam y establezca la directiva ssl_enable YES:

rsa_cert_file=/etc/vsftpd/vsftpd.pem
 rsa_private_key_file=/etc/vsftpd/vsftpd.pem
 ssl_enable=YES

A menos que se especifique lo contrario, el servidor FTP solo utilizará TLS para establecer 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í:

anonymous_enable=NO
 local_enable=YES
 write_enable=YES
 local_umask=022
 dirmessage_enable=YES
 xferlog_enable=YES
 connect_from_port_20=YES
 xferlog_std_format=YES
 chroot_local_user=YES
 listen=NO
 listen_ipv6=YES
 pam_service_name=vsftpd
 userlist_enable=YES
 userlist_file=/etc/vsftpd/user_list
 userlist_deny=NO
 tcp_wrappers=YES
 user_sub_token=$USER
 local_root=/home/$USER/ftp
 pasv_min_port=30000
 pasv_max_port=31000
 rsa_cert_file=/etc/vsftpd/vsftpd.pem
 rsa_private_key_file=/etc/vsftpd/vsftpd.pem
 ssl_enable=YES

Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.

Reinicie el servicio vsftpd para que los cambios surtan efecto:

sudo systemctl restart vsftpd

Abra el firewall

Si está ejecutando un firewall, debe permitir el tráfico FTP.

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

sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp

Vuelva a cargar las reglas del firewall escribiendo:

firewall-cmd --reload

Crea un usuario de FTP

Para probar nuestro servidor FTP crearemos un nuevo usuario.

  • Si ya tiene un usuario al que desea otorgar acceso FTP, omita el primer paso.
  • Si establece allow_writeable_chroot=YES en el archivo de configuración, omita el tercer paso.

Crea un nuevo usuario llamado newftpuser:

sudo adduser newftpuser

A continuación, deberá establecer la contraseña del usuario:

sudo passwd 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 y debería poder conectarse a su servidor con cualquier cliente FTP que pueda configurarse para usar encriptación 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 al shell, crearemos un nuevo shell que simplemente imprimirá un mensaje que le indicará al usuario que su cuenta está limitada solo al acceso FTP.

Ejecute los siguientes comandos para crear el /bin/ftponly y 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 /etc/shells:

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

Cambie el shell del usuario a /bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

Utilice el mismo comando para cambiar el shell de otros usuarios a los que desea dar solo acceso FTP.

Conclusión

En este tutorial, ha aprendido a instalar y configurar un servidor FTP seguro y rápido en su sistema CentOS 8.

Support us with a

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.