En esta ocasión veremos cómo instalar FTP en CentOS 8 paso a paso, de modo que puedas configurar este servicio en tu servidor o VPS CentOS para distribuir archivos públicamente o para tus usuarios, teniendo en cuenta el firewall de CentOS y el cifrado TLS.
Contenido
Antes de instalar FTP en CentOS 8
Para seguir esta guía de instalación de FTP en CentOS 8 necesitas cumplir estos pocos requisitos:
- Un sistema CentOS 8 actualizado.
- Acceso a consola como usuario con privilegios de sudo, o el mismo root.
- Conexión a Internet.
Ya que vamos a utilizar paquetes presentes en los repositorios de la distribución, una buena idea es actualizar la información de los repositorios en incluso atcualizar los paquetes ya instalados en el sistema:
~$ sudo yum update -y
Cómo instalar FTP en CentOS 8
Para instalar un cliente FTP en CentOS 8 si lo único que quieres es conectar a otros servicios, el paquete que estás buscando es ftp, que puedes instalar con yum:
~$ sudo yum install -y ftp
Si lo que quieres instalar es el servidor FTP para tu máquina CentOS 8, entonces optaremos por vsFTPd, y el paquete que buscamos es vsftpd:
~$ sudo yum install -y vsftpd
Tras la descarga e instalación del paquete se crea un nuevo servicio en CentOS 8, el servicio vsftpd.service o simplemente vsftpd. Este servicio no queda en ejecución, ni tampoco está activado para iniciar automáticamente en cada arranque de CentOS 8.
Debemos iniciar el servicio para poder empezar a trabajar con él, y también tenemos que activarlo para su inicio automático. Todo esto podemos hacerlo en un único comando:
~$ sudo systemctl enable --now vsftpd
Podremos comprobar el estado del servicio en cualquier momento con el comando systemctl status vsftpd
:
Configurar el firewall para el servicio FTP en CentOS 8
Por defecto el firewall de CentOS 8 no permite conexiones entrantes, así que es necesario añadir la excepción correspondiente:
~$ sudo firewall-cmd --permanent --zone=public --add-service=ftp
Para aplicar estos cambios hay que recargar la configuración del firewall:
~$ sudo firewall-cmd --reload
A partir de este momento es posible conectar al servicio FTP de CentOS 8 desde otros sistemas en red.
Permitir conexiones en modo pasivo
Opcionalmente, si quieres permitir conexiones en modo pasivo al servidor debes configurar el firewall para ello, ya que si un cliente FTP intenta conectar en modo pasivo puedes obtener el error «ftp: connect: No existe ninguna ruta hasta el `host’«.
Permitiremos la conexión en los puertos TCP del 10000 al 10100:
~$ sudo firewall-cmd --permanent --zone=public --add-port=10000-10100/tcp
Hay que recargar la configuración del firewall para aplicar los cambios y recuerda configurar estos puertos en la configuración de vsFTPd.
Cómo configurar vsFTPd en CentOS 8
A la hora de configurar el servicio FTP vsFTPd en CentOS 8 tendremos que trabajar sobre sus archivos de configuración, ubicados en la ruta /etc/vsftpd/.
El archivo principal es vsftpd.conf, ya que es donde más ajustes realizaremos.
Para que cualquier cambio que hagamos en la configuración de vsFTPd se aplique, será necesario reiniciar el servicio:
~$ sudo systemctl restart vsftpd
Modo pasivo
Es recomendable que el servidor FTP pueda funcionar en modo pasivo, para lo cual debemos determinar un número de puertos a los que desviar las transmisiones de datos de los clientes.
En este ejemplo vamos a configurar los puertos del 10000 al 10100, pero puedes especificar partiendo de otro puerto base, y con rangos mayores o menores según las expectativas de uso y número de usuarios simultáneos que tengas.
Editaremos vsftpd.conf:
~$ sudo nano /etc/vsftpd/vsftpd.conf
Y añadiremos al final este bloque:
... # MODO PASIVO pasv_enable=YES pasv_min_port=10000 pasv_max_port=10100
Guardados los cambios, hay que reiniciar el servidor vsFTPd.
Acceso anónimo
Por defecto vsFTPd no permite conexiones anónimas, que son interesantes si queremos ofrecer archivos públicamente, como los repositorios de CentOS, por ejemplo.
En primer lugar debemos saber que la ruta configurada por defecto para conexiones anónimas es /var/ftp/, así que es ahí donde debemos colocar los archivos que queremos distribuir.
Buscaremos la directiva anonymous_enable en el archivo vsftpd.conf:
... # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=NO ...
Cambiaremos su valor a YES:
anonymous_enable=YES
Tras guardar los cambios y reiniciar el servicio, podremos conectar de forma anónima.
Puedes comprobarlo accediendo desde un navegador, introduciendo la dirección IP o dominio de tu servidor CentOS 8:
Conexiones seguras SSL/TLS del servicio FTP en CentOS 8
Si vas a mantener las conexiones de los usuarios de CentOS 8 deberías protegerlas mediante cifrado. Para ello generaremos e instalaremos una clave RSA con su correspondiente certificado:
~$ sudo openssl req -newkey rsa:2048 -x509 -nodes -days 365 -keyout /etc/pki/tls/private/vsftpd.key -out /etc/pki/tls/certs/vsftpd.crt
Es interesante contestar a la pregunta sobre el «Common Name» con el dominio de la máquina CentOS 8 que se utilizará como dirección en las conexiones.
Editamos el archivo vsftpd.conf y añadimos este bloque al final del mismo:
... # SSL rsa_cert_file=/etc/pki/tls/certs/vsftpd.crt rsa_private_key_file=/etc/pki/tls/private/vsftpd.key ssl_enable=yes allow_anon_ssl=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
Básicamente activamos el cifrado SSL, configuramos las rutas de la clave RSA y el certificado que creamos anteriormente, forzamos el uso de seguridad para usuarios locales, etc.
Reiniciamos el servicio vsftpd y ahora para acceder con usuario y contraseña debemos configurar el cliente FTP con la opción de FTP explícito sobre TLS.
Las conexiones anónimas podrán funcionar tanto con TLS como sin cifrado alguno.
Acceso a usuarios locales
Por defecto el acceso a usuarios locales está habilitado, en modo lectura/escritura. De ello son responsables estas directivas de vsftpd.conf:
... local_enable=YES ... write_enable=YES ...
Si quieres permitir acceso a usuarios en modo sólo lectura, modifica el valor de write_enable a NO. Y si quieres deshabilitar por completo el acceso de usuarios, cambia el valor de local_enable a NO.
Enjaular a los usuarios locales (chroot)
En caso de permitir el acceso a usuarios locales, por defecto estos al conectar pueden salir de sus directorios personales, navegando por todo el sistema de archivos de CentOS 8. Normalmente este comportamiento no es deseable en un servidor FTP, por lo que se suele configurar el enjaulado o chroot del usuario. Editaremos el archivo vsftpd.conf y buscaremos la directiva chroot_local_user:
... #chroot_local_user=YES ...
Esta directiva está desactivada por defecto así que eliminaremos el carácter # inicial, y añadiremos la directiva allow_writeable_chroot:
... chroot_local_user=YES allow_writeable_chroot=YES ...
Ahora los usuarios pueden acceder a su directorio personal, y es el único lugar en el que podrán navegar.
Conclusión
Ahora ya sabes cómo instalar y configurar el servicio FTP en CentOS 8, de modo que podrás permitir acceso anónimo y privado, con transmisión cifrada, etc. Ya no tienes excusa para no distribuir fácilmente tus archivos.
Si tienes dudas o preguntas, sugerencias, notificaciones, etc. puedes dejar un comentario.
¡Apoya este sitio!
¿Te ha sacado de un atolladero esta guía de instalación y configuración de FTP en CentOS 8 con vsFTPd? Pues si quieres agradecérnoslo, puedes contribuir mínimamente al mantenimiento de este sitio y elaboración de más guías y tutoriales sobre CentOS 8 y otros sevicios además de FTP, y puedes hacerlo…
Invitándonos a un café:
O dejando una propina en PayPal:
¡Gracias!
Saludos. ¿Y cómo puedo subir y bajar archivos?
¿Tienes otra guía al respecto?
¡Hola, Javier! Te recomiendo algún cliente gráfico como Filezilla. Una vez establecida la conexión con el servidor el resto es trabajar con ventanas y arrastrar y soltar archivos, no tiene más misterio.
Hola, primero que todo quiero felicitarlos por sus manuales y ayudas, son excelentes. En mi caso he seguido al pie de la letra algunas configuracioes e instalaciones de LAMP y Moodle en Centos 8 en este mismo sitio. Pero en este último he experimentado algunos problemas de error, he pegado el siguiente código tras ejecutar la instrucciones de modificar el archivo vsftpd.conf para cifrado seguro, luego de guardar los cambios y recargar el servicio vsftpd, tengo esto:
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2021-02-17 17:48:08 -03; 46s ago
Process: 4414 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)
Main PID: 4185 (code=killed, signal=TERM)
feb 17 17:48:08 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon…
feb 17 17:48:08 localhost.localdomain vsftpd[4414]: 500 OOPS: SSL: cannot load RSA certificate
feb 17 17:48:08 localhost.localdomain systemd[1]: vsftpd.service: Control process exited, code=>
feb 17 17:48:08 localhost.localdomain systemd[1]: vsftpd.service: Failed with result ‘exit-code>
feb 17 17:48:08 localhost.localdomain systemd[1]: Failed to start Vsftpd ftp daemon.
Si me pueden orientar se lo agradecería. Mil gracias por compartir la información.
Hola, Mauricio. O no has creado archivo de la clave RSA, o las rutas especificadas en vsftpd.conf no son correctas. Revísalo, seguro que funcionará.
Hola. ¿Cómo puedo agregar usuarios FTP y también cómo puedo asignarles directorios específicos?
Hola, Fierroc. Añade usuarios del sistema, su directorio home será su directorio de acceso FTP.
Excelente tutorial, claro, conciso y muy adecuado a lo que estaba buscando.
Felicitaciones.
¡Me alegro de que te haya servido!