The Joomla! Community Magazine™

Joomla! Desde los permisos a la capa FTP

Escrito por | Sunday, 01 September 2013 09:00 | Publicado en Sept. 2013
Este artículo resume la primera hora de los cursos de introducción a Joomla! que imparto presencialmente. Es un poco “espeso”, ya que se tocan conceptos de arquitectura de sistemas de  los que el usuario no profesional normalmente no tiene conocimiento. Por eso trataré de ir muy despacio, ten paciencia y no te desanimes. Dibuja los ejemplos que figuran en el texto y copia las imágenes, y verás como al finalizar lo has pasado bien.
Joomla! Desde los permisos a la capa FTP Joomla! Desde los permisos a la capa FTP

AVISO: ESTE ARTÍCULO CONDENSA VARIOS MESES DE CARRERA UNIVERSITARIA. SI NO TIENES PAPEL Y LAPIZ PARA IR SIGUIENDO LOS EJEMPLOS Y MUCHA PACIENCIA, MEJOR LEE OTRO ;-)

Nota: Tocaremos algunos temas que pueden llegar a ser de difícil comprensión, (al no ser el objetivo de este artículo) por lo que para profundizar en ellos puedes dirigirte a las lecturas complementarias recomendadas al final del artículo. Si aún así tienes dudas, escríbeme contándomelas y las iremos resolviendo en artículos cortos en mi blog, o en la propia magazine si fueran del interés general.

Objetivo: entender qué es y por qué existe la capa FTP en Joomla!

Para empezar vamos a ver que son los permisos de los ficheros, ya que ellos son la base de la seguridad de los sistemas operativos multiusuario.

La forma de organizar la información en un ordenador convencional son los ficheros. Cada fichero debe tener un nombre que lo identifique. Históricamente y por convención ese nombre se suele componer de dos partes separadas por un punto, el nombre y la extensión. El primero, el nombre, nos ayuda a reconocer el uso que le damos al fichero. Mientras que la extensión nos indica el tipo de fichero que es. Algunas extensiones comunes son:

  • .txt     Fichero de texto plano
  • .odt    Fichero de texto de OpenOffice
  • .pdf    Fichero con una página ya maquetada en un formato estándar
  • .exe    Fichero ejecutable en Windows
  • .sh     Fichero de archivo por lotes ejecutable en Linux
  • .php   Fichero que contiene un programa en lenguaje php
  • .html  Fichero que contiene el código de una página html

Un tipo especial de fichero son las carpetas o directorios. Internamente el ordenador las gestiona como si de un fichero más se tratara al que le añade el atributo de que no es un fichero realmente, sino que es un contenedor virtual en el que se almacenarán una agrupación de archivos de datos y otros directorios (llamados subdirectorios al estar dentro de otro). Pero para lo que vamos a ver en este artículo el tratamiento es idéntico al de los ficheros normales.

Hay más tipos especiales de fichero, como los enlaces duros y blandos, etc… Bueno pues también para esos aplica lo que vamos a ver. Todo lo que tenga un nombre dentro de nuestro sistema operativo se comporta de la siguiente manera:

Cuando se crea el fichero y se le da un nombre, lo hace un usuario que ha entrado con su nombre y clave en su ordenador (o de forma automática si al instalar el sistema operativo solo se creó un usuario y se configuró para que entrara con ese por defecto).

Así que junto con el nombre del fichero se guarda el del usuario que lo creó, al que se le denomina propietario. Esto es MUY importante, recordarlo.

En la imagen anterior vemos que además del nombre del fichero, la fecha y hora de su creación, el indicador de si es o no un directorio y el nombre de su propietario, también aparece el nombre del grupo al que pertenece.

¿Qué quiere decir “el grupo al que pertenece”? Todos los usuarios, como mínimo, pertenecen a un grupo, al suyo propio. Cuando se crea el usuario se crea un grupo con su mismo nombre. De esa manera si un padre quisiera poder acceder a los ficheros de cada uno de sus dos hijos, pero que ellos no puedan hacer lo mismo ni con él, ni entre ellos lo primero que tendría que hacer es añadir su usuario a los grupos propios de sus hijos.

Ahora bien, el padre que es un buen padre, solo quiere ver las cosas que hacen sus hijos y no modificarlas ni borrarlas, y es aquí donde entran en escena los permisos.

Partimos de la base de que tenemos tres tipos de grupos de trabajo que afectan a un fichero. ¿Tres? Pero… ¡si solo hemos visto dos! El tipo de grupo más importante es el PROPIETARIO, el segundo por orden es el de su GRUPO y el tercer tipo de grupo… el de todos los demás usuarios que no sean ni el propietario ni los que pertenecen a su grupo, es decir el de tipo OTROS

Si nos fijamos en la primera imagen vemos que antes de cada nombre de fichero lo primero que aparece en cada línea son una serie de letras sobre las que aún no nos habíamos detenido. En el caso del fichero llamado “curso” vemos que la primera letra que se ve en su línea es la “d”, mientras que en los otros dos esa letra no aparece en la primera posición. Con un poco de imaginación vemos que la primera letra identifica si el fichero es un “DIRECTORIO” o solo un fichero.

Y a partir de ahí las siguientes NUEVE letras son… ¡los permisos!

Tres permisos para cada grupo. Tres para el Propietario (USUARIO), tres para el grupo (GRUPO) de usuarios al que queremos darle algún permiso distinto al propietario y diferenciarlo del resto de los usuarios, y otros tres para todos los demás usuarios (OTROS).

¡Ahora recordaremos nuestro binario!

Los números en base 10 (del 0 al 9) son los que usamos habitualmente, en base 2 (del 0 al 1) son los que usan los ordenadores, y la equivalencia entre ellos es muy sencilla.

En la franja azul de la imagen tenemos el “peso” es decir la equivalencia en decimal del número binario. En la primera columna de la izquierda la cifra en decimal, en la segunda segunda columna la cifra en binario y en las demás la misma cifra en binario desglosada para que podamos sumarlas más cómodamente. Así pues el número binario “0101”, tendrá una equivalencia en decimal de “0+4+0+1” es decir “5”, y el número binario “0111” será lo mismo que “0+4+2+1” en decimal, es decir “7”.

Visto esto volvemos a nuestros permisos:

Cada grupo tiene tres permisos, de izquierda a derecha: Lectura, Escritura y Ejecución.

Si marcamos el bit de ejecución (001) estaremos permitiendo que el sistema operativo “ejecute” el fichero como si de un programa se tratara. En Joomla!, esto no es necesario CASI NUNCA ya que el lenguaje con el que está construido (PHP) es el que lo interpreta y por lo tanto es el programa que interpreta nuestro código el que debe estar marcado como ejecutable.

El segundo bit (010), el que vale dos en decimal, es el de escritura. Este permiso garantiza que se pueda crear ficheros (si es un directorio) y borrar, o sobrescribir un fichero si esta puesto a uno.

El tercer bit (100), o bit de más peso, es el de lectura. Si este no está marcado el fichero no podrá ni leerse.

Las posibles combinaciones son:

  • 000 El fichero ni se ve, ni se puede modificar, ni ejecutar
  • 001 El fichero solo se puede ejecutar
  • 010 El fichero se puede modificar
  • 011 El fichero se puede modificar y es ejecutable
  • 100 El fichero solo se puede consultar
  • 101 El fichero que se puede consultar es ejecutable
  • 110 El fichero se puede consultar y modificar
  • 111 El fichero tiene acceso total.

Recuperamos el gráfico anterior y aplicamos el sentido común. El propietario podrá hacer todo con sus ficheros, es decir: “7”, los miembros de su grupo sólo podrán leerlo: “4”, igual que los demás usuarios del sistema: “4”, así que una configuración normal en joomla! para los permisos de un fichero podrá ser “744”.

Si pensamos un poco más sobre ello… el propietario nunca va a poder ejecutar el fichero, así que el primer “7” puede ser un “6”. ¿Porque no aumentamos un poco el nivel de seguridad dejándolo como “644”?

