Cómo instalar y configurar un servidor FTP con VSFTPD con CentOS 8

FTP (File Transfer Protocol) es un protocolo de red cliente-servidor que permite a los usuarios transferir archivos desde y hacia una máquina remota.

En este tutorial, instalaremos y configuraremos vsftpd (Very Secure FTP Daemon) en CentOS 8, de forma que los usuarios FTP sólo tengan acceso a una carpeta especifica del servidor Apache.

Para la mayoría de las instrucciones utilizaremos el usuario root.

Instalando vsftpd en CentOS

El paquete vsftpd está disponible en los repositorios de CentOs, para instalarlo, corre el siguiente comando con privilegios root.

$ sudo yum -y install vsftpd

Iniciamos el servicio

$ sudo systemctl start vsftpd

Verificamos el estado del servicio

$ sudo systemctl status vsftpd

La salida será parecida a lo siguiente, que nos indicará que el servicio está corriendo

Habilitamos el inicio automático en cada reinicio

$ sudo systemctl enable vsftpd --now

Configurando vsftpd

El archivo de configuración del servidor FTP se almacena en /etc/vsftpd/vsftpd.conf

Iniciamos abriendo el archivo de configuración:

$ sudo nano /etc/vsftpd/vsftpd.conf

1.- Acceso FTP

Permitimos el acceso al servidor FTP solo para usuarios locales (que tengan los datos de acceso), buscamos las directivas anonymous_enable y local_enable y nos aseguramos de que coincida con lo siguiente

anonymous_enable=NO
local_enable=YES
2.- Habilitando subidas

Descomenta la línea write_enable para permitir escritura en los archivos del sistema, para permitir subir y borrar archivos.

write_enable=YES

3.- Jaula chroot

Puedes prevenir que los usuarios accedan a cualquier archivo fuera de su directorio raíz descomentando la línea chroot

chroot_local_user=YES

De manera predeterminada, cuando chroot está habilitado, el servicio vsftpd rechazará los archivos que el usuario intente cargar si el directorio en el que están bloqueados los usuarios es modificable. Esto es para prevenir vulnerabilidades de seguridad.

Un método para permitir cargas cuando cuando chroot está habilitado es el siguiente:

Agrega la siguiente directiva en el archivo de configuración vsftpd.conf

allow_writeable_chroot=YES
4.- conexiones pasivas ftp

vsftpd puede usar cualquier puerto para conexiones pasivas FTP. Nosotros especificaremos el mímino y máximo rango de puertos y después abriremos el rango en el firewall.

Agrega la siguientes líneas al archivo de configuración

pasv_min_port=30000
pasv_max_port=30003
5.- Limitando el inicio de sesión de los usuarios

Para permitir el acceso de solo ciertos usuarios al servidor FTP, agrega la siguientes líneas despues de la directiva userlist_enable=YES: deberá quedar así.

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

Cuando esta opción está habilitada, tu necesitarás especificar de manera explicita que usuarios son capaces de autenticarse agregando los nombres de usuarios al archivo ubicado en /etc/vsftpd/user_list (un usuario por línea).

$ sudo nano /etc/vsftpd/user_list

Tu archivo tendrá el aspecto siguiente

#Usuarios admitidos
usuarioFTP01
usuarioFTP02

Reinicia el servicio vsftpd

Una vez que haz terminado de editar el archivo de configuración vsftpd.conf (excluyendo los comentarios), éste debería lucir algo 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
pasv_min_port=30000
pasv_max_port=30003

Guarda el archivo y reinicia el servicio vsftpd para que los cambios surtan efecto

$ sudo systemctl restart vsftpd

ABRIENDO PUERTOS EN EL FIREWALL

Los pasos anteriores han permitido hacer las configuraciones adecuadas para el servidor FTP, ahora debemos permitir el tráfico que pasa por el firewall, por lo que es necesario abrir los puertos adecuados.

Para la configuración anterior necesitamos abrir los puertos 21, 20, y el rango 30000-30003.

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

