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:
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:
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
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
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
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
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
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:
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
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:
Accedemos a él: nano /etc/vsftpd/vsftpd.conf :
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.
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 que, el 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.
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…:
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.
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.
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
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:
Comenzamos abriendo una consola y lanzamos el siguiente comando: ftp 172.16.0.1
Usuario 1
Iniciamos sesión con usu1:
Podemos comprobar el logeo en nuestro servidor:
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:
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 / :
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:
Vamos a logearnos como usu2, no sin antes recordar, que este usuario puede ver y descargar ficheros/directorios, y ademas, se encuentra enjaulado:
Vamos a comprobar donde se encuentra ubicado:
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:
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»:
Una vez comprado que el usuario se encuentra enjaulado en su directorio, vamos a descargar el fichero «prueba2» en /home/luigi (DEL SISTEMA UBUNTU!!):
Comprobamos que se ha descargado:
Ahora, vamos a intentar subir un fichero. Para eso, he creado un fichero (luigiasir) en el escritorio de Ubuntu:
Por ultimo, solo nos queda comprobar que no podemos eliminar, crear directorio y/o eliminar directorios:
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:
Esta vez tenemos un directorio vacío, por tanto vamos a subir nosotros un fichero, por ejemplo, uno creado anteriormente (luigiasir2):
Ahora, vamos a comprobar que podemos cambiar el nombre al fichero recién subido, luego crearemos un directorio, y eliminaremos todo por completo:
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…:
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:
Comprobamos que no podemos subir archivos/directorios:
Ni navegar atraves del servidor:
Ni eliminar contenido:
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:
Chrome
Para iniciar sesión en nuestro servidor, debemos seguir la siguiente sintaxis:
ftp://usuario:contraseña@ip_ftp
En nuestro caso:
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… 🙂
Maravilloso! :O
Me gustaLe gusta a 1 persona
Fantastico!
Me gustaMe gusta
Muchas Gracias, que genio eres
Me gustaMe gusta