Desde luego NUNCA pondremos los permisos a “777”, ni a “666”. Ya que nunca debemos permitir que alguien distinto al propietario pueda modificar o ejecutar estos ficheros si no estamos seguros de que es necesario. En Joomla! NO ES NECESARIO NUNCA.

Ya sabemos cómo funcionan los permisos de los ficheros, pero ¿eso qué tiene que ver con la capa FTP?

Para llegar a esa respuesta necesitamos conocer cómo funciona un servidor de Internet.

Veamos la siguiente imagen:

Esta es la estructura básica de un servidor en Internet preparado para que funcione nuestro Joomla!.

El INTERNAUTA abrirá su navegador y escribirá la dirección web a la que quiere ir, por ejemplo http://magazine.joomla.org/es, lo primero que hace su ordenador es preguntar al servidor de DNS que tenga en su configuración de red a que DIRECCIÓN IP corresponde ese nombre (magazine.joomla.org/es). Su servidor de DNS, si tiene la respuesta se la devolverá al navegador, y si no la tiene la preguntará a través de la red DNS al servidor DNS maestro del dominio que queremos ver (en este caso joomla.org). En cualquier caso el navegador ya sabe que tiene que buscar a la máquina con la DIRECCION IP 72.249.159.59

Y a partir de ahí empieza la comunicación entre la IP del Internauta y la IP del servidor. ¿Pero cómo?

Todas las DIRECCIONES IP tienen lo que se llama “puertos”, que son como las puertas de los vecinos dentro de un portal de viviendas. La dirección IP sería el número del portal (Calle Mayor 10), y el puerto identificaría a cada vivienda (puerta primero derecha).

TODAS las comunicaciones TCP/ IP (que es el protocolo sobre el que funcionan los navegadores web) tienen que ir de una IP y un puerto origen a una IP y un puerto destino.

Los primeros 1024 puertos se definieron como puertos de acceso a servidores (podéis ver alguno de los más comunes en la imágen), y entre el 1025 y el 65536 como puertos de salida de clientes.

Así la IP del cliente (por ejemplo: 80.252.16.48) desde su puerto de salida 43.560 envía un paquete al servidor "magazine.joomla.org/es" (72.249.159.59) para ver una página web (puerto 80). Cuando el Servidor responde también lo hace entre esas dos direcciones y puertos. Y así los paquetes saben de dónde vienen  y adónde deben llegar.

Vale ya sabemos cómo se comunica el INTERNAUTA y el SERVIDOR, pero ¿Qué se dicen?

Ahora… atención que esto... ¡AUN SE COMPLICA MAS!

Lo primero que le pide el servidor web al navegador del internauta es el USUARIO y su GRUPO (no su clave) con el que tendrá acceso a los ficheros que están en el servidor. El 99% de nuestros navegadores responderán, “¡Venga tío que no lo sé!, dame acceso con el usuario que tengas por defecto en tu configuración de Apache”. Y el Servidor que es muy bueno… va y se lo da.

Es decir, imaginemos que al configurar nuestro servidor Apache, hemos configurado que los internautas se conecten por defecto con el usuario “apache” y el grupo “apache”, pues con esos datos se conectaran independientemente de que luego Joomla!, o la aplicación que sea, les pida un usuario para acceder a sus funcionalidades. Estamos hablando del acceso para poder ver la página desde la web.

Así que los ficheros que deban ser accesibles desde nuestro servidor web (nuestro Joomla!) deberán tener permiso de “lectura” para ese usuario configurado por defecto (apache del grupo apache), ya que en otro caso el fichero no podrá ser enviado al intérprete de PHP para su ejecución. Este no podrá saber a qué datos de la BBDD debe acceder y no podrá devolver el fichero HTML resultante de ejecutar nuestro Joomla! para que le sea enviado al navegador web internauta.

Así que resulta que el servidor web también asigna siempre un usuario y un grupo a los internautas que se le conectan... Qué cosas ¿eh?

