Cómo instalar FTP en CentOS 7

En esta entrada vamos a ver cómo instalar FTP en CentOS 7 paso a paso, tanto instalar y configurar el servicio FTP en tu servidor o VPS CentOS, como un cliente de consola para transferencias de archivos mediante este protocolo.

Antes de instalar FTP en CentOS 7

Si quieres seguir esta breve guía de instalación y configuración de FTP en CentOS 7 con vsFTPd deberías partir de unas exigencias mínimas:

  • Una instalación actualizada de CentOS 7.
  • Acceso a consola con root o mejor con un usuario con permisos de sudo.
  • Conexión a Internet.

En el ejemplo de este tutorial accederemos a un servidor CentOS 7 mediante el dominio ficticio centos7.local, pero podemos acceder igualmente a través de su dirección IP o cualquier otro dominio local o de Internet que tengamos configurado apuntando al servidor con el que vamos a trabajar.

Cómo instalar FTP en CentOS 7

Vamos a instalar FTP en CentOS 7 utilizando el servidor vsFTPd, puesto que está incluido en los repositorios oficiales de CentOS 7. El paquete que necesitamos en esta ocasión es vfstpd y lo instalaremos con yum, pero previamente actualizaremos la información de los repositorios:

~$ sudo yum update

Ahora procedemos con la descarga e instalación del paquete:

~$ sudo yum -y install vsftpd

Tras instalar el paquete vsftpd el servicio NO arranca automáticamente ni queda configurado para iniciar con el sistema. Antes de solucionarlo, te resumo las opciones que tenemos para manejar el servicio vsftpd a través del comando systemctl:

  • enable: Activa el servicio para arrancar junto al sistema
  • disable: Desactiva el servicio para que no arranque con el sistema
  • start: Inicia el servicio
  • stop: Detiene el servicio
  • restart: Reinicia el servicio
  • status: Muestra el estado actual del servicio

A diferencia de otros servicios, vsftpd no dispone de la opción de recargar su configuración sin reiniciar el servicio (opción reload).

Para comprobar que efectivamente el servicio no está iniciado usamos, de acuerdo con la lista anterior, el comando systemctl status:

~$ systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Lo normal es que queramos iniciar el servicio y que inicie automáticamente con el sistema. Ambas acciones debemos hacerlas manualmente. Habilitamos el inicio automático de vsFTPd con CentOS 7 empleando para ello también systemctl:

~$ sudo systemctl enable vsftpd

Y a continuación lo iniciamos para empezar a trabajar con él:

~$ sudo systemctl start vsftpd

Ahora ya tenemos activo el servidor FTP a la espera de conexiones; para comprobar su estado empleamos el comando systemctl status vsftpd:

como instalar ftp en centos 7

Podemos ver que el servicio está en ejecución y activado.

Cómo instalar un cliente FTP en CentOS 7

En el caso de que queramos instalar un cliente FTP en nuestro sistema CentOS 7 tenemos disponible en los repositorios oficiales un cliente de consola estándar. Tendremos que instalar el paquete ftp con yum:

~$ sudo yum -y install ftp