$ sudo firewall-cmd --permanent --add-port=30000-30003/tcp

Reinicia el firewall

$ sudo firewall-cmd --reload

Verifica el funcionamiento del firewall

$ sudo systemctl status firewalld

Tendrá el aspecto siguiente

Creando un usuario FTP

Para probar el servidor FTP, necesitamos crear los usuarios, cada uno con los permisos necesarios para escribir solo en su directorio.

Generalmente, cuando instalas el servicio FTP, se crea automáticamente el grupo FTP y el directorio /etc/vsftpd/ pero si esto no ocurre tendremos que crearlo a mano.

1.- Crear directorios

Los directorios que usaremos para los usuarios estarán en Apache /var/www/html/ por lo que si no tenemos un directorio específico, deberemos crearlo, en este ejemplo crearemos dos directorios para dos usuarios distintos para que no se les permita acceder a directorios que no les corresponde

$ sudo mkdir /var/www/html/carpetaFTP01

$ sudo mkdir /var/www/html/carpetaFTP02

2.- Creamos el grupo FTP

$ sudo groupadd ftp

3.- Creamos los usuarios

Creamos los usuarios que harán uso del FTP. añadiéndolo al grupo FTP y asignándole su directorio

$ sudo adduser -g ftp -d /var/www/html/carpetaFTP01 -c "Este es un Usuario FTP" usuarioFTP01

$ sudo adduser -g ftp -d /var/www/html/carpetaFTP02 -c "Este es un Usuario FTP" usuarioFTP02

4.- establecer contraseñas a los usuarios

$ sudo passwd usuarioFTP01

$ sudo passwd usuarioFTP02

5.- creamos un shell fantasma

Vamos a crear un shell fantasma para que los usuarios no puedan iniciar sesión en el sistema y la cuenta sea solamente usada para FTP

1.- Creamos el directorio para el shell

$ sudo mkdir /bin/ftp

2.- Añadimos la línea /bin/ftp al fichero /etc/shells

$sudo nano /etc/shells

Agregamos la línea

/bin/ftp

3.- Editamos el fichero /etc/passwd

$ sudo nano /etc/passwd

Buscamos una línea parecida a la siguiente

usuarioFTP01:x:1001:50:Este es un Usuario FTP:/var/www/html/carpetaFTP01:/bin/sh

y la modificamos de la siguiente forma

usuarioFTP01:x:1001:50:Este es un Usuario FTP:/var/www/html/carpetaFTP01:/bin/ftp

Hacemos lo mismo para los dos usuarios

4.- Agrega los usuarios a la lista de usuarios FTP permitidos, abriendo el archivo user_list

$ sudo nano /etc/vsftpd/user_list

Y agrega a los usuarios, de la siguiente forma:

#Usuarios admitidos
usuarioFTP01
usuarioFTP02

5.- Establece los directorios que usarán los usuarios asigna los permisos

Asignar permisos a la carpeta del usuario

$ sudo chmod 750 /var/www/html/carpetaFTP01

$ sudo chmod 750 /var/www/html/carpetaFTP02

Compartir al usuario la carpeta

$ sudo chown -R usuarioFTP01: /var/www/html/carpetaFTP01

$ sudo chown -R usuarioFTP02: /var/www/html/carpetaFTP02

Hasta este punto, tu servidor FTP es completamente funcional, deberías ser capaz de conectar a tu servidor desde cualquier cliente FTP, como FileZilla.

Solo reinicia el servicio y prueba ingresando con las credenciales que has generado

$ sudo systemctl restart vsftpd

Consideraciones

Algunas veces a pesar de toda la configuración el servidor FTP parece no responder de acuerdo a las instrucciones, asegurate de ejecutar la siguiente instrucción

$ sudo semanage boolean -m ftpd_full_access --on

Referencias externas:

Un comentario sobre “Cómo instalar y configurar un servidor FTP con VSFTPD con CentOS 8

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *