FTP con CentOS 7

Hoy, voy a presentar el manual para la instalación del servicio FTP. Volvemos a CentOS 7 para montar nuestro nuevo servidor 🙂

Introducción

¿Qué es FTP?

FTP (en inglés File Transfer Protocol o Protocolo de Trasferencia de Archivos), es el protocolo que permite el intercambio de archivos entre diferentes sistemas a través de la red.

Por tanto, un servidor FTP, es el encargado de permitir el intercambio de datos entre cliente-servidor, ademas de permitir interactuar con los ficheros ubicados en el servidor, pudiendo editarlos, eliminarlos y/o modificarlos según las directivas establecidas en el servidor.

Debemos saber que el protocolo FTP, es un protocolo TCP, que usa los puertos 20 y 21, y es ofrecido por la capa de aplicación (Modelo OSI). Ademas, FTP es un servicio no seguro, aunque existen alternativas (explicadas en este post), para introducir seguridad a nuestro servicio.


¿Donde usamos FTP?

Implementamos un servidor de FTP, en cualquier estructura de red en la que sea necesario almacenar datos como, archivos, paginas web, … Y así poder disponer de ellas en cualquier momento a través de la red, y que ademas otros usuarios pueden tener acceso a ellas (si uno quiere, claro…).


¿Y el FTP seguro?

Como he comentado anteriormente, FTP se trata de un protocolo no seguro, ya que, esta optimizado para rendir a la máxima velocidad posible y, por tanto, las conexiones realizadas al servidor se trasmiten sin cifrar. Es decir, toda la información (incluida usuarios y contraseñas) enviada se encuentra en texto descifrado (texto plano) y esto posibilita que un atacante pudiera capturar este trafico y acceder al servidor y/o a la información trasmitida.


¿Y entonces, como aseguramos nuestro servidor?

Existen dos alternativas para cifrar nuestra conexión en FTP: SFTP y FTPS.

SFTP
La característica principal de este protocolo es que añade el mismo protocolo FTP a SSH. SFTP utiliza las claves de SSH para cifrar y descifrar la autentificacion y opera bajo el puerto 22.

FTPS
Este, utiliza el puerto 21 y los certificados SSL para autentificar la conexión. Este protocolo sera el que utilizamos para cifrar la conexión.


Objetivos

  • Instalar y configurar un servidor FTP estable y seguro
  • Enjaular a los usuarios
  • Habilitar conexiones anónimas de uso restringido
  • Configurar diferentes permisos para diferentes usuarios

Y por último, añadiremos la conexión cifrada en la segunda parte de este post.


¡A ello!

1.Convertirse a administrador

Vamos a trabajar como administradores del sistema, por tanto, ejecutamos el comando sudo su

2. Instalar FTP

La herramienta de software para el servicio FTP que vamos a instalar sera: Vsftpd.    Para ello ejecutamos el comando: yum install vsftpd

Una vez instalado, se creara el directorio vsftpd, ubicado en /etc, donde se encontraran los ficheros de configuración del servicio:

dir_vsftpd.PNG

3. Asignar dirección IP estática

Vamos a asignar una dirección IP estática a la tarjeta de red que ofrecerá el servicio FTP.

Ejecutamos nano /etc/sysconfig/network-scripts/ifcfg-eth0, donde “eth0” en nombre de la tarjeta de red mencionada (en nuestro caso «enp0s3»)

Editamos la linea BOOTPROTO y añadimos IPADDR Y NETMASK:

ifconfig.PNG

Como vemos, utilizaremos la @ip 172.16.0.1/16 para el servidor. No hemos configurado DNS ni Gateway, para simplificar el proceso.

Por ultimo, reiniciamos la interfaz: ifdown enp0s3 → ifup enp0s3 y comprobamos la nueva configuración: ip addr

IP.PNG

4. Preparar el entorno para los usuarios anonimos

Como podemos suponer, permitir el acceso a nuestro servidor sin logeo, es peligroso para la seguridad de nuestro sistema. Por tanto, nosotros seremos los encargados de ubicar correctamente a estos clientes y restringirles el uso del servicio.

Lo primero que haremos sera crear un directorio donde trabajaran los anónimos. Este directorio debe estar localizado en un ruta no critica para nuestro sistema. Por ejemplo, /home.

Por lo tanto, ejecutamos mkdir /home/anonimos

Una vez realizado, debemos ejecutar el siguiente comando para que CentOS reconozca este directorio como un directorio de uso publico:                                                          chcon -R -t public_content_t /home/anonimo

dir_anonimos.PNG

5. Usuarios del FTP

Además de logearnos como anónimo, nuestro FTP permitirá el acceso a través de usuario/password. Estos usuarios, tendrán cuenta en el servidor y estarán ubicados en el directorio /home.

En añadido, estos usuarios usarán una shell fantasma. Asi evitaremos que puedan acceder a la consola de nuestros sistemas. Para la creación de este shell seguimos los siguientes pasos:

1. Creamos la shell: nano /bin/ftp

shell_ftp.PNG

2. Añadimos nuestra nueva shell a la lista de shells del servidor. Para ello accedemos al fichero donde se encuentran las «shells» (nano /etc/shells) y añadimos la siguiente linea: /bin/ftp

shell.PNG

3. Por último, damos permisos de ejecución a todos los usuarios: chmod a+x /bin/ftp

Importante: Algunos tutoriales hacen uso de la shell «nologin«. Nosotros no emplearemos esta ya que existen servicios del sistema que ejecutan esta shell y, por lo tanto,  estaremos creando un grave problema de seguridad si la utilizamos.

Una vez creada la shell, añadimos nuestro nuestros primeros usuarios para el FTP, usando la siguiente comando: useradd -g ftp -d /home/usuario -s /bin/ftp usuario

nuevos_usuarios

Con el anterior comando, crearemos un usuario, que se añadira al grupo ftp, y su directorio se encontraran dentro de /ftp. Ademas, usara la shell fantasma creada anteriormente «ftp».

Y creamos las contraseñas para los respectivos usuarios: passwd usuario

Nota: Podemos comprobar que nuestros usuarios, únicamente puede iniciar sesión en FTP y en nuestro servidor NO:

comprobacion_usuariolocales.PNG

Nos queda indicarles al sistema que el directorio de los usuarios pueda ser accesible a través del FTP:

setsebool -P allow_ftpd_full_access on

full.PNG

6. Configurar FTP

Como buen administrador de sistemas, lo primero que haremos sera realizar un backup del fichero de configuración, que se encuentra ubicado en /etc/vsftpd.

Para ello ejecutamos un cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup.

Ademas, instalamos la herramienta nano, para posteriormente editar el fichero:

backup.PNG

Accedemos a él: nano /etc/vsftpd/vsftpd.conf :

ip_dhcp

Como podemos comprobar, el fichero se encuentra totalmente comentado, ya que se trata de un ejemplo para tener referencia.

En mi caso, he borrado el archivo por completo y he creado uno nuevo, con el mismo nombre.

crear_fich_conf.PNG

Comenzamos a configurar:

1. Configuraciones generales del FTP

listen = YES : Así el servicio se inicia con el sistema.

write_enable = YES : Dar permiso de escritura a todos los usuarios que se conecten al FTP.

userlist_enable=YES: Así evitamos el uso de cuentas del sistema (root, bin,adm, daemon,…) para acceder al servicio. Estas cuentas estan recogidas en el fichero: /etc/vsftpd/user_list.

dirmessage_enable=YES : Activar el mensaje de bienvenida.

ftpd_banner=«Mensaje_de_bienvenida».

pam_service_name=vsftpd : Ubicamos el fichero de configuración PAM.

xferlog_enable=YES: Como administradores de nuestro servidor, nos interesa hacer un seguimiento de los logeos. Para ello, hacemos uso del fichero xferlog, ubicado en /var/log/vsftpd.log.

2. Configurar pasivo

El modo activo tiene un grave problema de seguridad, ya queel cliente puede aceptar cualquier conexión de entrada lo que la vuelve susceptible. Por lo tanto, usaremos únicamente el modo pasivo.

pasv_enable = YES : Activamos el modo pasivo

connect_from_port_20=NO: Desactivamos la conexión por el puerto 20 (modo activo).

3. Configuración para los usuarios locales

local_enable = YES : Para poder conectarse con los usuarios locales del servidor.

user_config_dir=/etc/vsftpd/usuarios: Este parámetro nos permite personalizar los permisos para cada usuario. Haremos uso de esta directiva en el apartado 6 de este manual.

chroot_local_user = YES : Activamos el uso de cuentas locales «privilegiadas».

chroot_list_enable = YES : Sirven para que los usuarios locales puedan navegar por todo el sistema. Solo se lo permitiremos a ciertos usuarios locales con el siguiente parámetro.

chroot_list_file = /etc/vsftpd/vsftpd.chroot_list : Indicamos el fichero donde están listados los usuarios «privilegiados».

allow_writeable_chroot=YES: La siguiente directiva nos permite acceder como usuario «enjaulados» (permite la escritura del directorio).

4. Configuración para los usuarios anónimos

anonymous_enable=YES : Permitimos el acceso al FTP mediante anónimo.

anon_root=/home/anónimo : Indicamos el directorio para los usuarios anónimos.

anon_upload_enable=NO :No permitimos a los usuarios anónimos subir archivos al servidor.

conf_general

7. Permisos de los usuarios

Como he comentado, uno de nuestros objetivos es que cada uno de nuestros usuarios del FTP, tengan diferentes permisos.

Así pues, vamos establecer los permisos para cada usuario:

  • Usuario 1: Este sera el usuario de prueba para el administrador de sistemas. Por lo tanto, es el único usuario que no se hallara enjaulado en su directorio. Es decir, podrá navegar por el sistema a su antojo, crear ficheros/directorios, descargar/subir, editar…
  • Usuario 2: Este usuario se encontrara enjaulado en su directorio (/home/usu2), y ademas, tendra permisos para ver y descargar lo que tenga en su directorio.
  • Usuario 3: Este ultimo, podrá ver, descargar y subir ficheros/directorios a su directorio «jaula».

Antes de empezar, vamos a crear el directorio (mkdir /etc/vsftpd/usuarios), donde se encontraran los ficheros de configuración de permisos para cada usuario.

Empezamos:

Usuario 1 (usu1)

Únicamente lo añadimos a lista de usuarios «root». Para ello, ejecutamos nano /etc/vsftpd/vsftpd.chroot_list y añadimos su nombre, sencillo…:

chroot.PNG

Usuario 2 (usu2)

Lo primero, creamos el fichero de configuración con su nombre: nano /etc/vsftpd/usuarios/usu2

Editamos el fichero con los siguientes parámetros:

local_root=/home/usu2: Establecemos el directorio «jaula» del usuario
dirlist_enable=YES : parámetro que permite listar el contenido del directorio
download_enable=YES: Permitimos descargar contenido del directorio
write_enable=NO: Denegamos la escritura sobre el directorio, por tanto, no podrá subir contenido.

conf_usu2.PNG

Usuario 3 (usu3)

Creamos el fichero de configuración: nano /etc/vsftpd/usuarios/usu3

Redactamos los parámetros:

local_root=/home/usu3
dirlist_enable=YES
download_enable=YES
write_enable=YES: Permitimos la escritura sobre el directorio, por tanto, podrá subir contenido.

conf_usu3.PNG

8. Pruebas de contexto

Antes de comenzar con las pruebas, debemos reiniciar el servicio para que aplique todos los cambios que hemos realizado. Para ello, ejecutamos: systemctl restart vsftpd.

Y ademas, vamos a desactivar el firewall de forma temporal, ya que, no hemos creado las reglas y excepciones para que el firewall no bloquee nuestro servicio FTP, paso que realizaremos el la 2º parte de este manual (junto con el cifrado). Ejecutamos el comando: systemctl stop firewalld

parar_firewall

Listo nuestro servidor. Ahora, vamos a realizar las pruebas de contexto. Utilizaremos un sistema Ubuntu  para realizar los ejemplos mediante comandos. Posteriormente utilizaremos el programa Filezilla en Windows 7 y también utilizaremos FTP mediante el navegador:

FTP por comando (Ubuntu)

Como bien supondremos, nuestros equipos deben estar en red con el servidor. En este caso, nuestro equipo Ubuntu tendrá asignada la @ip 172.16.0.3/16:

ip_Ubuntu

Comenzamos abriendo una consola y lanzamos el siguiente comando: ftp 172.16.0.1

Usuario 1

Iniciamos sesión con usu1:

inciar_usu1

Podemos comprobar el logeo en nuestro servidor:

usu1_complogeoPNG

Como hemos mencionado anteriormente, usu1 sera el usuario de prueba para el administrador del servidor, es decir, nosotros. Por tanto, tendrá total libertad de uso del servicio…

Dicho esto, si lanzamos el comando pwd, nos dirá donde nos encontramos:

pwd_usu1

Como observamos, nos encontramos en /home/usu1. Esto quiere decir que nos encontramos en la raíz del servidor FTP, dentro del directorio /home/usu1. Por tanto, tenemos acceso al resto del sistema. Vamos a comprobarlo, cd / :

usu1_listarsistema.PNG