Recuerda que puedes acceder al servicio FTP desde navegadores, (usando el protocolo ftp://), mediante clientes gráficos como Filezilla o con clientes de consola como el que acabamos de instalar.

Cómo configurar el firewall para el servidor FTP en CentOS 7

La instalación de FTP en CentOS 7, como cualquier otro servicio, exige algunos pasos adicionales con respecto a otros sistemas, debido a la seguridad característica de CentOS.

Ya puedes hacer pruebas con el servidor vsftpd conectando con el cliente ftp desde la propia máquina. Pero si deseas hacer pruebas desde otras máquinas, que es para lo que tiene sentido montar un servicio FTP, debemos dar un paso más.

Conviene recordar que en las instalaciones básicas de CentOS 7 el firewall viene activado. Por lo tanto debemos configurarlo para que permita conexiones entrantes al servicio FTP, que por defecto escucha en el puerto TCP/21.

Usaremos el comando firewall-cmd para establecer la excepción del firewall que permite las conexiones FTP:

~$ sudo firewall-cmd --permanent --zone=public --add-service=ftp

La configuración entrará en vigor en cuanto sea cargada por el firewall:

~$ sudo firewall-cmd --reload

Ahora las conexiones están permitidas, y la configuración es permanente.

Cómo configurar vsFTPd en CentOS 7

Para configurar configurar el servidor FTP vsFTPd en CentOS 7 debemos editar sus archivos de configuración, que se encuentran en el directorio /etc/vsftpd/. Dentro de esta carpeta está el archivo vsftpd.conf que guarda la configuración principal del servicio. Como cualquier otro servicio es necesario editarlo con permisos de root.

Cómo configurar vsftpd en CentOS 7 para acceso anónimo

Vamos a configurar el servidor FTP para acceso anónimo con las siguientes características:

  • Los usuarios no necesitarán autenticación mediante contraseña.
  • El acceso se restringirá a un lugar muy concreto del sistema de archivos.
  • El acceso será sólo en modo lectura.

Editamos /etc/vsftpd/vsftpd.conf con nuestro editor favorito:

~$ sudo nano /etc/vsftpd/vsftpd.conf

Comprobaremos que tanto las conexiones anónimas como las conexiones de usuarios del sistema están permitidas:

...
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES

# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES
...

Para un acceso anónimo exclusivo debemos desactivar el acceso a usuarios locales. Basta con comentar la cláusula local_enable para desactivarla.

Además, al acceder anónimamente aunque no es necesario emplear contraseñas se nos pide una al identificarnos. Podemos configurar un acceso más cómodo sin solicitud de contraseñas a nuestros visitantes anónimos añadiendo la cláusula no_anon_password:

...
anonymous_enable=YES
no_anon_password=YES
...
#local_enable=YES
...

Reiniciamos vsftpd y los cambios harán efecto.

~$ sudo systemctl restart vsftpd

Directorio de archivos FTP por defecto

Los usuarios anónimos acceden a un lugar alojado por defecto en /var/ftp/ del que no pueden salir. En /var/ftp/ existe una carpeta pub/ a la que sí pueden acceder.

Si quieres cambiar la ubicación de la carpeta raíz del servidor FTP debes añadir una línea como la siguiente a vsftpd.conf:

anon_root = /ruta-archivos-ftp

Tras guardar los cambios será necesario reiniciar el servicio vsftpd. En este ejemplo mantendremos la carpeta por defecto.

Adicionalmente, si tu sistema CentOS 7 tiene activada la seguridad mejorada SELinux, habrá que aplicarle un contexto especial a esta nueva ruta y a su contenido (si quieres que este contenido sea visible). Esto lo conseguiremos con el comando chcon:

~$ sudo chcon -R -t public_content_t /ruta-archivos-ftp -R

A no ser que tengas buenos motivos, no suele ser necesario cambiar la ruta por defecto, pero ya sabes cómo hacerlo.

Cómo comprobar el servicio FTP

Siguiendo con el ejemplo y manteniendo la carpeta de archivos FTP por defecto, vamos a crear algunos archivos para comprobar el acceso:

~$ cd /var/ftp/
ftp$ sudo touch welcome.txt message.txt read.me
ftp$ sudo touch pub/uno pub/dos pub/tres
ftp$

Puedes crear las carpetas que consideres necesario y copiar los archivos que quieras que estén disponibles a través del servidor FTP. Ahora vamos a probar qué tal funciona el servicio a través del navegador accediendo de forma anónima mediante la IP del servidor o su nombre de dominio:

instalar ftp en centos 7

Vemos los archivos que hemos colocado en /var/ftp/ así como la carpeta /var/ftp/pub/ a la que también podemos acceder:

como instalar y configurar el servidor ftp en centos 7
Acceso a la carpeta /pub/ del servidor FTP CentOS

Cómo configurar vsftpd para acceder con usuarios del sistema

Como vimos anteriormente, la configuración por defecto de vfstpd permite el acceso con usuarios del sistema, llevándolos directamente a su carpeta personal.

Si has seguido el tutorial, el acceso a usuarios locales ha sido desactivado, por lo que si deseamos volver a permitirlo habrá que activar la cláusula local_enable en vsftpd.conf:

...
local_enable=YES
...

Y reiniciamos el servicio. Ahora los usuarios de nuestro sistema pueden acceder por FTP a sus carpetas personales.

Pero la configuración no es del todo segura, ya que los usuarios pueden salir de su carpeta personal y navegar a través del sistema de archivos, lo cual es poco deseable en principio.

~$ ftp centos7.local
Connected to centos7.local.
220 (vsFTPd 3.0.2)
Name (centos7.local:chacho):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/chacho"
ftp> cd /boot
250 Directory successfully changed.
ftp> pwd
257 "/boot"
ftp> cd /etc
250 Directory successfully changed.
ftp> pwd
257 "/etc"
ftp> ls

...

ftp>

Como puedes ver en el ejemplo anterior, mediante comandos cd podemos acceder a prácticamente cualquier directorio del sistema de archivos, incluso listar su contenido con ls y en general realizar operaciones de lectura y escritura, siempre que existan suficientes permisos.

La configuración ideal es aquella en la que los usuarios sólo pueden acceder a sus carpetas personales para subir y bajar archivos.

Para conseguir esta configuración editaremos vsftpd.conf buscando esta línea:

...
#chroot_local_user=YES
...

Y activar la «jaula» que restringirá los movimientos del usuario a su carpeta personal descomentando la cláusula chroot_local_user. Además debemos permitir la escritura en el directorio del usuario al que le estamos haciendo chroot:

...
chroot_local_user=YES
allow_writeable_chroot=YES
...

Para activar los cambios reiniciamos el servicio vsftpd.

500 OOPS: chroot

Si tu sistema CentOS 7 tiene activada la seguridad mejorada SELinux, al intentar acceder por FTP como usuario del sistema lo más probable es que no podamos y obtengamos el mensaje de error 500 OOPS: chroot.

~$ ftp centos7.local
Connected to centos7.local.
220 (vsFTPd 3.0.2)
Name (centos7.local:chacho):
331 Please specify the password.
Password:
500 OOPS: chroot
Login failed.
ftp>

Esto es debido a que los directorios de usuario no están configurados para acceso total por FTP y SELinux lo impide. Para dar acceso a los directorios de usuario lanzaríamos en consola este comando:

~$ sudo setsebool -P ftpd_full_access on

Una vez aplicada la configuración con setsebool y sin necesidad de reiniciar el servidor vsftpd volvemos a conectar:

~$ ftp centos7.local
Connected to centos7.local.
220 (vsFTPd 3.0.2)
Name (centos7.local:chacho):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Y ya tenemos acceso en modo lectura/escritura y restringido al directorio personal para los usuarios locales.

Conclusión

Ahora que ya sabes cómo instalar FTP en CentOS 7 con el servidor vsftpd, puedes decidir si configurar acceso anónimo a cierta parte del sistema de archivos. O permitir el acceso a usuarios locales a sus carpetas y archivos personales. O ambas cosas.

Aunque si tu servidor dispone de acceso por SSH quizás no merezca la pena configurar el acceso FTP a los usuarios del sistema, puesto que tenemos mejores opciones seguras sobre SSH.

Si tienes alguna duda o pregunta, quieres avisar de algún error o sugerir algún nuevo artículo, déjame un comentario. Estaré encantado de constestarte.

¡Apoya comoinstalar.me!

Y si esta guía de instalación y configuración de FTP en CentOS 7 te ha servido o te ha solucionado algún problema o dolor de cabeza con vsftpd en tu sistema, puedes apoyarnos con una mínima aportación para ayudarnos en la tarea de hacer más y mejores tutoriales de CentOS 7 y sus servicios, invitándonos a un café:

 

O puedes dejar una propina para una CocaCola desde PayPal:

¡Gracias!

Valora esta entrada

5/5 - (1 voto)

Deja un comentario