En esta entrada vamos a ver cómo instalar un servidor FTP en Fedora 30 paso a paso. Al final de esta guía tendrás un servicio FTP en tu máquina Fedora 30 capaz de transferir archivos de forma anónima o con autenticación de usuarios y con seguridad TLS.
Contenido
Antes de instalar FTP en Fedora 30
Para poder seguir esta guía de instalación del servicio FTP en Fedora 30 necesitarás partir de unos requisitos mínimos:
- Una máquina Fedora 30 actualizada.
- Acceso a consola con root o, mejor aún, con un usuario con privilegios de sudo.
- Conexión a Internet.
Si estás consultando este tutorial es porque probablemente ya cumples estos requerimientos, así que ve abriendo un terminal de línea de comandos, que empezamos a trabajar.
Cómo instalar FTP en Fedora 30
Vamos a instalar un servidor FTP en Fedora 30 desde los repositorios de la propia distribución. El servicio que hemos elegido en esta guía es vsFTPd, que se presenta como un software «muy simple» pero a la vez potente, como comprobaremos en este tutorial.
Como vamos a usar los repositorios, no está demás actualizar la información de las listas de paquetes y el software instalado:
~$ sudo yum -y update
Ya podemos descargar e instalar el paquete vsftpd con yum:
~$ sudo yum install -y vsftpd
El paquete se descargará e instalará en unos instantes, ya que no tiene dependencias.
Cómo instalar un cliente de FTP en Fedora 30
Quizás te pueda interesar disponer de un cliente de FTP en tu sistema Fedora 30. El paquete vsftpd sólo incluye el servidor, así que si necesitas un cliente de consola ligero para hacer pruebas puedes instalar el paquete ftp:
~$ sudo yum install -y ftp
El paquete ftp se descarga e instala enseguida, ya que es muy liviano y no tiene dependencias. El comando para usar el cliente es ftp.
Iniciar el servicio vsftpd en Fedora 30
Una vez instalado el servidor FTP se crea un nuevo servicio llamado vsftpd.service, o simplemente vsftpd. Hay que saber que el servicio vsftpd no queda en ejecución y tampoco está activado.
En primer lugar activamos el servidor FTP para que arranque cada vez que inicie la máquina Fedora 30:
~$ sudo systemctl enable vsftpd
Así nos aseguramos de que vsFTPd inicia junto con el sistema, pero esto es opcional si prefieres iniciar y detener el servidor FTP de modo manual.
En cualquier caso, para iniciar el servicio FTP usaremos la opción start del comando systemctl:
~$ sudo systemctl start vsftpd
Podrás comprobar el estado del servcio FTP en Fedora 30 en cualquier momento con el comando systemctl status vsftpd
:
Cómo configurar el firewall de Fedora 30 para el servicio FTP
Aunque después de las últimas operaciones el servicio vsftpd está activo y en ejecución, si haces pruebas sólo admitirá conexiones locales, debido a las restricciones del firewall de Fedora 30.
Añadiremos la correspondiente excepción y recargaremos la configuración del firewall:
~$ sudo firewall-cmd --permanent --add-service=ftp ~$ sudo firewall-cmd --reload
Puedes comprobar fácilmente que el servicio FTP es accesible desde otras máquinas a través de un navegador mediante una URL construida con el protocolo ftp:// y la dirección IP, nombre o dominio de tu sevidor Fedora 30.
Por ejemplo, la máquina en la que estamos haciendo esta guía es accesible desde el dominio fedora30.local, así que la URL ftp://fedora30.local sería válida para acceder:
Inmediatamente aparece un diálogo solicitando usuario y contraseña, lo que quiere decir que el servicio está funcionando y aceptando conexiones externas.
Cómo configurar el servidor FTP vsFTPd en Fedora 30
Para configurar el servicio vsftpd en Fedora 30 debemos trabajar principalmente sobre su archivo de configuración, que está en la ruta /etc/vsftpd/vsftpd.conf.
Cualquier modificación que hagamos en este archivo no entrará en vigor hasta que reiniciemos el servicio vsftpd. Y recalco que es reiniciar el servicio, no recargar el servicio, ya que vsFTPd, a diferencia de otros servicios, no ha sido provisto con la capacidad de recargar su configuración sin necesidad de reiniciarlo.
Para reiniciar el servicio vsftpd usaremos systemctl:
~$ sudo systemctl restart vsftpd
En principio, simplemente realizando un intento de conexión ya sabemos que el servicio FTP no admite conexiones anónimas, pero sí conexiones de los usuarios del sistema Fedora 30.
Vamos a ir jugando con las distintas posibilidades de configuración de vsftpd.
Permitir el acceso anónimo
Si quieres tener un simple servidor público de archivos, de ámbito local o a través de Internet, puede interesarte activar el acceso anónimo, ya que es muy cómodo trabajar desde un navegador para conectar.
Para hacer esto editaremos el archivo de configuración vsftpd.conf:
~$ sudo nano /etc/vsftpd/vsftpd.conf
Tenemos que buscar la directiva anonymous_enable:
... # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=NO ...
Es evidente que debemos cambiar el valor de NO a YES, peor puedes añadir un toque de calidad eliminando la solicitud de contraseña para los usuarios anónimos, agregando también la directiva no_anon_password:
... anonymous_enable=YES no_anon_password=YES ...
Hecho esto, guardamos los cambios y reiniciamos el servicio vsftpd.
Puedes comprobar que el acceso anónimo funciona conectando de nuevo desde el navegador :
Se puede observar que además de la carpeta raíz existe la típica carpeta /pub/ presente en cualquier servicio FTP público.
La ubicación de la carpeta del FTP anónimo es /var/ftp/, por lo que es ahí donde puedes ubicar los archivos que desees distribuir.
Cerrar el acceso a usuarios del sistema
Si sólo quieres permitir acceso anónimo es mejor desactivar el acceso a usuarios mediante contraseña, para evitar ataques con el objetivo de descubrir contraseñas.
Para ello editando vsftpd.conf buscaremos la directiva local_enable:
... # Uncomment this to allow local users to log in. # When SELinux is enforcing check for SE bool ftp_home_dir local_enable=YES ...
Basta cambiar YES por NO o comentar la directiva y reiniciar el servicio.
Permitir subir archivos a un usuario
Si permites que un usuario de Fedora 30 conecte al servicio FTP, por defecto podrá cargar y descargar datos (modo lectura/escritura). Quizás quieras que el usuario no pueda modificar el contenido de su directorio personal, por lo que deberías localizar la directiva write_enable:
... # Uncomment this to enable any form of FTP write command. write_enable=YES ...
Cambia el valor de YES a NO y los usuarios no podrán subir, modificar o eliminar archivos.
Enjaular a los usuarios en sus directorios personales
La configuración por defecto del acceso a usuarios del sistema les permite navegar a través de todo el sistema de archivos, según sus permisos de lectura y ejecución.
Es muy interesante, especialmente en los casos en los que los usuarios no tienen acceso a shell o línea de comandos, enjaular la conexión FTP, es decir, que sólo su carpeta personal sea visible.
Para ello busca la directiva chroot_local_user:
... #chroot_local_user=YES ...
Al estar comentada el valor por defecto es NO, así que basta en este caso con eliminar el carácter # de inicio de línea.
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
El enjaulado o chrooting no está permitido directamente, ya que si el usuario tiene permiso de escritura sobre la raíz de su propio directorio personal (lo habitual) se obtendrá el siguiente error al intentar conectar:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Si los usuarios que van a conectar por FTP no tienen acceso por consola, se cambiarían sus permisos sobre su directorio personal /home/usuario/ de modo que no puedan escribir y se les prepararía uno o varios directorios en los que sí pudieran escribir.
Esta es la típica configuración en la que el usuario tiene una cuenta para subir su página web a un servidor. Puede conectar a su cuenta, sólo verá lo que tiene en su carpeta personal, no podrá modificar nada de lo que hay en la raíz de la misma, pero sí podrá escribir en las subcarpetas existentes que se le hayan preparado.
Por ejemplo, prepararemos este tipo de configuración para el usuario chacho:
~$ sudo chmod -w /home/chacho ~$ sudo mkdir /home/chacho/www ~$ sudo chown chacho:chacho /home/chacho/www/
Con el chrooting activado, el usuario chacho accede enjaulado a su carpeta personal, sobre cuya raíz no puede hacer cambios, pero sí los puede hacer sobre la carpeta www/ que le hemos preparado.
Cómo forzar chroot con permisos de escritura en la carpeta personal
Si quieres que los usuarios accedan enjaulados pero puedan escribir en la raíz de su carpeta personal, hay que añadir además la directiva allow_writeable_chroot:
chroot_local_user=YES allow_writeable_chroot=YES
Pero corres el riesgo de que el usuario destruya archivos y carpetas importantes, cuya ubicación es precisamente la raíz de la carpeta personal.
Queda a tu elección usar una configuración u otra.
Conexión FTP segura con TLS en Fedora 30
La última configuración que vamos a ver es cómo configurar el servicio FTP para que use TLS de modo que las conexiones sean cifradas. En el caso de un servicio de FTP anónimo no tiene sentido, pero sí cuando se permiten conexiones a usuarios autenticados y sus archivos son privados.
Configurar la conexión SSL es sencillo, en primer lugar añadiremos tres directivas indicando la ubicación de los certificados que vamos a usar y activando la seguridad SSL.
Añade al final del archivo vsftpd.conf las directivas rsa_cert_file y rsa_private_key_file con las rutas a las claves pública y privada respectivamente del certificado que usarás, y la directiva ssl_enable:
... rsa_cert_file=/etc/pki/tls/certs/fedora30.local.crt rsa_private_key_file=/etc/pki/tls/private/fedora30.local.key ssl_enable=YES
Si no tienes aún la clave RSA y su certificado para cifrar las conexiones, puedes crearla e instalar con el comando openssl:
~$ sudo openssl req -newkey rsa:2048 -x509 -nodes -days 365 -keyout /etc/pki/tls/private/fedora30.local.key -out /etc/pki/tls/certs/fedora30.local.crt
Puedes dejar sin contestar las preguntas durante la generación de la clave, pero siempre es interesante indicar en «Common Name» el dominio de tu sistema Fedora 30 con el que se conectará al servicio FTP.
En cualquier caso, asegúrate de que la ubicación de las claves RSA coincide con los valores de las rutas en la configuración de vsFTPd.
Guarda los cambios y reinicia el servicio. Y si quieres usar el modo pasivo en las conexiones, es imprescindible el siguiente paso.
Modo pasivo
Ahora vamos a activar el modo pasivo. Para ello añade al final del archivo vsftpd.conf estas otras directivas:
... pasv_enable=YES pasv_min_port=21000 pasv_max_port=21050
Como hemos preparado los puertos desde el 21000 al 21050 para ser usados por el modo pasivo, necesitaremos abrirlos en el firewall:
~$ sudo firewall-cmd --permanent --add-port=21000-21050/tcp ~$ sudo firewall-cmd --reload
Al configurar tu cliente FTP, como Filezilla por ejemplo, revisa el apartado de seguridad de la conexión para indicar que intente conectar con cifrado TLS.
Conclusión
Ahora ya sabes cómo instalar y configurar un servidor FTP en Fedora 30, por lo que puedes distribuir archivos de forma pública o facilitar a los usuarios de tu servidor Fedora 30 actualizar sus archivos, como si de un servicio de hosting se tratara.
Si tienes dudas o preguntas, sugerencias, notificaciones de errores, etc. cualquier comentario siempre es bien recibido.
¡Apoya este sitio!
¿Has conseguido configurar tu servidor FTP en tu máquina Fedora 30? Si ya tienes el servicio vsftpd en funcionamiento con tu configuración deseada, quizás estés tan satisfecho que te apetezca ayudar a mantener este sitio. Cualquier mínima contribución es bienvenida, y puedes hacerlo dejando una propina de tan sólo 1 $ desde PayPal:
O, si te sientes especialmente agradecido, puedes invitarnos a un café:
¡Gracias!