La siguiente captura muestra como nos hemos cambiado al directorio raíz, y ademas hemos listado todos los ficheros/directorios ubicados, en él. Como bien, sabemos, esto no debe sera así para el resto de usuarios.

Usuario 2

Para la prueba, hemos creado un par de ficheros en /home/usu2 y un directorio con otro fichero:

prueba

Vamos a logearnos como usu2, no sin antes recordar, que este usuario puede ver y descargar ficheros/directorios, y ademas, se encuentra enjaulado:

iniciar_usu2usu2_complogeoPNG

Vamos a comprobar donde se encuentra ubicado:

usu2_ubicacion

Como se puede observar el la captura, usu2 se encuentra ubicado en /. Es decir, para usu2 su raíz de trabajo es el directorio dónde lo hemos enjaulado (/home/usu2).

Vamos a intentar navegar por el servidor FTP:

usu2_pruebacd

Como vemos, no reconoce los directorios, ya que, para el servicio no existen. Una vez realizada la prueba, vamos a listar el contenido del directorio «raíz» y comprobar que podemos acceder al directorio «carpeta»:

usu2_listar

Una vez comprado que el usuario se encuentra enjaulado en su directorio, vamos a descargar el fichero «prueba2» en /home/luigi (DEL SISTEMA UBUNTU!!):

usu2_get

Comprobamos que se ha descargado:

usu2_compdescarga.PNG

Ahora, vamos a intentar subir un fichero. Para eso, he creado un fichero (luigiasir) en el escritorio de Ubuntu:

luigiasir.PNG

usu2_put

Por ultimo, solo nos queda comprobar que no podemos eliminar, crear directorio y/o eliminar directorios:

usu2_resto

Usuario 3

Tal y como hemos configurado, realizarmos la comprobación de que usu3, puede subir ficheros, eliminar y crear directorios.

Nos logeamos como usu3:

usu3_logeousu3_complogeoPNG

Esta vez tenemos un directorio vacío, por tanto vamos a subir nosotros un fichero, por ejemplo, uno creado anteriormente (luigiasir2):

usu3_put.PNG

Ahora, vamos a comprobar que podemos cambiar el nombre al fichero recién subido, luego crearemos un directorio, y eliminaremos todo por completo:

usu3_resto.PNG

 

 

 

 

 

 

Anonimo

Por último, nuestro servidor alberga la posibilidad de logearnos como anónimo, opción muy común en gran parte de los FTP que rondan la red, ya qué, es común que un usuario quiere descargar un archivo, como por ejemplo, unos drivers, sin necesidad de que este tenga un cuenta dentro del servidor.

Por tanto, nuestro usuario anónimo, únicamente podra descargar ficheros que nosotros ubicamos en su único directorio de trabajo (/home/anonimo):

Vamos a empezar logeandonos como anónimo (anonymous), sin contraseña, esta claro…:

anon_logeoanon.complogeo

Nota: El la anterior captura podemos comprobar como el fichero de log ha registrado las anteriores pruebas de contexto que hemos realizado.

Comprobamos que podemos descargar:

anon_get

Comprobamos que no podemos subir archivos/directorios:

anon_put

Ni navegar atraves del servidor:

anon_CD

Ni eliminar contenido:

anon_rmPNG

FTP mediante Filezilla y Chrome

Una vez comprobado que el servidor se encuentra accesible y que los usuarios están limitados, vamos a realizar la conexión al FTP vía Filezilla Client y mediante navegador web (Chrome)

Filezilla Client

Para logearnos mediante este sofware, nos ubicamos en «Servidor» y escribimos la @ip del FTP. Además introducimos las credenciales de inicio de sesión de algunos de los usuarios:

filezillas.PNG

Chrome

Para iniciar sesión en nuestro servidor, debemos seguir la siguiente sintaxis:

ftp://usuario:contraseña@ip_ftp

En nuestro caso:

chrome

chrome1.PNG

Si en cambio, escribimos el la barra de direcciones únicamente: ftp://172.16.0.1, accedemos como usuario anónimo.

9. Compartir es vivir!

Listo! Tenemos un servidor FTP totalmente funcional, con diferentes usuarios, permisos y nuestra cuenta anónima

Por último, deberiamos asegurar nuestro servidor. Nosotros lo haremos mediante certificados SSL (FTPS).

Y para ello, 2º parte!!

El manual completo se encuentra en la segunda parte de esta entrada, no os preocupeis… 🙂

 

4 respuestas a “FTP con CentOS 7

Add yours

Deja un comentario

Web construida con WordPress.com.

Subir ↑