¿Y porque la capa FTP? Me preguntas clavando tu pupila en mi pupila azul... Ya estamos más cerca de entenderlo.

Imaginar que quiero subir un fichero nuevo. El directorio donde lo quiera subir debe tener también permisos para su propietario de “escritura”. Y ¿quién será el propietario? En mi ejemplo “apache:apache”. Es decir la forma más fácil de subir una imagen, u otro fichero por la web, es que los permisos del directorio donde van a ir sean como mínimo “600”.

Pero si todos los internautas conectan con el mismo usuario y grupo. ¿Quiere esto decir que cualquiera puede subir un fichero o modificar uno que haya subido yo? EFECTIVAMENTE la “paradoja” es esa:

  1. Los ficheros del servidor web deben tener como propietario uno único para todos los internautas.

  2. Si queremos modificar o crear un fichero estos deben tener permisos de escritura.

  3. TODOS los internautas podrán modificar esos ficheros

Así que cualquier internauta que acceda por la web a un servidor que tenga a “700” (como mínimo) los permisos de sus directorios y ficheros de la zona web, puede hacer lo siguiente:/p>

  • Borrar un fichero de otro

  • Modificar un fichero de otro

  • Subir un programa ejecutable (virus, troyano, etc…) y ejecutarlo

¡Ya!, ¡Ya!, ya llegamos a la capa FTP.

Joomla! implementa un suplemento de seguridad en previsión de que el servidor en el que lo estemos corriendo no esté suficientemente bien configurado llamado CAPA FTP. Es decir que no implemente el equivalente a esa “Capa FTP” desde otro sistema para proteger de esta manera todos sus contenidos.

Que hace la capa FTP

Cuando Joomla! necesita subir un fichero del tipo que sea no lo hace por http, sino que se conecta al servidor FTP que debe contener en su espacio de disco el espacio donde tiene sus datos el servidor web (es lo normal) con el usuario y clave que le demos para ello. De esta manera tendremos los ficheros de nuestra web con propietario el usuario “ftp_user”, del grupo “ftp_user” y no podrán ser modificados NUNCA por el usuario “apache” del grupo “apache”

Así no hay ninguna manera de que un “malo” pueda saltarse nuestro Joomla! accediendo directamente al espacio donde lo alojamos y meternos en él un fichero no deseado.

Bueno… haberlas… las hay. Si el código de las extensiones que usemos tuviera alguna vulnerabilidad que le permitiera a ese malo conseguir hacerlo… Pero esa ya es otra historia.

Recordar que nuestro servidor estará mantenido por expertos en Seguridad de Sistemas y puede  estar configurado para solucionar este problema sin que tengamos que activar esta “contramedida” en nuestro Joomla!... Pero a partir de ahora, si activamos la capa FTP, o dejamos de hacerlo, será una decisión que tomemos porque entendamos lo que ello supone…

Y yo… que quieres que te diga, me parece una forma estupenda de iniciarse en el apasionante mundo de Joomla! y los Sistemas que lo soportan.

Si has llegado hasta aquí y te he aportado algo… ¡gracias por tu paciencia!

 


 

Lectura complementaria

Hypertext Transfer Protocol -- HTTP/1.1
HTTP Wikipedia en Español
FTP Wikipedia en Español
Sistema de archivos. Wikipedia en Español
Permisos de archivos. Wikipedia en Español
Permisos de archivos.ITE en Español
Usuarios y Grupos de usuarios en Linux. ITE en Español
FTP Layer. Joomla.org en Inglés
FTP Accounts details. Joomla.org en Inglés

 

Visto 2237 veces
Etiquetado como Spanish, Administrador
Pedro F. Vidal Lopez

Pedro F. Vidal Lopez

Simply... I love Open Source... I love Joomla!

I'm collaborating on projects Open Source since 1988 and with the Joomla community since 2005...

Learning English now;-)

Cambiar de idioma

¡Suscríbase!
Su correo electrónico:
Invalid Input

contribuya-articulo p