Beruflich Dokumente
Kultur Dokumente
Apache
Unidad 1: Introducción a Apache
En este capítulo aprenderás:
el concepto de servidor web y sus funciones.
el origen y evolución del servidor web Apache2 y sus características mas relevantes.
el protocolo HTTP como conjunto de normas que regulan el mecanismo de intercambio de
mensajes entre el servidor web y el cliente web (navegador).
a utilizar los tipos MIME para la interpretación del contenido de los archivos transferidos
entre servidor y cliente.
Material complementario:
1. Actividades de la unidad. Archivo U1_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U1_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 31
Curso Mentor Apache
Introducción
Objetivos
Conocer el concepto de servidor web y cuáles son sus funciones.
Conocer los servidores web mas importantes y/o mas utilizados.
Estudiar las características mas relevantes del servidor web Apache.
Conocer el protocolo HTTP, sus funciones y diferentes versiones.
Conocer los tipos MIME y sus funciones.
Conocimientos previos
Es la primera unidad y, por lo tanto, no requiere del alumno ningún requisito previo. Únicamente tener la disponibilidad necesaria
para adquirir los conocimientos teóricos que constituirán la base de todo el curso.
Aunque la unidad parezca muy densa y con mucha información variada, es importante que se asimile correctamente.
Contenidos
Unidad 1: Introducción a Apache
A. Ubuntu y Windows
1. ¿Qué es un servidor web?
1. Objetivo y Esquema de funcionamiento
2. Acceso al servidor web
3. Comparativa entre servidores web
4. Introducción a Apache2
5. Un poco de historia
6. Características generales del servidor Apache 2
7. Apache: servidor web
8. El protocolo HTTP
9. Tipos MIME
B. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 31
Curso Mentor Apache
La wikipedia define el servidor web como:
“Un programa que implementa el protocolo HTTP (hypertext transfer protocol). Este protocolo está diseñado para transferir lo que
llamamos hipertextos, páginas web o páginas HTML (hypertext markup language): textos complejos con enlaces, figuras,
formularios, botones y objetos incrustados como animaciones o reproductores de sonidos.”
La arquitectura utilizada es cliente/servidor, es decir, el equipo cliente hace una solicitud o petición al equipo servidor, y éste atiende
dicha solicitud.
En el equipo cliente se ejecuta una aplicación llamada 'navegador o cliente web' que:
sirve de interfaz con el usuario: atiende sus peticiones, muestra los resultados de las consultas y proporciona al usuario
un conjunto de herramientas que facilitan su comunicación con el servidor.
se comunica con el servidor web: transmite las peticiones de los usuarios.
En el equipo servidor la única tarea es:
atender las peticiones recibidas desde los navegadores o clientes web y hacerlo de forma eficiente y segura. Este es
el caso de los servidores web seguros que solicitan un nombre de usuario y una contraseña para permitir el acceso sólo a
usuarios registrados y por tanto, con permiso para visualizar la página/s.
Un paso mas en la seguridad proporcionada por los servidores web se basa en el establecimiento de conexiones cifradas con el
navegador. Este nivel de seguridad es básico, por ejemplo, para las transacciones comerciales realizadas desde Internet.
3 de 31
Curso Mentor Apache
Objetivo y Esquema
Objetivo del servidor web
El objetivo de un servidor web es servir o suministrar páginas web a los clientes web o navegadores que las solicitan.
Ejemplo:
1. Un usuario desde el navegador Firefox, al hacer 'click' sobre un enlace a una página web está enviando una solicitud al
servidor web que aloja dicha página para que se la muestre (eso se llama servir la página).
2. El servidor web si la encuentra la envía y si no la encuentra devuelve al cliente un mensaje de error.
3. El cliente cuando recibe la página web interpreta el código HTML mostrando las fuentes, colores, imágenes que la
componen, etc, de forma correcta.
Pero el servidor web, además de servir páginas web HTML estáticas, también permite la ejecución de una serie scripts en
diferentes lenguajes de programación, que proporcionan dinamismo a las páginas web. Estos lenguajes son: PHP, CGI, applets de
Java, etc.
Esquema
La figura siguiente muestra el esquema de funcionamiento de un servidor web.
En ella observamos los tres elementos básicos que componen las peticiones web dinámicas:
el cliente que hace la petición
el servidor que atiende la petición
y los datos solicitados mediante la petición
4 de 31
Curso Mentor Apache
5 de 31
Curso Mentor Apache
Para que el navegador pueda llegar al servidor web (ya sea en una red local o en Internet) el servidor debe tener asignada una
dirección IP (Internet Protocol) única que identifica el equipo en la red.
Cuando el navegador hace una petición de página al servidor web utiliza un nombre que identifica al servidor y esta solicitud se
transmite a un servidor DNS. Éste resuelve el nombre y devuelve la dirección IP que corresponde al nombre.
La solicitud del navegador, entonces, se encamina al servidor web correcto.
La información que el usuario proporciona al navegador para conectar con un servidor web se llama URL (Uniform Resource
Locators).
Una URL de solicitud de un recurso consta de:
1. Protocolo a utilizar: http, https, ftp, ftps,...
2. // : hace las veces de separador
3. Servidor: es la dirección IP o el nombre del servidor (FQDN) que contiene el recurso.
4. Ruta_al_recurso: directorio y subdirectorios del sitio web donde está ubicado el recurso
5. Recurso: recurso al que se quiere acceder.
Por lo tanto una URL indica la forma de acceder a un recurso utilizando un determinado protocolo de comunicación.
Por ejemplo: la URL http://recursostic.educacion.es/observatorio/web/es/home
FQDN (Fully Qualified Domain Name, Nombre de dominio totalmente cualificado) es un nombre que incluye el nombre del equipo y
el nombre del dominio asociado a esa máquina
6 de 31
Curso Mentor Apache
Existen multitud de servidores web, pero los dos mas conocidos e importantes por sus niveles de implantación son Apache e IIS
(Internet Information Service).
Normalmente se asocia Apache a entornos Unix/GNU Linux (existen versiones de Apache para Windows) y IIS para entornos
Windows (no existen versiones para GNU Linux).
Sin entrar en detalles de las características técnicas se puede decir que:
Apache IIS
Es software libre Es software propietario (Microsoft)
Es modular Es modular a partir de la versión 6
Utilizado en los grandes servidores raíz de Internet Utilizado en entornos corporativos
La implantación de cada uno de ellos se puede ver en la figura del epígrafe Evolución.
Comprobar como el porcentaje de utilización de Apache es bastante superior al de IIS.
Evolución
La figura siguiente muestra la implantación de diferentes servidores web y su evolución en el tiempo.
7 de 31
Curso Mentor Apache
8 de 31
Curso Mentor Apache
Introducción a Apache2
¿Qué es Apache?
El servidor HTTP Apache2 es un servidor web de software libre desarrollado por la Apache Software Foundation
(ASF). El producto obtenido de este proyecto es un servidor de código fuente completo, descargable y gratuito.
La página web del proyecto es www.apache.org.
Apache2 es robusto y con un ciclo de desarrollo muy rápido gracias a la gran cantidad de colaboradores voluntarios de
que dispone.
Es también un servidor estable, eficiente, extensible y multiplataforma.
Estable: es una consecuencia de su probada robustez que impide caídas o cambios en el servidor inesperados.
Flexible y eficiente: es capaz de trabajar con el estándar HTTP/1.1 (RFC2616) y con la mayor parte de las
extensiones web que existen en la actualidad, como son los módulos PHP, SSL, CGI, SSI, proxy,...
Extensible: dispone de gran cantidad de módulos que amplían su funcionalidad.
Multiplataforma ya que está disponible para diferentes plataformas como GNU/Linux, Windows, MacOS.
Desde el año 1996 es el servidor más utilizado en Internet y es el utilizado en los sistemas GNU/Linux. En concreto, a
fecha de Marzo de 2011 más del 60% de los sitios web de Internet utilizan Apache.
9 de 31
Curso Mentor Apache
Un poco de historia
Origen de Apache
En los comienzos de Internet hablar de 'servicio web' se limitaba a la publicación de páginas en formato HTML
utilizando el protocolo HTTP sobre redes TCTP/IP.
Al poco tiempo de la aparición de la Web un grupo de personas del Centro Nacional de Actividades de
Supercomputación (National Center for Supercomputing Activities, NCSA) de la Universidad de Illinois, creó un servidor
web (HTTPd NCSA) que fue el más utilizado hasta 1994. Su principal desarrollador, Rob McCool, abandonó el NCSA y
el proyecto.
Pero a partir de aquel momento varios webmasters comenzaron a desarrollar diferentes 'parches' para el código fuente
de este servidor y mediante el correo electrónico sincronizaban sus aportaciones. De esta forma apareció el proyecto
Apache, cuyo nombre se debe a:
“A PAtCHy server”
La primera versión que aparece de Apache es la 0.6 en Abril de 1995, que tomó como punto de partida la versión
httpd 1.3 de NCSA.
El proyecto evolucionó muy rápidamente y en él también colaboraron desarrolladores de NCSA. La versión 1.0
apareció en diciembre de 1995. Y en un año pasó a ser el servidor web más utilizado en Internet a nivel mundial.
En 1998 se llegó a un acuerdo con IBM que permitió que Apache funcionara también en plataformas Windows
convirtiéndose así en una alternativa al servidor IIS (Internet Information Server).
En estos momentos se está trabajando con versiones 2.2.X, aunque todavía muchos servidores web en producción
utilizan la última versión más extendida que es la 1.3.33. La última versión de Apache es la 2.2.17 (Abril 2011).
Se recomienda utilizar la versión 2.2 ya que incluye nuevas funcionalidades (http://httpd.apache.org/docs/2.2/es/). La
página correspondiente a la documentación en castellano es la indicada.
Licencia de Apache
Respecto a la licencia de Apache 2 están disponibles sus términos en la URL http://httpd.apache.org/docs/2.2/en/license.html.
En resumen se puede decir que, la licencia:
Permite:
Descargar y usar libremente el software de Apache2, total o parcialmente, de forma personal, desde la empresa con
objetivos internos o comerciales.
Utilizar el software de Apache2 en paquetes o distribuciones que cree el usuario.
Prohibe:
Redistribuir partes del software incluido en Apache2 sin el permiso adecuado.
Requiere:
Incluir una copia de la licencia en cualquier redistribución que el usuario pueda hacer que incluya el software de Apache2.
Decir claramente que Apache pertenece a la ASF (Apache Software Foundation) en cualquier distribución que incluya el
software de Apache.
No requiere:
Incluir los fuentes del software de Apache propiamente, o de cualquier modificación que el usuario haga sobre el, en
cualquier distribución en el que pueda ser incluido.
10 de 31
Curso Mentor Apache
Enviar los cambios que el usuario hace al software a la Apache Software Foundation.
11 de 31
Curso Mentor Apache
Incluimos un resumen de las características generales del servidor Apache2. Es posible que de muchas de ellas ahora no se
entienda su significado, pero a lo largo del curso se irán 'descubriendo'.
1. Cumple el estándar HTTP/1.1
Nueva versión del protocolo HTTP que amplia su funcionalidad según se detalla en esta
unidad.
2. Configurable y extensible mediante módulos
Existe gran cantidad de módulos disponibles para Apache2 y permite la creación de
nuevos módulos por parte de usuarios programadores. En la Unidad 4 se habla
extensamente acerca de los módulos.
3. Proporciona el código fuente con licencia sin restricciones.
Es gratuito, pero ante todo es código fuente libre, lo cual permite saber en todo
momento qué estamos instalando.
4. Multiplataforma
Existen versiones tanto para Windows como para GNU/Linux. El curso contempla las
plataformas Windows 7 y GNU/Linux Ubuntu.
5. Continua actualización y desarrollo.
Un grupo de desarrolladores está continuamente revisando y corrigiendo todos los fallos
de seguridad y generales de la herramienta que van surgiendo entre versiones.
6. Bases de datos DBM para autenticación de usuarios.
Permiten la protección de documentos mediante contraseñas para una gran cantidad de
usuarios.
7. Permite crear páginas web protegidas
Mediante constraseñas con un número grande de usuarios autorizados, sin sobrecargar
el servidor.
8. Permite personalizar las respuestas a errores y problemas del servidor.
9. Múltiples directivas DirectoryIndex
10. Sin límite fijo sobre el número de Alias y redirecciones
Pueden ser declaradas en los archivos de configuración.
11. Negociación de contenido
El servidor proporciona a los clientes web de diferentes tipos los documentos con el
mejor nivel de calidad que estos clientes web pueden soportar.
12. Hosts virtuales también llamados servidores multi-alojados.
12 de 31
Curso Mentor Apache
13. Archivos logs configurables
Se puede configurar Apache2 para generar logs en el formato que se quiera.
13 de 31
Curso Mentor Apache
Actividades
Actividad 1.1
¿Que diferencia hay entre software libre y software gratuito?
Es importante diferenciar ambos términos.
Software libre (Free Software) es un software que se publica bajo la licencia GPL (General Public Licence) y debe cumplir los
siguientes requisitos:
Poder ejecutarlo con cualquier propósito.
Poder copiarlo y distribuirlo.
Poder modificarlo para que se adapte a tus necesidades o las de un tercero.
Poder mejorarlo y publicar las mejoras para ayudar a la comunidad.
Y todo esto siempre y cuando no se viole la licencia, que dice que se puede copiar, distribuir y modificar siempre que se respete la
autoría de la versión original de la obra.
Por el software libre sí se puede cobrar. Muchas empresas lo hacen, como Red-Hat, IBM, ... El témino Free hace referencia a esas
libertades que hemos mencionado no a su gratuidad.
Mas información en http://www.fsf.org/
Software gratuito (llamado normalmente Freeware) puede ser distribuido comercialmentey puede incluir en ocasiones el código
fuente. Pero este tipo de software no es libre en el mismo sentido que lo es el software libre propiamente, a menos que se
garanticen todas las libertades.
Existen muchas modalidades de freeware. En http://www.desarrolloweb.com/articulos/2460.php hay una descripción de algunas de
ellas.
Para completar la actividad puedes buscar en la web definiciones para Software privativo, Open Source y Shareware.
14 de 31
Curso Mentor Apache
Apache proporciona contenidos al cliente web o navegador como:
Páginas estáticas: es el modo más básico y antiguo, pero también es el uso más generalizado que se hace de un servidor
web. De esta forma se transfieren archivos HTML, imágenes, etc y no se requiere un servidor muy potente en lo que al
hardware se refiere.
Páginas dinámicas: la información que muestran las páginas que sirve Apache cambia continuamente ya que se obtiene a
partir de consultas a bases de datos u otras fuentes de datos. Son páginas con contenido dinámico, cambiante.
Apache facilita la generación de este tipo de contenidos ya que:
1. Dispone de soporte del protocolo HTTP/1.1 y además mantiene la compatibilidad con HTTP/1.0.
2. Permite la ejecución de scripts CGI (Common Gateway Interface) que son programas externos que se llaman desde el
propio servidor cuando una página lo necesita.
3. El CGI recibe información desde el servidor y genera como salida una página web dinámica que se visualiza en el cliente
web. Este script puede escribirse en cualquier lenguaje de programación siempre que siga las reglas del interfaz CGI.
Normalmente se utiliza Perl. Este tipo de mecanismo ya no se utiliza prácticamente y se desaconseja su uso ya que lanza
un proceso externo al servidor web por cada petición del cliente y se ralentiza. En su lugar se están utilizando los servlets.
4. Permite la creación de hosts virtuales y de esa forma atender varios sitios web en distintos dominios desde la misma
máquina.
5. Permite restringir recursos a determinados usuarios o grupos distintos de los del sistema.
6. Permite la utilización de módulos, como PHP y mod_perl, para sustituir la funcionalidad de los CGIs. Estos módulos al
estar incluidos en Apache no requieren la ejecución de un nuevo proceso por cada petición.
7. Con soporte para SSL (Secure Sockets Layer) que permite encriptación de datos y así asegura la privacidad y fiabilidad de
la comunicación web. Utiliza criptografía asimétrica y certificados digitales para intercambiar una clave de sesión simétrica.
8. Servlets y JSP en Java. Esta opción se utiliza en servidores de aplicaciones como Tomcat, Jboss, Oracle IAS,
WebSphere de IBM o BEA WebLogic. Su ventaja es la escalabilidad y la portabilidad, ya que se puede desarrollar en Java y
luego se puede ejecutar en cualquier máquina virtual compatible.
Arquitectura en capas
Un modelo muy utilizado en la actualidad es el de la arquitectura en capas. Una arquitectura en tres capas utiliza una capa:
1. de presentación que será la interfaz gráfica con la que interactúa el usuario.
2. para el servidor de aplicaciones que indicará cómo se ejecutan los procesos (modelo).
3. para guardar los datos (servidor de bases de datos).
Este modelo en capas contrasta con el modelo clásico en el que sólo existe un servidor web y un cliente web o navegador.
15 de 31
Curso Mentor Apache
La figura anterior muestra el modelo de servidor web en tres capas.
Mas información sobre la arquitectura en tres capas en www.mhproject.org.
¿Qué es un servlet?
Según la Wikipedia (http://es.wikipedia.org/wiki/Java_Servlet) los servlets son objetos que corren dentro del contexto
de un servidor web y extienden su funcionalidad. Por ejemplo, Tomcat sólo es un contenedor de servlets.
Los servlets se utilizan para manejar peticiones de cliente HTTP.
Por ejemplo, tener un servlet procesando datos enviados mediante un formulario HTML con datos relativos a una
compra electrónica. Este servlet formaría parte de un sistema de pagos on-line que accedería a una base de datos de
productos.
Un servlet es un programa que se ejecuta en un servidor web y no tiene interfaz gráfico.
El uso más común de los servlets es generar páginas web de forma dinámica a partir de los parámetros de la petición
que envíe el navegador web.
Otro uso de los servlets es reenviar peticiones a otros servidores y servlets.
Es importante conocer la diferencia entre servlet y portlet.
16 de 31
Curso Mentor Apache
Actividades
Actividad 1.2
Diferencia entre servlet y portlet
Un servlet es un programa que se ejecuta en un servidor web. El uso más común de los servlets es generar páginas web de forma
dinámica a partir de los parámetros de la petición que envíe el navegador web.
Los servlets se pueden considerar que son herederos de los antiguos CGIs. Atienden peticiones de un cliente. Por ejemplo, un
servlet puede ser el responsable de tomar los datos de un formulario HTML y enviarlos a una base de datos para su actualización.
Los portlets son componentes web basados en Java que procesan peticiones y generan contenido dinámico. Los portales usan
portlets como componentes de interfaz de usuario que proveen de una capa de presentación a los sistemas de información.
Las similitudes entre los portlets y los servlets son:
Los portlets y servlets son componentes web de J2EE.
Ambos son manejados por contenedores, que controlan su ciclo de vida y interacción.
Cada uno genera contenido dinámico siguiendo la estructura petición/respuesta.
Las diferencias entre ellos son las siguientes:
Los portlets generan fragmentos de código mientras que los servlets generan documentos completos.
A diferencia de los servlets, los portlets no vinculan directamente al URL.
Los portlets tienen un esquema de petición mas complejo, con dos tipos de petición: Action y Render.
Los portlets se adhieren a la estandarización de un conjunto de estados y modos que definen su contexto de funcionamiento
y las reglas de renderización.
Además los portlets pueden hacer otras cosas que no lo pueden hacer los servlets, como:
Los portlets tiene un mecanismo mucho más sofisticado para acceder y guardar la información de la configuración.
Los portlets tienen acceso a la información de los perfiles de los usuarios más allá de la información básica y el rol
proporcionado en la especificación del servlet.
Los portlets tienen dos formas diferentes para guardar objetos dentro de la sesión.
Algunas características que no tiene los portlets son:
Los portlets no pueden alterar el encabezado http o fijar la codificación de la respuesta.
No pueden acceder a la URL que el cliente utilizó para iniciar la petición en el portal.
http://150.185.75.30/atiwiki/index.php/PORTLETS
http://es.wikipedia.org/wiki/Java_Servlet
17 de 31
Curso Mentor Apache
El protocolo HTTP
¿Qué es el protocolo HTTP?
18 de 31
Curso Mentor Apache
Las siglas HTTP significan Hyper Text Transfer Protocol, Protocolo de Transferencia de HiperTexto.
HTTP es el protocolo usado en las transacciones de la web (www).
El hipertexto es el contenido de las páginas web, y el protocolo de transferencia es el conjunto de normas mediante
las que se envían las peticiones de acceso a una web y la respuesta de esa web.
HTTP se define como un conjunto de normas que permiten la comunicación entre el servidor y los clientes y la
transferencia de información (archivos de texto, imágenes, archivos de música, ...) entre ambos.
HTTP es un protocolo cliente/servidor cuyo funcionamiento está basado en el envío de mensajes y consiste en que:
El usuario especifica en el cliente web (navegador) la dirección de la página que quiere consultar según un
formato http://dirección[:puerto][path].
El cliente web decodifica la información de la URL diferenciando el protocolo de acceso, IP o nombre de dominio
del servidor, puerto,...
El cliente web establece una conexión (socket) con el servidor web y solicita la página (mensaje request).
El servidor envía dicha página (si no existe envía un código de error) y el cliente web interpreta el código HTML
recibido. Mensaje response del servidor.
Se cierra la conexión.
El protocolo HTTP es un protocolo sin estado, es decir, no recuerda nada relativo a conexiones anteriores a la actual.
Entonces:
Si el servidor encuentra el documento HTML solicitado por el cliente web, lo envía.
Si no existe se envía un código de error.
En ambos casos, y por ser un protocolo sin estado, al final se libera la conexión.
Por lo tanto, la conexión sólo tiene la duración correspondiente a la transmisión de la página solicitada.
Para cada objeto que se transfiere por la red se realiza una conexión independiente.
Ejemplo: si el cliente web solicita una página que incorpora varias imágenes se realizan las siguientes conexiones: una
para el documento HTML y una por cada una de las imágenes.
19 de 31
Curso Mentor Apache
Para resolver estas situaciones de “falta de memoria” del protocolo, además de recordar la información de la sesión
actual (cuya información se pierde, por ejemplo, al cerrar el navegador), se utilizan las cookies.
Las cookies son archivos de texto que se intercambian entre el cliente web y el servidor.
Cuando se solicite de nuevo un intercambio de información entre estos mismos puntos se tendrá en cuenta la
información almacenada en esos archivos.
Por ejemplo, un usuario navega por la web y va visitando páginas, validandose en unas, cambiando el idioma en
otras, haciendo búsquedas o simplemente guardando información de otras. Todas estas visitas dejan 'migas' que
identifican nuestro deambular por la web y definen nuestras preferencias y son guardadas en estos archivos de texto
llamadas cookies.
Como ejemplo de métodos disponibles en HTTP recordamos que en la versión 1.0 el cliente web podía solicitar del servidor sólo
tres operaciones:
Métodos Descripción
GET obtener información del servidor, como puede ser pedir una página al hacer un clic sobre un
enlace. Es la operación que se ejecuta cada vez que se pulsa sobre un enlace y se accede a una
página web.
POST enviar información desde el cliente web al servidor, como, por ejemplo los datos introducidos
en un formulario web.
HEAD similar a GET pero sólo se pide la cabecera de la página con información como el tamaño,
tipo, fecha de modificación, etc.
Por ejemplo, para un mensaje de petición al servidor la primera línea tiene la estructura:
que debe interpretarse como una petición (GET) del archivo index.html que está en el directorio raíz compatible con la versión 1.0
del protocolo HTTP.
Por ejemplo, para un mensaje de respuesta del servidor la primera línea tiene la estructura:
HTTP/1.0 200 OK
que debe interpretarse como la respuesta de petición servida (código 200) con éxito e indica la versión de HTTP utilizada (1.0). El
texto OK está relacionado con el código de error correspondiente. La lista de códigos está disponible en la Unidad 2.
El protocolo HTTP v. 1.1 es más potente y dispone de trece métodos diferentes.
Según sus creadores el protocolo HTTP/1.1 se puede describir como: "un protocolo de nivel de aplicación orientado a
sistemas distribuidos, para la colaboración e hypermedia. Un protocolo genérico, sin estado, orientado a objetos y que
puede ser utilizado para muchas aplicaciones, como servidores de nombres y sistemas de gestión de objetos
distribuidos, a través de las extensiones de los métodos de petición. Una característica de este protocolo es la
negociación de los tipos y representación de los datos, permitiendo que los sistemas no dependan del tipo de datos
que se utilicen".
La nueva versión de HTTP/1.1 está detallada en el RFC 2068 (http://www.faqs.org/rfcs/rfc2068.html) de Enero de 1997. Las
principales características de esta nueva versión son:
20 de 31
Curso Mentor Apache
Conexiones persistentes: aunque un documento conste de varias partes no se abre y cierra la conexión para el envío de
cada una de ellas. De esta forma se evita una sobrecarga por conexiones TCP.
Varias peticiones simultáneas: el cliente web puede hacer varias peticiones a través de una única conexión, sin tener que
esperar a que el servidor responda a cada una de ellas.
Negociación del contenido: consiste en seleccionar la representación HTTP adecuada cuando se da respuesta a una
petición, como por ejemplo, adaptarse a las preferencias del navegador utilizado.
Nuevos métodos: junto a GET, POST y HEAD aparecen los métodos
TRACE ver lo que está recibiendo el servidor
DELETE borrar un recurso del servidor
PUT almacenar recursos en el servidor
PATCH aplicar correcciones en un recurso asociado a una URL
COPY copiar recursos identificados por una URL en otro lugar
MOVE mover el recurso identificado por la URL a otro lugar
LINK establecer enlaces entre diferentes recursos
UNLINK quitar enlaces establecidos previamente por LINK
OPTIONS el cliente puede obtener las características del servidor
WRAPPED puede unir varias peticiones y puede protegerlas con un filtrado como pueda ser la encriptación.
Nuevo método de autenticación: en el que las claves de acceso van encriptadas por la red, al contrario de lo que ocurre
en HTTP 1.0. Todavía pendiente.
A pesar de todas estas mejoras introducidas por la versión 1.1 de HTTP el futuro de este protocolo se llama HTTP-NG (HTTP
Next Generation) que incluye más funcionalidades, es mas sencillo, tiene un mejor rendimiento, mejor nivel de seguridad
(encriptación), autenticación en ambos extremos de la conexión, pagos en línea (comercio electrónico), visualización obligatoria de
información sobre el objeto que se transmite (autor, copyright, licencia,...), información de registro, etc.
Se espera que la nueva versión 3 de Apache ya implemente este protocolo HTTP-NG.
21 de 31
Curso Mentor Apache
Actividades
Actividad 1.3
22 de 31
Curso Mentor Apache
Funcionamiento de GET
El funcionamiento del protocolo HTTP con la operación GET es el siguiente:
1. El cliente web envía una petición al servidor. Por ejemplo, intentamos conectarnos mediante telnet a la página de Google a
través del puerto 80. Desde una terminal ejecutar como root el siguiente ejemplo de petición y añadimos una posible
respuesta en el caso de que la orden no estuviera desactivada:
# telnet www.google.es 80
Trying 66.249.93.104...
Connected to www.google.es.
Escape character is '^]'.
GET /index.html HTTP/1.0 #Petición mediante GET
2. El servidor responde con una línea de estado, incluyendo la versión del protocolo del mensaje y si la petición tuvo éxito o
fracaso, con un código de resultado, seguido de una serie de informaciones del servidor y del elemento solicitado. Al final el
servidor rompe la conexión.
Siguiendo el ejemplo:
HTTP/1.0 302 Found
Location: http://www.google.es/index.html
Cache-Control: private
Content-Type: text/html
Server: GWS/2.1
Content-Length: 228
Date: Fri, 21 Apr 2006 15:09:01 GMT
Connection: Keep-Alive
............................. aquí vendría el código de index.html
Se puede estudiar la petición al servidor también utilizando la orden wget de la forma:
# wget www.terra.es
--2011-04-05 16:39:46-- http://www.terra.es/
Resolviendo www.terra.es... 213.4.130.210
Conectando a www.terra.es|213.4.130.210|:80... conectado.
Petición HTTP enviada, esperando respuesta... 302 Found
Ubicación: http://mov.terra.es [siguiente]
--2011-04-05 16:39:46-- http://mov.terra.es/
Resolviendo mov.terra.es... 213.4.130.231
Conectando a mov.terra.es|213.4.130.231|:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 29838 (29K) [application/xhtml+xml]
Guardando en: «index.html»
100%[======================================>] 29.838 --.-K/s en 0,05s
2011-04-05 16:39:46 (593 KB/s) - «index.html» guardado [29838/29838]
Se trata de una petición HTTP que como respuesta devuelve el OK (200) y a su vez descarga la página de inicio (index.html) de la
web indicada.
23 de 31
Curso Mentor Apache
Tipos MIME
¿Qué son los tipos MIME?
Las siglas MIME significan Multiporpose Internet Mail Extension.
Los tipos MIME son un estándar que especifican cómo debe un programa (inicialmente un programa de correo o un
navegador web) transferir los archivos multimedia (vídeo, sonido, o cualquier archivo que no esté codificado en ASCII).
Antes de la utilización de los tipos MIME cualquier archivo que no fuese texto ASCII debía codificarse a estos caracteres haciendo
uso de las herramientas Uuencode y Uudecode.
MIME adjunta un archivo de cabecera a los archivos, indicando el tipo de contenido del archivo y esto permite al servidor web y al
navegador manejar y mostrar correctamente los datos.
Por lo tanto, se puede decir que el tipo MIME indica el tipo de archivo que se está transfiriendo del servidor al cliente o navegador
web.
Los tipos MIME definen tipos (indicado antes del carácter '/') y subtipos (indicado después del carácter '/'). Por ejemplo:
el tipo MIME "text/html" define todos los archivos de texto que contienen código HTML.
el tipo "video/mpeg" define todos los archivos de vídeo almacenados en formato mpeg.
el tipo MIME "image/*" define todos los archivos de imagen almacenadas en cualquier formato: gif, jpeg, bmp, etc.
El protocolo HTTP usa tipos MIME en las cabeceras, por ejemplo para las siguientes funciones:
1. Informar al navegador el tipo de datos que está recibiendo del servidor. Esto se hace con el encabezado
Content-Type. El navegador manejará los datos de tres formas diferentes según el tipo MIME indicado en Content-Type :
Visualizar el documento, por ejemplo con tipos “text/html”.
Llamar a una aplicación externa, por ejemplo con tipos “application/pdf”.
O preguntarle al usuario qué hacer con un tipo que no se entiende, por ejemplo “image/x-fwf”.
Ejemplo: desde el navegador Mozilla Firefox abrimos Google y buscamos ITE. En el menú del navegador ir a Ver > Código fuente de la página y aparece
2. Permitir la negociación de contenido. El navegador en su petición incluye los tipos MIME que acepta. Por ejemplo, si el
navegador soporta archivos comprimidos del tipo “application/zip”, lo indica en la cabecera HTTP poniendo Allow:
application/zip.
3. Encapsular uno o más objetos dentro del cuerpo de mensaje, mediante el tipo MIME multipart. Quizás el ejemplo
más conocido sea el tipo “multipart/form-data” que sirve para enviar los datos de un formulario (mediante el método
POST).
En la edición web la referencia a los tipos MIME se puede hacer desde tres lugares diferentes:
1. Desde el servidor: que indica al navegador el tipo de datos que envía. Por ejemplo, en el servidor Apache se puede indicar
con la directiva DefaultType el tipo MIME por defecto que el servidor utilizará en los archivos que no pueda identificar su
tipo automáticamente.
DefaultType text/plain
2. Desde la página web: en ella se hace referencia a los tipos MIME a través de un enlace a un archivo externo como una hoja
de estilo:
También puede especificarse como atributo en otras etiquetas HTML, como object o form (atributo enctype).
Y también con las etiquetas <meta HTTP-EQUIV: ....> podemos hacer que la página participe en el diálogo cliente-servidor
24 de 31
Curso Mentor Apache
especificando tipos MIME.
3. Desde el navegador web: que debe poder interpretar el tipo MIME recibido desde el servidor y también puede indicar qué
tipos MIME acepta (cabecera http-accept). Si aparece */* significa que acepta cualquier tipo MIME.
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;
q=0.8,image/png,*/*;q=0.5
Este es el contenido de la variable predefinida HTTP_ACCEPT de PHP que está disponible mediante la llamada a la función
phpinfo().
http://es.wikipedia.org
http://technet.microsoft.com
http://www.iana.org
25 de 31
Curso Mentor Apache
Glosario
Glosario Unidad 1
Concepto Definición
Applet Programa en lenguaje Java que puede integrarse en páginas HTML y se ejecuta en el navegador, aunque
no puede acceder a los recursos locales, como archivos, periféricos,.... Es independiente del sistema
operativo.
Certificado digital Consta de una clave pública y un identificador que han sido firmados digitalmente por una Autoridad de
Certificación (CA). Sirve para demostrar que una clave pública pertenece a un usuario concreto.
CGI Common Gateway Interface (en inglés 'Pasarela de Interfaz Común'). Los scripts CGI son pequeños
programas alojados en el servidor web y que pueden ser utilizados desde las páginas web que se
hospeden en dicho servidor.
Criptografía asimétrica Técnica basada en el uso de dos claves, una pública y otra privada. La clave pública cifra y la
privada descifra. Cada usuario tiene dos claves. La clave privada solo la conoce el dueño de la
clave, es decir, no se envía por la red. La clave pública es conocida por otros usuarios en otras
máquinas, es decir, se publica. Estas claves se generan al mismo tiempo dando lugar a pares
biunívocos, de tal forma que la combinación pública-privada es única.
Enctype Establece el tipo MIME y el código de caracteres empleado para la transferencia de información
entre un cliente y un servidor.
FQDN Nombre de dominio totalmente cualificado.
HTTP Protocolo para transferir archivos o documentos hipertexto a través de la red. Basado en la arquitectura
cliente/servidor.
Método GET Forma de paso de parámetros mediante URL.
Método POST Forma de paso de parámetros mediante formulario (normalmente).
Navegador web Cliente que permite consultar a Servidores web y presentar la información HTML. Ejemplos: Firefox,
Konqueror, Opera, Internet Explorer, etc.
Protocolo de Es el sistema mediante el cual se envían las peticiones de acceso a una web y la respuesta de
transferencia esa web.
Sitio web Conjunto de reglas del servidor web y las páginas web que lo componen.
Software libre Software que puede ser usado, copiado, estudiado, modificado y redistribuido libremente.
URI - URL Términos equivalentes que identifican o localizan un recurso universal en la web, ya sea una
imagen, un sonido, un vídeo o la página web que integra todos estos contenidos.
26 de 31
Curso Mentor Apache
Concepto Definición
Webmaster Persona responsable o administrador de un sitio web concreto.
World Wide Web Es una agrupación de miles de páginas electrónicas basadas en textos y en todo tipo de
información multimedia, conectadas entre sí, a través de hiperenlaces, con la finalidad de
recuperar información de forma sencilla, sin que sea necesario conocer previamente su
ubicación exacta.
Otros Glosarios
27 de 31
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
28 de 31
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 1 'Introducción'
Los puntos a destacar de esta unidad son los siguientes:
1. Un servidor web es un programa que implementa el protocolo HTTP (hypertext transfer protocol). Este protocolo está
diseñado para transferir lo que llamamos hipertextos, páginas web o páginas HTML.
2. El objetivo de un servidor web es servir o suministrar páginas web a los clientes web o navegadores que las solicitan.
3. Para que el navegador pueda llegar al servidor web (ya sea en una red local o en Internet) el servidor debe tener asignada
una dirección IP (Internet Protocol) única que identifica el equipo en la red.
4. La información que el usuario proporciona al navegador para conectar con un servidor web se llama URL (Uniform Resource
Locators).
5. Apache es un servidor web con un porcentaje de utilización bastante superior al de IIS.
6. El servidor HTTP Apache2 es un servidor web de software libre desarrollado por la Apache Software Foundation (ASF). El
producto obtenido de este proyecto es un servidor de código fuente completo, descargable y gratuito.
7. HTTP se define como un conjunto de normas que permiten la comunicación entre el servidor y los clientes y la transferencia
de información (archivos de texto, imágenes, archivos de música, ...) entre ambos.
8. Los tipos MIME son un estándar que especifican cómo debe un programa (inicialmente un programa de correo o un
navegador web) transferir los archivos multimedia (vídeo, sonido, o cualquier archivo que no esté codificado en ASCII).
29 de 31
Curso Mentor Apache
Autoevaluación Unidad 1
Autoevaluación
30 de 31
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
31 de 31
Curso Mentor Apache
Apache
Unidad 2: Instalación de Apache
En este capítulo aprenderás a:
realizar la instalación del servidor web Apache2 (versión 2.2) en Ubuntu tanto desde la línea de orden
(terminal) como desde el entorno gráfico.
identificar los procesos que se lanzan en el sistema al ejecutarse, así como los puertos en los que Apache2
está escuchando peticiones de los clientes.
las opciones de arranque y parada del servicio Apache2.
identificar los directorios y archivos que contienen la configuración del servicio.
realizar la instalación del servidor web Apache2 (versión 2.2) en Windows teniendo en cuenta algunas
consideraciones.
identificar la herramienta gráfica de gestión del servidor Apache2.
identificar los directorios y archivos que contienen la configuración del servicio.
Material complementario:
1. Archivo con las actividades referidas a lo largo de la unidad. Archivo U2_Actividades.pdf
2. Mapa conceptual de la unidad. Archivo U2_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 30
Curso Mentor Apache
Introducción
Objetivos
Conocer los requerimientos del sistema para la instalación de Apache2.
Estalecer el nombre de dominio del servidor web Apache2 que se va a utilizar a lo largo del curso.
Conocimientos previos
En esta unidad abordamos la instalación de Apache2 desde cero. El único requerimiento es tener claros los conceptos sobre
servidores web, el protocolo HTTP y los tipos MIME vistos en la Unidad 1.
Contenidos
Unidad 2: Instalación de Apache
A. Ubuntu
B. Windows
C. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 30
Curso Mentor Apache
Vamos a trabajar con una versión de Ubuntu como estación independiente (standalone).
La instalación de Apache2 la haremos desde el paquete Debian GNU/Linux. Conviene asegurarse que no existe previamente en el
sistema ningún paquete de Apache2 procedente de anteriores instalaciones.
El usuario que ejecuta todo el proceso es root (#) pero podría hacerlo también un usuario 'sudo', es decir con privilegios. La instalación
de Ubuntu no proporciona contraseña para root pero un usuario 'sudo' podría pasar a ser root ejecutando en una terminal la orden
sudo su.
Actividad 2.1
Enunciado: ¿Cómo comprobarías si existe una instalación de Apache2 previa en el sistema?
Solución:
Utilizando la orden dpkg de la forma siguiente:
# dpkg -s apache2
3 de 30
Curso Mentor Apache
Instalación
Instalación desde la línea de orden
Para instalar simplemente hay que ejecutar como root (o utilizando la orden sudo desde un usuario con privilegios de administración) la
orden siguiente. Es importante fijarse en la salida de la orden ya que nos proporciona mucha información acerca de las necesidades y
la configuración del servicio.
$ sudo su
# apt-get install apache2 o # aptitude install apache2
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapr1
libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
Paquetes sugeridos:
apache2-doc apache2-suexec apache2-suexec-custom
Se instalarán los siguientes paquetes NUEVOS:
apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common
libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
0 actualizados, 9 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 3330kB de archivos.
Se utilizarán 10,1MB de espacio de disco adicional después de esta operación.
¿Desea continuar [S/n]? s
Des:1 http://lliurex.net/leia/ llx1009/main libapr1 1.3.8-1build1 [116kB]
Des:2 http://lliurex.net/leia/ llx1009/main libaprutil1 1.3.9+dfsg-3ubuntu0.10.04.1
[85,6kB]
Des:3 http://lliurex.net/leia/ llx1009/main libaprutil1-dbd-sqlite3 1.3.9+dfsg-
3ubuntu0.10.04.1 [27,3kB]
Des:4 http://lliurex.net/leia/ llx1009/main libaprutil1-ldap 1.3.9+dfsg-3ubuntu0.10.04.1
[25,3kB]
Des:5 http://lliurex.net/leia/ llx1009/main apache2.2-bin 2.2.14-5ubuntu8.4 [2622kB]
Des:6 http://lliurex.net/leia/ llx1009/main apache2-utils 2.2.14-5ubuntu8.4 [160kB]
Des:7 http://lliurex.net/leia/ llx1009/main apache2.2-common 2.2.14-5ubuntu8.4 [290kB]
Des:8 http://lliurex.net/leia/ llx1009/main apache2-mpm-prefork 2.2.14-5ubuntu8.4 [2426B]
Des:9 http://lliurex.net/leia/ llx1009/main apache2 2.2.14-5ubuntu8.4 [1484B]
Descargados 3330kB en 3s (923kB/s)
Seleccionando el paquete libapr1 previamente no seleccionado.
(Leyendo la base de datos ... 00%
269497 ficheros y directorios instalados actualmente.)
Desempaquetando libapr1 (de .../libapr1_1.3.8-1build1_i386.deb) ...
......................................................
Seleccionando el paquete apache2.2-common previamente no seleccionado.
Desempaquetando apache2.2-common (de .../apache2.2-common_2.2.14-5ubuntu8.4_i386.deb) ...
Seleccionando el paquete apache2-mpm-prefork previamente no seleccionado.
Desempaquetando apache2-mpm-prefork (de .../apache2-
mpm-prefork_2.2.14-5ubuntu8.4_i386.deb) ...
Seleccionando el paquete apache2 previamente no seleccionado.
Desempaquetando apache2 (de .../apache2_2.2.14-5ubuntu8.4_i386.deb) ...
Procesando disparadores para man-db ...
Procesando disparadores para ufw ...
Procesando disparadores para ureadahead ...
ureadahead will be reprofiled on next reboot
Configurando libapr1 (1.3.8-1build1) ...
4 de 30
Curso Mentor Apache
La instalación también se puede hacer desde el entorno gráfico utilizando la herramienta Synaptic (Sistema > Administración >
Gestor de paquetes Synaptic).
¿Apache2 en ejecución?
Si todo ha ido bien al abrir el navegador web Firefox e ir a http://localhost (donde localhost es un alias de la IP 127.0.0.1, identificada
como la interfaz de loopback) deberá aparecer una página indicando que el servidor Apache2 está instalado y ejecutándose. También
puede indicarse un nombre de dominio si se dispone de él.
Por lo tanto, al instalar Apache2 ya entra en ejecución y lanza varios procesos para atender peticiones http. Para comprobarlo ejecutar
la orden:
5 de 30
Curso Mentor Apache
Conoce cuál es tu nivel de conocimientos sobre el servidos web Apache.
6 de 30
Curso Mentor Apache
Desinstalación de Apache2
Desinstalar en Ubuntu
La desinstalación de Apache2 se puede realizar desde Synaptic seleccionando el paquete apache2 y con el botón derecho pulsar en
desinstalación completa.
Desde la línea de orden se puede utilizar la orden dpkg.
En cualquiera de los casos es importante saber que, mientras exista un archivo de configuración /etc/apache2/apache2.conf, se
puede lanzar el proceso aunque el paquete no exista. Por lo tanto, si se quiere limpiar completamente, habrá que eliminar el resto de
paquetes que arrastra la instalación de Apache2. En concreto, el responsable de la creación del directorio /etc/apache2/ es el paquete
apache2.2-common. Hay que tener en cuenta que si los subdirectorios de este directorio no están vacíos éstos no se eliminan.
Por tanto para eliminar completamente Apache2 habrá que limpiar los directorios mods-available, mods-enabled, sites-available y
eliminar también los paquetes apache2.2-common y apache2-mpm-worker.
Si se quiere conocer, en un momento determinado, cuál es la versión de Apache2 instalada, ejecutar la orden:
#apache2 -v
Server version: Apache/2.2.16 (Ubuntu)
Server built: Nov 18 2010 21:17:29
Actividad 2.2
Averiguar qué línea de orden utilizarías para eliminar completamente el paquete correspondiente a Apache2.
La orden dpkg se utiliza para instalar, desinstalar y proporcionar información sobre paquetes .deb. Hay que tener en cuenta que NO
resuelve las dependencias.
7 de 30
Curso Mentor Apache
Los servicios en Ubuntu se pueden ejecutar de tres formas dependiendo del tipo de servicio:
1. Como procesos independientes hijos del proceso init.
2. Como procesos hijos del demonio inetd (o xinetd).
3. Como procesos hijos de portmap
Por defecto la instalación de Apache2 lo hace como procesos independientes hijos de init. Es el método más seguro ya que no
requiere la ejecución permanente de otro proceso (inetd) que esté escuchando posibles peticiones http.
Actividad 2.3
Enunciado: Comprobar que el proceso generado por la ejecución del servidor Apache2, es un proceso hijo del demonio del sistema
init.
Para ello ejecutamos la orden siguiente:
Comprobamos que en la primera línea se lanza el proceso /usr/sbin/apache2 con un PID = 1240 y un PPID = 1 que es el PID del init.
Todos los demás procesos lanzados son hilos de ejecución hijos del proceso inicial de Apache2.
Las acciones que se pueden realizar sobre el servidor web Apache2 son las siguientes:
1. Arrancar Apache: ejecutar como root la orden
#/etc/init.d/apache2 start
* Starting web server apache2
y que da lugar a la ejecución del binario siguiente con las opciones por defecto:
/usr/sbin/apache2 -k start
donde:
-k indica el modo de ejecución de Apache2: arranque, parada, etc.
8 de 30
Curso Mentor Apache
Si no arranca de forma automática, para añadir las entradas adecuadas para que el servidor web se inicie en los niveles de ejecución
estándar de Debian ejecutar:
#update-rc.d apache2 defaults
2. Detener Apache: ejecutar como root la orden:
#/etc/init.d/apache2 stop
* Stopping web server
apache2 ... ...waiting
que mata todos los procesos lanzados relativos a Apache.
3. Reiniciar el servidor: cierra las conexiones activas
#/etc/init.d/apache2 restart
4. Forzar a que Apache vuelva a leer su archivo de configuración:
# /etc/init.d/apache2 reload / force-reload
Otras opciones disponibles desde Apache2 son:
Opción Descripción
-l lista los módulos compilados
-L muestra las directivas de compilación
-t realiza un chequeo del archivo de configuración (sintaxis)
9 de 30
Curso Mentor Apache
Por defecto la instalación de Apache2 intenta añadir y eliminar módulos, hosts virtuales y directivas de configuración extras de forma
tan flexible como sea posible, con el objetivo de automatizar los cambios y facilitar la administración del servidor.
Los archivos y directorios creados en /etc/apache2/ en el proceso de instalación son los siguientes:
apache2.conf es el archivo de configuración principal
conf.d/ contiene archivos de configuración asociados a módulos específicos. Los archivos de este directorio son incluidos
mediante la línea siguiente en /etc/apache2/apache2.conf:
Include /etc/apache2/conf.d
httpd.conf archivo vacío. No se usa desde Ubuntu.
mods-available/ este directorio contiene una serie de archivos .load y .conf.
Los archivos .load contienen directivas de configuración de Apache necesarias para la carga del módulo en cuestión.
El correspondiente archivo .conf contiene directivas de configuración necesarias para la utilización del módulo en
cuestión.
mods-enabled/ para activar un módulo para Apache2 es necesario crear un enlace simbólico en este directorio a los
archivos .load asociados con el módulo en mods-available/. También para .conf si existe. Por defecto la instalación de
Apache2 deja 'activados' un grupo de módulos.
ports.conf directivas de configuración que indican puertos y direcciones IP donde Apache2 escucha peticiones.
sites-available/ similar a mods-available/ excepto que contiene archivos de configuración para diversos hosts virtuales que
podrían ser utilizados en Apache2. Observar que el 'hostname' no tiene que corresponder exactamente con el nombre del
archivo. 'default' es el host por defecto.
sites-enabled/ funcionalidad similar a mods-enabled/ y contiene enlaces simbólicos a sitios de sites-available/ que el
administrador ha activado.
Herramientas disponibles:
Nombre Descripción
a2enmod activa módulos utilizando el anterior sistema de configuración
a2dismod desactiva módulos utilizando el anterior sistema de configuración
a2ensite activa sitios
a2dissite desactiva sitios
Host virtual
Módulo de Apache
10 de 30
Curso Mentor Apache
Al hacer la instalación pregunta por un nombre de dominio. Por defecto le asigna localhost. Si disponemos de un nombre de dominio
cualificado y disponemos del servicio DNS configurado podremos utilizar dicho nombre en la configuración de Apache2.
En nuestro caso y para el curso, se va a trabajar con un servidor Apache2 que atiende peticiones de clientes web dentro de su propia
red local y está situado detrás de un router que sirve DHCP. El puerto 80 sólo escucha dentro de la red local que será la
192.168.0.0/24. Una configuración muy sencilla que responde a los requerimientos del aula.
Le asignamos internamente el nombre de dominio servidor.apache2.com y para ello se ha modificar el archivo /etc/hosts de la forma
siguiente:
127.0.0.1 localhost servidor.apache2.com servidor
11 de 30
Curso Mentor Apache
El curso utiliza Windows 7 Home Premium 86 y no requiere ningún software adicional de sistema para la instalación de Apache.
Si la instalación de Apache2 es en Windows XP requiere tener instalado el Service Pack 1. Si no se dispone de él acceder a la URL
siguiente para su descarga:
http://www.microsoft.com/windowsxp/pro/downloads/servicepacks/sp1/default.asp
Para Windows utilizamos la versión 2.2.18 que soporta perfectamente PHP5.
La descarga de la versión con la que vamos a trabajar httpd-2.2.18-win32-x86-openssl-0.9.8r-r2.msi (que lleva incorporado soporte
SSL) se puede realizar desde: http://www.apache.org/dist/httpd/binaries/win32/.
La instalación de Apache2 requiere la ejecución (doble clic) del archivo descargado httpd-2.2.18-win32-x86-openssl-0.9.8r-r2.msi
1. Es importante tener en cuenta que la instalación debe hacerse desde la cuenta del Administrador del sistema o desde la cuenta de
un usuario que tenga privilegios de administrador. Sólo de esta forma el servidor web Apache2 podrá ser utilizado por cualquier usuario
existente en la máquina Windows.
2. Conviene antes de hacer la instalación, asegurarse que no se tiene otra instalación previa de Apache2. Si se tiene es preferible
desinstalarla. Probablemente no ocurra nada durante la nueva instalación pero su funcionamiento puede ser impredecible.
3.Si se instala una nueva versión de Apache2 diferente de la ya existente en el sistema, hay que tener cuidado de no instalar la
nueva versión en el mismo directorio que la anterior.
12 de 30
Curso Mentor Apache
Instalación
Instalación
La instalación de Apache2 requiere la ejecución (doble clic) del archivo descargado httpd-2.2.18-win32-x86-openssl-0.9.8r-r2.msi
La primera pantalla que se muestra es la de bienvenida, en la que se indica la versión del servidor web Apache2 que se va a instalar.
A continuación se muestran los términos de la Licencia a la que contestamos que Aceptamos (I accept).
La siguiente pantalla solicita el nombre del dominio. Si se dispone de un dominio registrado y redireccionado a la IP donde estamos
instalando Apache2 lo indicamos en Network Domain. Por ejemplo .apache2.com. Si no se dispone de dominio propio indicar
'localhost' o la IP de la máquina.
13 de 30
Curso Mentor Apache
En Server Name indicar también 'localhost' si no se dispone de dominio propio y si disponemos de dominio indicamos el nombre de
la máquina dentro de nuestro dominio (servidor.apache2.com). El nombre dado aquí sirve para que, al acceder a nuestro servidor
Apache2, se pueda eliminar la parte www y acceder directamente con apache2.com. Lo mas importante respecto a este nombre es
que se pueda resolver, es decir, que un servidor DNS pueda transformar ese nombre en una dirección IP. En nuestro caso la
resolución se hará de forma local.
Damos la dirección de correo electrónico del administrador. Esta dirección conviene que sea real ya que a ella irán a parar todos los
mensajes de error y de los visitantes de las páginas del servidor web.
Por último, en la pantalla nos pregunta si se quiere lanzar Apache2 como un servicio para todos los usuarios escuchando en el puerto
80 (For All Users, on Port 80, as a Service), que es lo mas usual y es la opción que seleccionamos. La otra opción indica que
Apache2 sólo se lanza para el usuario actual y escuchando en el puerto 8080 (Only for the Current User, on port 8080, when
started Manually). Esta opción se suele utilizar para hacer un uso personal y de pruebas del servidor Apache o si se tiene ya otro
servidor escuchando en el puerto 80.
Esta clave identifica el directorio para la directiva ServerRoot cuyo objetivo es indicar el directorio que contiene el subdirectorio conf.
Al arrancar Apache2, éste lee en este directorio el archivo de configuración httpd.conf. Si el valor de esta clave no coincide con el
valor de ServerRoot, Apache2 siempre tomará el valor de la directiva.
Si se modifica la ubicación de los archivos de configuración hay que actualizar el directorio indicado en ServerRoot para que se pueda
localizar el archivo httpd.conf.
La siguiente ventana permite seleccionar el tipo de instalación que se quiere realizar: Típica o Personalizada. Es conveniente
seleccionar la opción Personalizada (Custom) ya que, de esa forma se puede comprobar qué se va a instalar en nuestro equipo.
14 de 30
Curso Mentor Apache
La instalación muestra la ventana indicando qué se va instalar con una breve descripción y dónde se va a instalar. Permite la
modificación del directorio destino (botón Change...).
Una vez configurados todos los parámetros de la instalación, comienza propiamente la instalación (pulsar el botón Install):
15 de 30
Curso Mentor Apache
A continuación se muestra una barra de progresión de la instalación indicándonos que puede tardar varios minutos.
Como se ha seleccionado la instalación de Apache2 como servicio, al terminar la instalación arranca automáticamente Apache2 al
pulsar el botón Finish:
16 de 30
Curso Mentor Apache
¿Apache2 en ejecución?
En Windows 7 hay iconos que están por defecto 'escondidos' y para acceder a ellos hay que pulsar en la barra de tareas el botón
Comprobamos que entre los botones disponibles está el correspondiente a Apache que ha sido instalado y al finalizar la instalación es
ejecutado y por lo tanto está activo el servicio.
Dentro de la configuración de estos iconos 'escondidos' podemos indicar que se muestre siempre en la barra de tareas.
17 de 30
Curso Mentor Apache
Ahora ya podremos ver el icono de Apache2 en la barra de tareas y éste nos informará cuando está arrancado (punto interior en
verde) o parado (punto interior en rojo) el servidor web.
Pulsando sobre este botón podremos arrancar (start), parar (stop) o reiniciar (restart) el servidor web Apache2:
También podemos gestionar el servicio pulsando el botón derecho del ratón sobre el icono de Apache:
Por otra parte y en el menú que contiene Todos los programas aparece la referencia a Apache HTTP Server 2.2, tal y como se
muestra en la figura siguiente:
18 de 30
Curso Mentor Apache
La forma de comprobar que Apache2 se instaló correctamente y está funcionando en nuestra máquina es abrir un navegador e ir a la
URL http://localhost/ (o nombre de dominio si disponemos de él) y muestra la ventana siguiente que nos indica que todo está correcto:
Si no se visualiza la página de bienvenida anterior ir al subdirectorio logs y abrir el archivo error.log. Es posible que haya un problema
de resolución de nombres (configuración del servicio DNS) y, en ese caso probar con la URL http://127.0.0.1/
Si se ha indicado un puerto diferente al utilizado por defecto, hay que incluirlo en la URL de la forma
siguiente:http://127.0.0.1:8080/
NOTA.- Hay que tener en cuenta que si este puerto se ha utilizado para otro servicio, como
puede ser un cortafuegos, habrá que reconfigurar dicho servicio para que no coincidan.
y para desinstalar ejecutar:
apache2 -k uninstall
Para realizar un test del servicio ejecutar:
19 de 30
Curso Mentor Apache
apache2 -t
Para conocer la versión del servicio ejecutar:
apache2 -V
20 de 30
Curso Mentor Apache
El servidor Apache2 permite ejecutar sobre él las siguientes operaciones:
1. Arrancar Apache: opción start
Podemos lanzar el proceso desde una consola de Windows. Para ello ir a Inicio > Todos los Programas >
Accesorios > Símbolo del Sistema. y escribir en la terminal abierta
net start apache2
2. Detener Apache: opción stop
net stop apache2
3. Reiniciar el servidor: opción restart que fuerza a que Apache vuelva a leer su archivo de configuración.
net restart apache2
4. Ver los servicios activos de la máquina: opción services
5. Conexión a un servidor web remoto: opción connect que permite la administración de dicho servidor web desde la máquina
local.
6. Desconexión del servidor web remoto: opción disconnect
Desde la barra de tareas están disponibles todas estas tareas.
Desde esta ventana se tienen disponibles todas las opciones de arranque y conexión de Apache2. La figura anterior muestra que
Apache está funcionando (verde) y que es posible parar o relanzar el servicio.
La figura siguiente indica que el servicio Apache2 está desactivado.
21 de 30
Curso Mentor Apache
La figura siguiente muestra los diferentes servicios del sistema, da una breve descripción de cada uno de ellos y permite conocer sus
propiedades, así como parar o relanzar el servicio.
Permite, también, la conexión a otros equipos de la red simplemente proporcionando el nombre de la máquina a la que se quiere
conectar.
22 de 30
Curso Mentor Apache
El paso siguiente será llevar a cabo la configuración del servicio que se verá en la Unidad 3.
23 de 30
Curso Mentor Apache
La instalación de Apache2.2 en Windows 7 (XP), deja los siguientes archivos en el directorio raíz (C:\Archivos de
programa\Apache Software Foundation\Apache2.2\) de la instalación:
Directorio Descripción
bin Contiene archivos ejecutables de Apache2
conf Contiene archivos de configuración del servidor
error Archivos con los mensajes de error del servidor
htdocs Directorio raíz por defecto del servidor, en el que se almacenan los archivos disponibles
desde el servidor
icons Contiene los iconos que utiliza el servidor
logs Contiene los registros de acceso y errores del servidor
manual Contiene el manual del Apache
proxy Contiene los archivos de la caché del servidor
Archivo Descripción
httpd.conf Archivo de configuración principal, equivalente a /etc/apache2/apache2.conf en Ubuntu y
está ubicado dentro del directorio conf.
.htaccess Se puede encontrar dentro de cualquier directorio accesible desde el servidor web.
En estos archivos se sitúan las directivas de configuración. Algunas de estas directivas de configuración pueden aparecer en ambos
archivos. Si se produce esta situación siempre prevalecen las directivas incluidas en los archivos .htaccess.
El directorio conf/ contiene los archivos de configuración. Si al hacer la instalación existen archivos de configuración en este directorio
no se sobreescriben sino que pasan a llamarse nombre.default
Ya tenemos nuestro servidor web Apache2 instalado tanto en Ubuntu como en Windows 7 en el equipo que hace la función de
servidor del aula y funcionando en base a una configuración por defecto que vamos a ir adaptando a nuestras necesidades.
24 de 30
Curso Mentor Apache
Glosario
Glosario Unidad 2
Concepto Definición
Ubuntu Distribución basada en Debian GNU/Linux y desarrollada por la empresa Canonical LTD.
Hilo de ejecución Los hilos son una forma de dividir la ejecución de un programa en varias tareas que se ejecutan de forma
paralela. Un proceso puede tener uno o varios hilos de ejecución.
inetd Demonio que se mantiene a la escucha en determinados puertos y lanza determinados servicios en función
de las señales recibidas. Por ejemplo, escucha en el puerto 22 y atiende las llamadas del servicio ssh.
init Es el primer proceso que se ejecuta en un sistema UNIX/Linux. Utiliza los niveles de ejecución para
establecer los servicios que ofrece el sistema (monousuario, multiusuario,...).
localhost Interfaz de red ficticia que utiliza el sistema para comunicarse consigo mismo. Se identifica por lo e
identifica la IP 127.0.0.1.
nivel de ejecución Los sistemas operativos tienen diferentes niveles de ejecución que determinan su funcionalidad. Por
ejemplo, Ubuntu y, en general GNU/Linux tienen 6 niveles de ejecución, de los cuales el nivel 2 (es el
habitual) indica que el sistema arranca en modo multiusuario y con red. El nivel 1 es utilizado para tareas de
administración del sistema que arranca en modo monousuario y multitarea (sin red).
PID Identificador único del proceso en el sistema. Existe mientras el proceso esté 'vivo'.
portmap Demonio que convierte números de programas RPC (Llamada a Procedimiento Remoto) a números de
puertos de Internet. Utilizado para ciertos servicios, como NFS (Network File System).
PPID Identificador del proceso padre correspondiente. Todo proceso en el sistema tiene un proceso padre que es
quien lo genera o lanza.
root Usuario administrador del sistema. También se le llama Superusuario. El UID (identificador de usuario) de
root es 0.
servicio DNS Servicio que permite traducir nombres de máquinas a direcciones IP.
sudo Orden que permite a un usuario ejecutar órdenes Linux como administrador si el archivo /etc/sudoers está
configurado para ello.
synaptic Herramienta gráfica para la actualización de los paquetes del sistema desde Ubuntu, inclusión de nuevos
paquetes y borrado de los ya existentes
Otros Glosarios
25 de 30
Curso Mentor Apache
26 de 30
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
27 de 30
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 2 'Instalación'
Los puntos a destacar de esta unidad son los siguientes:
1. La instalación de Apache2 la haremos en Ubuntu desde el paquete Debian GNU/Linux. Conviene asegurarse que no existe
previamente en el sistema ningún paquete de Apache2 procedente de anteriores instalaciones.Y el usuario que ejecuta todo el
proceso es root (#) pero podría hacerlo también un usuario 'sudo', es decir con privilegios.
2. La instalación también se puede hacer desde el entorno gráfico utilizando la herramienta Synaptic
3. Los archivos y directorios creados en /etc/apache2/ en el proceso de instalación son apache2.conf como archivo de
configuración principal y conf.d/ como directorio que contiene archivos de configuración asociados a módulos específicos.
4. En Windows es importante tener en cuenta que la instalación debe hacerse desde la cuenta del Administrador del sistema o
desde la cuenta de un usuario que tenga privilegios de administrador. Sólo de esta forma el servidor web Apache2 podrá ser
utilizado por cualquier usuario existente en la máquina Windows.
5. Conviene antes de hacer la instalación, asegurarse de que no se tiene otra instalación previa de Apache2. Si se tiene es
preferible desinstalarla. Probablemente no ocurra nada durante la nueva instalación pero su funcionamiento puede ser
impredecible.
6. La instalación de Apache2.2 en Windows deja los archivos de configuración en el directorio C:\Archivos de programa\Apache
Software Foundation\Apache2.2\
7. httpd.conf es el archivo de configuración principal de Apache para Windows.
28 de 30
Curso Mentor Apache
Autoevaluación Unidad 2
Autoevaluación
29 de 30
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 2
30 de 30
Curso Mentor Apache
Apache
Unidad 3: Configuración de Apache
En este capítulo aprenderás a:
diferentes directivas generales para la configuración del servidor web Apache2.
secciones básicas con sus directivas asociadas para la configuración del servidor web Apache2 y sus características
mas relevantes.
el concepto de codificación.
a utilizar la redirección de directorios.
diferentes directivas relativas a los tipos MIME para la interpretación del contenido de los archivos transferidos entre
servidor y cliente.
detectar posibles errores de funcionamiento del servidor web.
interpretar los códigos de error del servidor web.
Material complementario:
1. Archivo con las actividades de la unidad. Archivo U3_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U3_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 40
Curso Mentor Apache
Introducción
Objetivos
Conocer las directivas de configuración de Apache2 mas relevantes.
Establecer una configuración básica para el servidor web Apache2 en ambos sistemas operativos.
Saber dónde acceder ante posibles errores de funcionamiento del servidor web.
Conocimientos previos
En esta unidad abordamos la configuración inicial de Apache2. El único requerimiento es haber realizado la instalación de Apache2
en ambos sistemas operativos y haber comprobado que el servicio está activo y esperando peticiones.
Contenidos
Unidad 3: Configuración de Apache
A. Ubuntu
1. Directivas de configuración. Archivo apache2.conf
2. Directivas globales del servidor
3. Configuración del servidor principal
4. Directorio conf.d
5. Archivo ports.conf
6. UTF-8 y codificación de documentos
7. Nombre de dominio
8. Redirección de directorios
9. Tipos MIME
10. Identificación y resolución de problemas
B. Windows
1. Configuración de Apache2 en Windows
2. Códigos de respuesta del servidor Apache2
C. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 40
Curso Mentor Apache
Nota
Hay que tener en cuenta que el capítulo contiene una descripción de las directivas de configuración del servidor web Apache2 mas
significativas. Por este mismo motivo muchas de ellas son objeto de un estudio práctico mas detallado en otros capítulos que
estudian aspectos mas concretos del servidor.
El alumno, por tanto, no debe sentirse desbordado por la exposición masiva de información. Estas directivas, junto con otras que se
irán introduciendo de forma paulatina, serán objeto de estudio a lo largo de las unidades de este curso.
3 de 40
Curso Mentor Apache
Ubuntu
Configuración: archivo apache2.conf
Consideraciones:
Es un archivo muy extenso y autoexplicativo. Todas y cada una de las directivas disponibles están ampliamente comentadas
incluyendo ejemplos de utilización.
La sintaxis del archivo de configuración de Apache2 permite indicar una directiva por línea en la que no se hace distinción
entre mayúsculas y minúsculas.
Las líneas que comienzan con el carácter '#' se consideran comentarios y se ignoran. No se pueden incluir comentarios en
una línea, después de una directiva de configuración.
Se puede chequear la sintaxis del archivo de configuración sin reiniciar el servidor utilizando la opción '-t' en línea de orden.
Desde una terminal ejecuta:
# /usr/sbin/apache2 -t
Syntax OK
En este apartado se van a estudiar las directivas de configuración más significativas.
Existe una guía de referencia rápida con la relación de todas las directivas disponibles en http://httpd.apache.org/docs/2.2
/en/mod/quickreference.html.
Cualquier modificación realizada sobre este archivo para que esté activa requiere la recarga (reload/restart/force-reload) del
demonio de Apache2 o la parada y arranque (stop/start).
Antes de efectuar modificaciones sobre el archivo de configuración original conviene hacer una copia de seguridad del
mismo.
Respecto al PATH:
si se especifican las rutas comenzando por '/' Apache2 entiende que se trata de un path absoluto.
si no comienza por '/' es un path relativo y se le añade el contenido de la directiva ServerRoot al inicio del path.
Actividad 3.1
4 de 40
Curso Mentor Apache
Directivas de configuración
Directivas de configuración
Las directivas de configuración están agrupadas en tres secciones:
1. Directivas globales que controlan las características del servidor. Se estudian en esta unidad.
2. Directivas que controlan el funcionamiento del servidor principal y valores por defecto para los servidores virtuales. Se
estudian en estea unidad agrupadas por secciones en los puntos que vemos a continuación.
3. Directivas de configuración para los servidores virtuales, que permiten que las peticiones web sean enviadas a
diferentes servidores, ya sea mediante la IP o nombre de la máquina, y sean manejadas por el mismo proceso apache. Se
estudian en la Unidad 5.
Además de estos grupos de directivas tenemos los:
1. Archivos .htaccess que permiten a los usuarios que no tienen permisos modificar la configuración y poder ejercer así algún
control sobre el comportamiento de su parte del servidor Apache. Estos archivos se estudiarán en la Unidad 4.
5 de 40
Curso Mentor Apache
ServerRoot
La directiva ServerRoot indica el directorio principal donde se encuentran todos los archivos de configuración y de trabajo del
servidor.
ServerRoot "/etc/apache2/"
PidFile
Indica el archivo en el que el servidor graba su identificador de proceso (PID).
PidFile /var/run/apache2.pid
LockFile
Establece el path a un archivo utilizado a modo de semáforo para realizar bloqueos. No suele modificarse su valor por defecto.
El PID del proceso principal del servidor se añade automáticamente al nombre del archivo.
LockFile /var/lock/apache2/accept.lock
Timeout
Determina, en segundos, el tiempo que el servidor web esperará para recibir y enviar peticiones durante la comunicación. El objetivo
es no mantener las conexiones del cliente activas indefinidamente. Por defecto:
Timeout 30
6 de 40
Curso Mentor Apache
Actividad 3.2
Son valores para los parámetros generales que no suelen modificarse en instalaciones habituales.
Indican respectivamente:
directorio donde se encuentran los archivos de configuración del servidor
archivo en el que el servidor graba su identificador de proceso (PID)
camino (path) al archivo utilizado como semáforo para realizar bloqueos
tiempo en segundos que el servidor web espera para recibir y enviar peticiones durante la comunicación
Comprobación de los valores para estas directivas en el archivo de configuración de Apache2 para Ubuntu.
Ejecutar
#apache2 -v
Server version: Apache/2.2.16 (Ubuntu)
Server built: Nov 18 2010 21:17:29
KeepAlive
Activa o desactiva {On | Off} la opción de servir más de una solicitud en la misma conexión. Por defecto está a On.
KeepAlive On
Esta directiva es interesante mantenerla en On ya que, de esa forma, se evita tener que establecer diferentes conexiones TCP para
diferentes peticiones procedentes de un mismo cliente web.
Las directivas siguientes configuran esta opción.
MaxKeepAliveRequests
Establece el número máximo de peticiones permitidas por cada conexión. En general se recomienda un valor alto. El valor 0 indica
un número ilimitado.
Requiere que este a ON la directiva KeepAlive.
Hay que tener en cuenta el ancho de banda de salida del servidor, ya que si se establece un valor elevado el tiempo de respuesta
aumentará para cada usuario.
Por defecto:
MaxKeepAliveRequests 100
KeepAliveTimeout
Indica el número de segundos que el servidor esperará la siguiente petición desde la misma conexión. Pasado este tiempo se
considerará que se ha terminado y cerrará la conexión.
Si el valor es muy pequeño algunos usuarios no podrán visualizar la página ya que el número máximo de conexiones
persistentes se ha superado.
Si se establece un valor muy grande se estarán utilizando muchos recursos de la máquina.
Por defecto:
KeepAliveTimeout 15
7 de 40
Curso Mentor Apache
8 de 40
Curso Mentor Apache
User / Group
User establece el identificador de usuario (userid) que utiliza el servidor para ejecutarse y responder a las peticiones.
El valor de User determina el tipo de acceso que tendrá el servidor web a los archivos y directorios en los que se encuentran las
páginas. Si User no puede acceder a un archivo tampoco podrá hacerlo el servidor web y, por tanto, también inaccesible al cliente
web. Por defecto:
User www-data
El proceso Apache2 padre se inicia como root y a continuación pasa al usuario www-data. El servidor debe arrancar como root. Una
vez que el servidor se ha conectado al puerto, pasa el proceso a User porque necesita un puerto por debajo de 1024 (por
defecto 80) y los puertos por debajo de 1024 están reservados para el sistema y sólo pueden ser utilizados por el User
antes de aceptar peticiones.
Group establece el identificador de grupo que utiliza el servidor para ejecutarse y responder a las peticiones. Por defecto:
Group www-data
ErrorLog
ErrorLog indica el archivo (ruta completa o path absoluto) donde se guardan los errores del servidor. En él se registra lo que
ocurre con Apache y sus errores. Por defecto:
ErrorLog /var/log/apache2/error.log
Cuando el servidor está generando errores y no sabemos a qué es debido conviene consultar este archivo.
Un ejemplo de línea de este archivo es la siguiente:
[Sun May 22 13:59:02 2011] [error] [client 58.218.199.227] File does not
exist:
/var/www/proxyheader.php
Include
Permite que se incluyan otros archivos de configuración en tiempo de ejecución. Los paths o rutas dadas de los archivos pueden ser
absolutos o relativos respecto al valor de la directiva ServerRoot.
Ejemplo:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Indica que, cuando se lance el proceso apache2 y se lea el archivo de configuración /etc/apache2/apache2.conf, al llegar a estas
dos líneas se incluirán en él, de los directorios indicados, todos los archivos cuyos nombres terminen con .load y .conf como
parte de dicho archivo de configuración.
En el ejemplo se han indicado rutas absolutas.
Alias
Permite colocar contenido web en un directorio fuera del directorio DocumentRoot.
La sintaxis es:
Alias <url-path> <recurso>
<url-path> indica la URL del contenido web
<recurso> especifica la posición del recurso en el sistema de archivos
Ejemplo:
Alias /icons/ "/usr/share/apache2/icons/"
Indica que, si esta directiva está incluida en el archivo apache2.conf, cuando se escriba /icons/ en el navegador (http://localhost
/icons/) se accederán a los recursos del sistema ubicados en el directorio /usr/share/apache2/icons/.
Actividad 3.3
9 de 40
Curso Mentor Apache
¿Cómo comprobarías cuál es el puerto por el que está escuchando el servidor web Apache2?
Solución:
La orden netstat nos dice en qué puertos está escuchando nuestra máquina y a qué servicios está atendiendo. La orden netstat con
las siguientes opciones nos mostrará el puerto para Apache2:
# netstat -atunp | grep apache2
tcp6 0 0 :::80 ESCUCHAR :::* 4239/apache2
La salida de la orden muestra que en la dirección local está escuchando en el puerto 80 para cualquier dirección externa (*).
Secciones de configuración
Existen dos tipos de secciones de configuración:
1. Las que se evalúan para cada petición que se recibe y se aplican las directivas que se incluyen en las distintas secciones
sólo a las peticiones que se adecúan a determinadas características.
Dentro de este grupo están <Directory>, <Files>, <Location>, <VirtualHost> entre otras. La sección
<VirtualHost> se verá con detalle en la Unidad 4.
2. Las secciones de tipo <IfDefine> e <IfModule> que se evalúan sólo al inicio o reinicio del servidor. Si al iniciar el
servidor las condiciones son las adecuadas, las directivas que incluyen estas secciones se aplicarán a todas las peticiones
que se reciban. Es caso contrario, esas directivas incluidas se ignoran.
Dentro del primer grupo las secciones:
¿Sabes cuál es la diferencia entre sistema de archivos y espacio web?
Sección Directory
Un nombre de directorio (ruta absoluta)
Una expresión regular
Ejemplo: líneas tomadas del archivo /etc/apache2/apache2.conf
<Directory "/usr/share/apache2/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
10 de 40
Curso Mentor Apache
</Directory>
Para poder interpretar esta sección explicamos las directivas que se pueden utilizar en la sección <Directory> y son las
siguientes:
Options
Activa/Desactiva las opciones del servidor en un determinado directorio.
¿Qué posibilidades hay?
Directiva Options Descripción
None No se permite ninguna opción.
All Se permiten todas las opciones menos MultiViews que debe activarse explícitamente
ExecCGI Se permite ejecutar scripts CGI usando mod_cgi
FollowSymlinks Permite al servidor seguir los enlaces simbólicos entre este directorio y otro donde esté el
enlace simbólico..
Indexes Permite al servidor generar un listado de los archivos disponibles de un directorio si no se
especifica el DirectoryIndex (por ejemplo, index.html). Es decir, ver el contenido del
directorio si no existe página de inicio.
MultiViews Permite negociar los contenidos con el navegador para elegir la mejor representación de
acuerdo con sus preferencias (idioma, conjunto de caracteres, codificación, ...). Utiliza el
módulo mod_negotiation.
Reglas para la directiva Options:
Si a un directorio se le pueden aplicar varias directivas Options sólo se usa la más específica, ignorándose el resto. Las opciones
no se mezclan.
1. Si todas las opciones de la directiva Options van precedidas por el símbolo '+' o '-' se mezclarán.
2. Cualquier opción precedida por '+' se añadirá a las opciones en vigor.
3. Cualquier opción precedida por '-' se eliminará.
Ejemplo
<Directory /var/www>
Options Indexes FollowSymLinks
</Directory>
<Directory /var/www/pruebas>
Options +Includes -Indexes
</Directory>
Indica que el subdirectorio /var/www/pruebas/ del directorio /var/www tiene activadas las opciones
FollowSymLinks e Includes, pero no estará activa Indexes.
AllowOverride
Permite especificar qué partes del servidor pueden ser establecidas en los archivos .htaccess.
AllowOverride Descripción
None Los archivos .htaccess son totalmente ignorados.
AuthConfig Permite el uso de directivas relacionadas con la seguridad (AuthName, AuthType,
AuyhUserFile, Require, ...). Se estudiarán en otras unidades del curso.
FileInfo Activa directivas relacionadas con MIME (mod_mime), que establecen el tipo de
11 de 40
Curso Mentor Apache
AllowOverride Descripción
IndexOptions, etc ).
Options Activa directivas que controlan opciones específicas del directorio (Options y
XbitHack).
Order
Especifica el orden en que van a procesarse las directivas deny y allow.
Allow
Especifica qué hosts pueden acceder a un directorio determinado. Puede contener 'All' (permite a todos), un nombre de dominio,
una dirección IP, una red con su máscara de red, etc.
Deny
Especifica qué hosts no pueden acceder a un directorio determinado.
Actividad 3.4
Crear un directorio llamado 'directorio' en /var/www/html/. En este directorio denegar la entrada a todo el
mundo y permitir a toda la red 192.168.1.0/24.
Solución:
<Directory /var/www/html/directorio>
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
</Directory>
Actividad 3.5
Impedir el acceso implícito al sistema de archivos
Solución:
Por defecto todo archivo accesible mediante URL Apache2 permite que dicho archivo esté disponible para el cliente web. Es lo que
se conoce como acceso implícito al sistema de archivos.
Por ejemplo, si como root se ejecuta la orden:
# ln -s / public_html
cualquier cliente web podría acceder a http://localhost/~root/ y recorrer totalmente el sistema de archivos.
12 de 40
Curso Mentor Apache
¿Qué habría que indicar en la configuración del servidor web para evitar esta posibilidad?
<Directory />
.............
Order deny,allow
Deny from all
</Directory>
Estas dos directivas impiden el acceso implícito al sistema de archivos.
A continuación, para dar acceso a las zonas del S.A. que interesa habría que incluir secciones Directory específicas. Por ejemplo,
a la parte pública de los home de usuarios lo haríamos en el archivo /etc/apache2/mods-available/userdir.conf:
<Directory /var/www/*/public_html>
......................
Order deny,allow
Allow from all
</Directory>
Sección Files
Las directivas incluidas en una sección <Files> se aplican al archivo especificado sin tener en cuenta en qué directorio se
encuentra. Es decir, la directiva <Files> limita el ámbito de aplicación de las directivas que incluye según el nombre de los
archivos.
En el ejemplo siguiente las directivas de configuración, cuando se colocan en la sección principal del archivo de configuración,
deniegan el acceso a cualquier archivo llamado privado.html sin tener en cuenta donde se encuentre.
<Files privado.html>
Order allow,deny
Deny from all
</Files>
El argumento de <Files> puede ser un nombre de archivo, o una expresión regular. Por ejemplo, para indicar que el argumento es
cualquier archivo con formato gif, jpg, jpeg o png utilizaríamos la siguiente expresión regular:
<Files ~ "\.(gif|jpe?g|png)$">
donde '?' sustituye 0 o una ocurrencia de la expresión regular anterior (1 carácter), '*' equivale a cualquier secuencia de
caracteres, '$' indica final de línea y la '\' se utiliza para escapar el carácter '.'.
Se puede utilizar la sección <FilesMatch> para trabajar con expresiones regulares.
También se pueden utilizar de forma conjunta las secciones <Directory> y <Files> para referirse a archivos que se
encuentran en un determinado lugar del sistema de archivos. Por ejemplo:
<Directory /var/www/dir1/>
<Files privado.html>
Order allow,deny
Deny from all
</Files>
</Directory>
que denegará el acceso a /var/www/dir1/privado.html y cualquier otra aparición de privado.html que se encuentre en
/var/www/dir1/ o cualquiera de sus subdirectorios.
Sección Location
La sección <Location> está relacionada con el espacio web y cambia la configuración para el contenido del espacio web. Por
ejemplo:
<Location /privado>
Order Allow,Deny
Deny from all
13 de 40
Curso Mentor Apache
</Location>
Esta configuración evita que se acceda a cualquier URL que empiece por /privado, utilizándose la palabra privado como expresión
regular. Por ejemplo se aplicaría a peticiones que comiencen o contengan /privado en su URL (http://localhost/privado123).
¿Cuándo se tienen que utilizar secciones que se apliquen sobre el sistema de archivos y cuando usar secciones que se apliquen
sobre el espacio web?.
Sección IfModule
La sección IfModule engloba directivas que se procesarán si el módulo dado como argumento se compila con Apache2.
Una de las directivas permitidas en IfModule es UserDir.
<IfModule mod_userdir.c>
Userdir directorio
</IfModule>
UserDir
UserDir indica el nombre del subdirectorio, dentro del directorio home de cada usuario, donde estarán los archivos HTML que
podrán ser servidos por Apache. Por defecto, el subdirectorio es public_html.
Por ejemplo, el servidor podría recibir la siguiente petición:
http://localhost/usuario/prueba.html
El servidor buscaría el archivo: /home/usuario/public_html/prueba.html donde /home/usuario/ es el directorio del usuario.
Hay que asegurarse que los permisos sean los adecuados:
En los directorios de usuario deben ser 755.
En el directorio public_html deben estar activados los bits de lectura (r) y ejecución (x) (0755).
Los permisos con que se servirán los archivos desde public_html deben ser 0644 por lo menos.
Sección IfDefine
IfDefine engloba directivas que serán procesadas sólo si se cumple una determinada condición (test) al iniciar el servidor.
<IfDefine [!]nombre_parametro>
</IfDefine>
IfDefine se usa para marcar directivas que son condicionales.
Las directivas que hay dentro de una sección <IfDefine> se procesan sólo si el test devuelve un resultado positivo.
Si el test produce un resultado negativo todo lo que haya entre los marcadores de comienzo y final será ignorado.
El test puede ser:
nombre-parametro: las directivas se procesan sólo si el parámetro llamado nombre-parametro está definido.
14 de 40
Curso Mentor Apache
!nombre-parametro: hace lo contrario, y procesa las directivas sólo si nombre-parametro no está definido.
El argumento nombre-parametro se define cuando se ejecuta Apache2 por la línea de órdenes con la opción -Dparametro, al iniciar
el servidor.
Ejemplo:
#apache2 -DReverseProxy ...
# en el archivo apache2.conf
<IfDefine ReverseProxy>
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/libproxy.so
</IfDefine>
Indica que se cargan los módulos mod_rewrite y libproxy, ya que, en el archivo de configuración existe la directiva
IfDefine relativa al parámetro ReverseProxy con el que se ha lanzado la ejecución de Apache (-D).
15 de 40
Curso Mentor Apache
Directorio conf.d
Ajustes de la configuración
El directorio conf.d contiene ajustes y configuraciones específicas del administrador.
Se puede hacer un ajuste en la configuración sin modificar el archivo principal de configuración utilizando un archivo con extensión
*.conf dentro del directorio /etc/apache2/conf.d/.
Por ejemplo, queremos añadir un Alias para un directorio (que suponemos que existe y tiene contenido) localizado en
/var/ftp/pub/ y queremos visualizarlo como el directorio /pub/ en Apache2.
Normalmente se utilizan los Alias para asociar direcciones URL con directorios que no pertenecen al directorio DocumentRoot.
Para ello creamos un archivo que llamaríamos, por ejemplo, /etc/apache2/conf.d/aliases.conf con el siguiente
contenido:
Alias /pub /var/ftp/pub
Al acceder hacia este nuevo directorio virtual con el navegador vemos que no está permitido el acceso. Para poder acceder deberá
haber un documento índice en el interior (index.html, index.php, etc), o bien, que dicho directorio sea configurado para mostrar el
contenido del siguiente modo:
<Directory "/var/ftp/pub">
Options Indexes Includes FollowSymLinks
AllowOverride all
</Directory>
La directiva:
Indexes indica que se deberá mostrar el contenido del directorio.
FollowSymLinks posibilita la colocación de enlaces simbólicos dentro del directorio, los cuales se seguirán.
Includes especifica que se permite la utilización de los SSI (Server Side Includes) que posibilitan utilizar funciones como
autenticación.
AllowOverrride permite utilizar archivos .htaccess.
Reiniciar o recargar Apache2 y acceder hacia http://localhost/pub/ con el navegador. Comprobar el resultado.
16 de 40
Curso Mentor Apache
Archivo ports.conf
¿Qué contiene?
El archivo ports.conf contiene la información necesaria para que Apache2 escuche en direcciones IP y puertos específicos.
Cuando Apache2 se inicia comienza a esperar peticiones entrantes en determinados puertos y direcciones de la máquina en la que
se está ejecutando. Sin embargo, si se quiere limitar la escucha a un determinado puerto (o varios), en unas determinadas
direcciones, o en una combinación de ambos, hay que especificarlo.
Esto se puede, además, combinar con la posibilidad de usar hosts virtuales, funcionalidad con la que un servidor Apache puede
responder a peticiones en diferentes direcciones IP, diferentes nombres de hosts y diferentes puertos.
Directivas asociadas:
Listen
La directiva Listen indica al servidor que acepte peticiones entrantes solamente en los puertos y en las combinaciones de puertos
y direcciones IP que se especifiquen.
Si sólo se especifica un número de puerto en la directiva Listen el servidor escuchará en ese puerto, a través de todas las
interfaces de red de la máquina.
Si se especifica una dirección IP y un puerto, el servidor escuchará solamente en la interfaz de red a la que pertenezca esa
dirección IP y solamente en el puerto indicado.
Se pueden usar varias directivas Listen para especificar varias direcciones IP y puertos de escucha. El servidor responderá a las
peticiones de todas las direcciones y puertos que se incluyan.
Por ejemplo, para hacer que el servidor acepte conexiones tanto en el puerto 80 como en el puerto 8000, se puede usar:
Listen 80
Listen 8000
Para hacer que el servidor acepte conexiones en dos interfaces de red y puertos específicos, usar
Listen 192.168.1.1:80
Listen 192.168.1.5:8000
17 de 40
Curso Mentor Apache
En ocasiones los documentos HTML no se muestran correctamente por tener problemas respecto al tipo de codificación utilizada
(UTF-8, ISO-8859-1, etc.) y, por ejemplo, los caracteres latinos no aparecen correctamente.
UTF-8 (8-bit Unicode Transformation Format) es una codificación de caracteres de longitud variable para Unicode creado por Rob
Pike y Ken Thompson.
UTF-8 usa grupos de bytes para representar el estándar de Unicode para los alfabetos de muchos de los lenguajes del mundo.
UTF-8 es especialmente útil para la transmisión sobre sistemas de correo de 8 bits. (es.wikipedia.org/wiki/UTF-8).
En la actualidad se está pasando al sistema de codificación UTF-8, pero aún hay mucho contenido codificado en ISO-8859-1.
Para mantener el antiguo sistema de codificación se puede desactivar la función en Apache que establece UTF-8 como
codificación predefinida.
Para ello editar el archivo /etc/apache2/apache2.conf y localizar:
AddDefaultCharset UTF-8
Ahora cambiar por:
AddDefaultCharset Of
18 de 40
Curso Mentor Apache
Nombre de dominio
Utilización de un nombre de dominio
Si en lugar de trabajar con Apache2 haciendo siempre referencia a localhost el usuario prefiere familiarizarse con la utilización del
nombre del servidor, se puede hacer de forma sencilla.
Para ello hay que hacer referencia a los hosts virtuales que se verán con detalle en el Capítulo -5-. Pero de momento, podemos
resolverlo sin necesidad de entrar en excesivos detalles.
Planteamos, entonces, la conveniencia de llamar a nuestro servidor web Apache2 (que estamos configurando) como
servidor.apache2.com de forma que, al abrir el navegador podamos indicar como URL la siguiente:
http://servidor.apache2.com
¿Qué debemos hacer?
1. Editar el archivo /etc/hosts y en la línea de localhost añadir este nombre, quedando de la forma siguiente:
En definitiva lo que hemos hecho es crear un alias a localhost.
2. Editar el archivo /etc/apache2/sites-available/default e incluir la directiva ServerName dentro del único host virtual
existente y por defecto con el valor anterior:
ServerName servidor.apache2.com
Si ahora abrimos el navegador y vamos a la URL http://servidor.apache2.com comprobamos que nos dirige al mismo
contenido que localhost.
It works!
The web server software is running but no content has been added, yet.
19 de 40
Curso Mentor Apache
Redirección de directorios
Redireccionamiento
Se puede configurar un directorio para que él y su contenido sean redirigidos de modo transparente hacia cualquier otra dirección.
Para ello se utiliza la directiva Redirect:
En el ejemplo se indica que, si un usuario trata de acceder al subdirectorio /webmail en el servidor, Apache2 le deberá redirigir
hacia http://servidor.apache2.com/.
El número 301 corresponde al mensaje del protocolo HTTP para indicar que la redirección es permanente.
Si en /webmail hubiese un archivo, como por ejemplo /webmail/pruebas/pruebas.php, Apache2 hace el redireccionamiento
transparente hacia http://servidor.apache2.com/pruebas/pruebas.php.
Hay que tener en cuenta que el segundo argumento es una dirección URL completa que puede estar en otro servidor.
Existen varios tipos de redireccionamiento que se indican a través de una clave:
temp (302): el redireccionamiento es temporal cuando el contenido solicitado no está en el lugar dado, pero lo estará en
el futuro. Apache2 recuerda la URL dada para futuras búsquedas de ese contenido. Se suele utilizar en páginas que están en
construcción.
permanent (301): el redireccionamiento es permanente cuando el contenido solicitado está en la nueva dirección dada y
que Apache2 recordará.
gone (410): el contenido solicitado no está donde se espera que esté ya que ha sido eliminado definitivamente. Esta
opción se diferencia del código de respuesta 404 Not found que identifica un error. El código 410 indica que no está allí, pero
antes estaba el contenido.
seeother (303): este redireccionamiento indica al cliente web que el contenido original no está donde se supone que
debía de estar y que se ha sustituido por otro en otra ubicación.
Indica que el archivo hola.html se ha sustituido por adios.html.
Actividad 3.5
20 de 40
Curso Mentor Apache
Redirect /ejemplos http://servidor2/nuevo_sitio
Solución:
Si /ejemplos es un directorio ubicado, por ejemplo, en http://servidor1 la solicitud hecha sobre un archivo
hola.html del directorio ejemplos será redireccionada a la dirección http://servidor2/nuevo_sitio/hola.html.
Si se añade el tipo de redirección 301, ésta será permanente.
Redirect 301 /ejemplos http://servidor2/nuevo_sitio
21 de 40
Curso Mentor Apache
Tipos MIME
Directivas relacionadas
Algunas directivas relacionadas con los tipos MIME son:
TypesConfig
La directiva TypesConfig indica el nombre del archivo que contiene la lista de tipos MIME que conoce el servidor. No puede estar
dentro de ninguna sección y está asociada al módulo mod_mime.
Para añadir algún tipo de extensión y tipo MIME, como por ejemplo Ogg (es un formato de audio de propósito general, con
compresión), se puede generar un archivo que podemos llamar /etc/apache2/conf.d/extensiones.conf con el contenido:
AddType application/ogg .ogg
AddDescription "Ogg Vorbis Audio" .ogg
AddIcon /icons/sound2.png .ogg
DefaultType
La directiva DefaulType indica el tipo MIME que se utilizará por defecto, si no se conoce la extensión del archivo que se está
sirviendo. Por defecto es archivo en texto plano (valor text/plain).
La directiva se puede encontrar fuera de cualquier sección, dentro de una sección o dentro de un archivo .htaccess.
22 de 40
Curso Mentor Apache
Resolución de problemas
Identificación y resolución de problemas
Se nos plantea la cuestión ¿y qué hacer cuando se presenta un problema?
En primer lugar se debe consultar el registro de errores: es posible que el problema pueda deducirse de un mensaje de error.
El archivo de registro de errores se encuentra en /var/log/apache2/error.log.
Se recomienda mostrar los archivos de registro en una consola mientras se accede al servidor para ver cómo reacciona éste
en cada momento. Con este fin, ejecute en una consola el siguiente comando como root.
Ejecutar la orden:
# tail -f /var/log/apache2/*.log
Consultar la base de datos de fallos en la página web http://httpd.apache.org/bug_report.html.
Consultar en las listas de correo y los foros de noticias.
Los foros de noticias, se recomienda comp.infosystems.www.servers.unix.
23 de 40
Curso Mentor Apache
Windows
A tener en cuenta ...
1. Es importante tener en cuenta que muchos de los contenidos explicados para Ubuntu son también de aplicación para
Windows. Por ese motivo, siempre y en cada unidad, la parte de Ubuntu es mas extensa.
2. Hay que tener en cuenta que Apache2 para Windows no ha sufrido tantas modificaciones como la versión para GNU/Linux.
En concreto sigue existiendo la directiva ServerRoot, los módulos se cargan desde httpd.conf, etc. Es decir, el estilo de
la configuración es similar al de Apache1.
Configuración de Apache2
El archivo de configuración es httpd.conf y está localizado (según el proceso de instalación) en el directorio C:/Archivos de
programa\/pache Group/Apache2/conf/.
También está disponible a través del menú de inicio de Windows:
Inicio > Todos los programas > Apache HTTP Server 2.2 > Configure Apache Server > Edit the Apache httpd.conf
Configuration File
En el archivo httpd.conf de Windows se incluyen al final un grupo de sentencias Include de los archivos de configuración
específicos que añaden nueva funcionalidad o modifican la configuración por defecto del servidor web. Estos archivos de
configuración están en el directorio conf/extra/.
El funcionamiento de las directivas que se incluyen en el archivo httpd.conf es el mismo que esas mismas directivas en el archivo
apache2.conf y, por lo tanto, sólo se va a incidir sobre aquellas que tengan un especial interés por sus valores particulares o por su
especial significado.
Pero, sin embargo, en Windows otras directivas están distribuidas en otros archivos de configuración incluidos en conf/default/ y
las respectivas adaptaciones en conf/extra/.
Se recomienda repasar las directivas explicadas desde Ubuntu o visitar la web oficial de Apache2 (http://httpd.apache.org
/docs/2.2/).
El archivo httpd.conf está dividido en cuatro secciones:
1 Directivas globales
2 Directivas de Funcionamiento
3 Carga de módulos
4 Includes
Algunas directivas son generales o globales para la instalación y funcionamiento de Apache2. Otras directivas se pueden configurar
de forma independiente para determinados directorios y/o archivos. En este caso las directivas están incluidas en secciones que
determinan el ámbito de aplicación de dicha directiva.
Entre las secciones más importantes tenemos las ya estudiadas desde Ubuntu GNU/Linux: <Directory>,
<DirectoryMatch> que funciona como <Directory> pero admite como nombre de directorio expresiones regulares, <Files> y
<FilesMatch> (igual que antes pero para archivos) y <Location> y <LocationMatch>.
24 de 40
Curso Mentor Apache
Directivas globales
Directivas globales básicas incluidas en httpd.conf
ServerRoot
La directiva ServerRoot indica el directorio principal donde se encuentran todos los archivos de configuración y de trabajo del
servidor. Por defecto, la misma ruta que la de instalación.
Por defecto:
ServerRoot "C:/Archivos de programa/Apache Software Foundation/Apache2.2"
DocumentRoot
La directiva DocumentRoot indica el directorio principal que contiene la estructura de directorios visible desde la web.
Por defecto:
DocumentRoot "C:/Archivos de programa/Apache Software Foundation/Apache2.2
/htdocs"
DirectoryIndex
La directiva DirectoryIndex indica los archivos que admite el servidor web como archivos de inicio del sitio web.
Por defecto:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
Esto quiere decir que cuando se acceda a una URL, por ejemplo, http://www.educacion.gob.es/ se está accediendo a
http://www.educacion.gob.es/portada.html en este caso DirectoryIndex será portada.html.
Se puede indicar mas de un archivo y la precedencia está asociada al orden de aparición. Es decir, si aparecen index.html,
index.php, archivo.html, como primera opción se buscará index.html y se mostrará su contenido como inicio de la web dada. Si
no se encontrara se buscaría index.php, etc.
Esta directiva puede encontrarse dentro de cualquier sección o dentro de un archivo .htaccess.
ErrorLog
La directiva ErrorLog indica la localización del archivo log de errores.
Por defecto:
ErrorLog "logs/error.log"
LogLevel
La directiva LogLevel indica los tipos de errores que se quieren almacenar en el archivo error.log1 . Posibles valores son: debug,
info, notice, warn, error, crit, alert, emerg. Está asociada al módulo core.
Por defecto:
LogLevel warn
CustomLog
La directiva CustomLog admite varios parámetros y, dependiendo de ellos, tiene una funcionalidad.
Parámetros Descripción
common Indica el camino completo del archivo en el que se almacena los accesos al servidor web,
llamado access.log.
referer Indica el camino completo del archivo donde se guardará la URL que da origen a la visita al
servidor web, logs/referer.log.
agent Indica el camino completo del archivo donde se almacenan los diferentes tipos de
navegadores con los que se visita el servidor web y el sistema operativo, logs/agent.log.
combined Indica a Apache que se quieren los tres tipos de logs, common, referer y agent, en un
mismo archivo. Por defecto está comentado y, de esa forma, se almacenará en archivos
diferentes.
Por defecto:
25 de 40
Curso Mentor Apache
26 de 40
Curso Mentor Apache
Directivas de Funcionamiento
Directivas de funcionamiento incluidas en httpd.conf
Sección Directory
La sección <Directory /path/a/directorio> / </Directory> engloba una o más directivas de configuración que sólo se aplican
al directorio y subdirectorios especificados. Puede ser:
Un nombre de directorio (ruta absoluta)
Una expresión regular
Ejemplo:
Sección Files
Las directivas incluidas en una sección <Files> se aplicarán a cualquier archivo especificado, sin tener en cuenta en
qué directorio se encuentra. Es decir, la directiva <Files> limita el ámbito de aplicación de las directivas que incluye
según el nombre de los archivos.
En el ejemplo siguiente las directivas de configuración, cuando se colocan en la sección principal del archivo de
configuración, deniegan el acceso a cualquier archivo llamado privado.html sin tener en cuenta donde se
encuentre.
<Files privado.html>
Order allow,deny
Deny from all
</Files>
En ocasiones esta sección se incluye dentro de una sección <Directory> para remarcar un tratamiento especial con un archivo.
Sección IfModule
La sección IfModule engloba directivas que se procesarán si el módulo dado como argumento se compila con Apache2.
Ejemplo:
<IfModule mod_mime_magic.c>
MIMEMagicFile share/magic
</IfModule>
Si el módulo mod_mime_magic.c está compilado en Apache2, en esta sección IfModule la directiva MIMEMagicFile le dice
al módulo mod_mime_magic.c donde está el archivo de los trucos: share/magic en este caso.
El módulo mod_mime_magic puede compararse al comando UNIX file, que examina los primeros bytes de un archivo, y usa
"números mágicos" y otros trucos para decidir el tipo MIME del archivo.
El módulo mod_mime_magic no está compilado por defecto.
Si delante del nombre del módulo aparece una "!" (exclamación) las directivas incluidas son procesadas sólo si el módulo indicado en
la etiqueta <IfModule> no está compilado.
Es importante tener en cuenta que, cada vez que se lleve a cabo una modificación sobre alguno de los valores actuales de las
directivas, se comenten algunas de ellas o se activen, habrá que reiniciar el servicio Apache para que dichos cambios estén
disponibles. Para ello habrá que parar el servicio utilizando la opción Stop del Apache Service Monitor (botón derecho sobre el
icono) y a continuación volver a lanzar el servicio seleccionando la opción Restart:
27 de 40
Curso Mentor Apache
Carga de módulos
Carga de módulos
LoadModule
La directiva LoadModule permite que Apache2 'sepa' que se le ha incorporado de forma dinámica el módulo correspondiente.
LoadModule alias_module modules/mod_alias.so
Si la carga del módulo lleva alguna configuración específica, ésta debe ir dentro de una sección <IfModule>.
<IfModule alias_module>
ScriptAlias /cgi-bin/ "C:/Archivos de programa/Apache Software
Foundation/Apache2.2/cgi-bin/"
</IfModule>
28 de 40
Curso Mentor Apache
Includes
Includes
Include
La directiva Include situada en el archivo de configuración general httpd.conf, añade o concatena el contenido del archivo
especificado con el contenido del archivo httpd.conf.
Include conf/extra/httpd-ssl.conf
Hay que ir con cuidado con los valores incluidos ya que, en función de ellos, el archivo puede crecer de forma
descontrolada.
29 de 40
Curso Mentor Apache
Apache2 + IIS
Apache 2 e Internet Information Services
En Windows tiene especial importancia saber si se tiene otro servidor web configurado, como es el caso del IIS.
Si es así la ejecución de Apache puede dar problemas y mostrar un mensaje en el que se indica que no se pueden tener dos
servidores web escuchando en el puerto 80. Lo mejor en este caso es parar el servidor IIS (si se tiene instalado) y, para ello, hay
que ir a:
Panel de control > Herramientas administrativas > Servicios de Internet > Information Server
Desde la consola de administración del sistema parar (STOP) el servicio.
Este caso es importante tenerlo en cuenta en Windows 2003/2008 Server que instala por defecto IIS.
30 de 40
Curso Mentor Apache
Actividades
Actividad 3.6
Conocer la directiva AccessFileName
Solución:
La directiva AccessFileName indica cuál es el nombre del archivo de configuración que se buscará en cada una de los directorios
del servidor para conocer la configuración del mismo. Este archivo permite configurar el comportamiento de cada uno de los
directorios individualmente.
Para que esta configuración funcione, la directiva AllowOverride tiene que tener un valor que lo permita.
Esta directiva AccessFileName no puede estar dentro de ninguna sección y por defecto su valor es el archivo .htaccess.
Como medida de seguridad, la configuración de Apache establece que no se muestre la existencia de este archivo a ningún usuario,
aunque esté activa la opción de listado de directorios.
En la sección Files siguiente se establece que todos los archivos que comiencen por .ht no se muestren:
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files
Actividad 3.7
Queremos conocer quien es el propietario de la carpeta htdocs.
Solución:
Para conocer quién es el propietario de la carpeta htdocs en Windows hay que abrir el Explorador de archivos y en Equipo localizar
la Unidad C.
Al abrir C localizamos la carpeta de Apache Software Foundation y situándonos sobre la carpeta htdocs pulsamos el
botón derecho y seleccionamos las Propiedades.
31 de 40
Curso Mentor Apache
Abrimos las Opciones avanzadas:
32 de 40
Curso Mentor Apache
33 de 40
Curso Mentor Apache
Códigos de respuesta
Categorías de códigos de respuesta
Los códigos de respuesta del servidor Apache2 (tanto para Ubuntu como para Windows) están formados por tres dígitos y se
dividen en 5 categorías, dependiendo del tipo de mensaje.
Estas categorías se diferencian entre sí por el primer dígito del código:
1xx: mensajes informativos
2xx: mensajes de operaciones correctas
3xx: mensajes de redirección
4xx: mensajes de error en el cliente
5xx: mensajes de error en el servidor
La tabla siguiente describe los códigos de respuesta mas usuales:
Código de respuesta Significado
200 OK La solicitud se ha realizado correctamente.
201 Created Se ha almacenado correctamente en el servidor un nuevo archivo utilizando el método POST.
202 Accepted La solicitud se ha recibido y está siendo procesada actualmente.
204 No Content La solicitud ha tenido éxito pero no se registran cambios en la página actual que se muestr
cliente.
301Moved Permanently La página solicitada se ha eliminado de forma permanente y las futuras referencias a esa pá
deberían usar la nueva URL que se indica.
302 Moved Temporarily La página solicitada ha cambiado de ubicación temporalmente y las futuras referencias a esta pá
deberían seguir usando la misma URL, pero la conexión actual será redirigida.
304 Not Modified La versión de la página en la caché es igual a la página solicitada.
400 Bad Request La solicitud del cliente contiene una sintaxis incorrecta.
401 Unauthorized El cliente ha dado una combinación de nombre de usuario/contraseña incorrecta.
402 Payment Required El cliente debe indicar una forma de realizar una transacción económica.
403 Forbidden Control de acceso denegado para la solicitud del cliente.
404 Not Found La página solicitada no existe en el servidor.
500 Internal Server Error Este código de error, que normalmente aparece al ejecutar una script CGI, indica que dicho sc
contiene código incorrecto o se le ha introducido una entrada que no puede procesar.
501 Not implemented La solicitud se ha hecho con un método (GET, POST, PUT, DELETE, HEAD) no conocido po
servidor.
502 Bad Gateway Usando el servidor web como proxy se ha encontrado un error al cursar la solicitud a un h
externo.
503 Service Unavailable El servidor está procesando actualmente demasiadas solicitudes.
505 HTTP Version La versión de la solicitud (por ejemplo HTTP/Not supported 1.0 HTTP/1.1) no es conocida po
servidor.
34 de 40
Curso Mentor Apache
Glosario
Glosario Unidad 3
Concepto Definición
Comando de configuración que controla uno o más aspectos del comportamiento de Apache.
Directiva
Forma de describir un modelo de texto. Por ejemplo, "todas las palabras que empiezan con la letra "A" o
Expresiones Regulares "todos los números de teléfono que contienen 10 dígitos".
(Regex) Las Expresiones Regulares son útiles en Apache porque permiten aplicar ciertos atributos a grupos de
archivos o recursos de una forma flexible.
Permite servir diferentes sitios web con una sola entidad de Apache.
Host Virtual
El hosting virtual de IPs diferencia los sitios web basándose en sus direcciones IP, mientras que el
hosting virtual basado en nombres usa solo el nombre del host y de esta manera puede alojar muchos
sitios web con la misma dirección IP.
Ver Unidad 5.
Hyper Text Markup Language. Lenguaje que permite definir el contenido y su presentación para que el
HTML cliente web permita visualizar la información que contiene. Dicho lenguaje permite la inclusión de medios
(gráficos, sonidos, vídeos, etc.).
Una manera de describir el tipo de documento a ser transmitido. Su nombre viene del hecho de que su
MIME-type formato se toma de las Extensiones del Multipurpose Internet Mail.
Consiste en dos componentes, uno principal y otro secundario, separados por una barra. Algunos ejemplos
son text/html, image/gif, y application/octet-stream.
En HTTP, el tipo MIME se transmite en la cabecera del Tipo Contenido.
Parte independiente de un programa.
Módulo
La mayor parte de la funcionalidad de Apache está contenida en módulos que pueden incluirse o excluirse.
Los módulos que se compilan con el binario httpd de Apache se llaman módulos estáticos, mientras que
los que se almacenan de forma separada y pueden ser cargados de forma opcional, se llaman módulos
dinámicos.
35 de 40
Curso Mentor Apache
Otros Glosarios
36 de 40
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
37 de 40
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 3 'Configuración'
Los puntos a destacar de esta unidad son los siguientes:
1. Antes de comenzar a configurar hemos de conocer qué son las directivas de configuración, cómo se agrupan y cuál es el
significado de las más relevantes.
2. La unidad presenta las diferentes directivas explicando su significado en base a los valores por defecto que tienen asignadas.
3. Se explican las secciones mas importantes de los archivos de configuración tanto de Ubuntu como de Windows.
4. Se establecen las diferencias en el modo de configuración entre Ubuntu y Windows.
5. Se hace especial mención a ciertas secciones que condicionan la presencia/ausencia de determinadas directivas.
6. Se explica el contenido de los directorios que contienen las personalizaciones en la configuración que realizan los
administradores.
7. Se explica la redirección de directorios, cómo se realiza y para qué sirve.
8. Se incluyen los codigos de respuesta del servidor Apache así como se explica la forma de detectar posibles problemas y
localizarlos.
38 de 40
Curso Mentor Apache
Autoevaluación Unidad 3
Autoevaluación
39 de 40
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 3
40 de 40
Curso Mentor Apache
Apache
Unidad 4: Módulos de Apache
En este capítulo aprenderás:
el concepto de módulo para un servidor web y los diferentes tipos.
cuáles son los módulos básicos de Apache2 incluidos por defecto en el proceso de instalación.
cómo se manejan los módulos de Apache2, su activación y desactivación.
la descripción básica de otros módulos de Apache2 que el usuario puede incluir en la configuración de su servidor web.
las características fundamentales y las directivas asociadas al módulo userdir.
el objetivo, creación y utilización de los archivos .htaccess.
Material complementario:
1 de 24
Curso Mentor Apache
Introducción
Objetivos
Conocer el concepto de módulo y las ventajas de su utilización.
Utilizar el modulo mod_userdir aplicandolo en diferentes supuestos.
Utilizar los archivos .htaccess.
Conocimientos previos
En esta unidad abordamos la configuración y utilización de módulos de Apache2.
Es importante haber utilizado las principales directivas de configuración y estar familiarizado con los archivos de configuración de
Apache2.
Contenidos
Unidad 4: Módulos de Apache2
A. Ubuntu
1. Definición de módulo y clasificación
2. Descripción de los módulos básicos.
3. Activación/Instalación de módulos.
4. Módulo mod_userdir
5. Otros módulos de Apache2
6. Archivos .htaccess
B. Windows
1. Módulos de Apache2 en Windows
2. Archivos .htaccess
C. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 24
Curso Mentor Apache
Nota
Hay que tener en cuenta que el capítulo contiene una descripción de las directivas de configuración del servidor web Apache2 mas
significativas. Por este mismo motivo muchas de ellas son objeto de un estudio práctico mas detallado en otros capítulos que estudian
aspectos mas concretos del servidor.
El alumno, por tanto, no debe sentirse desbordado por la exposición masiva de información. Estas directivas, junto con otras que se irán
introduciendo de forma paulatina, serán objeto de estudio a lo largo de los capítulos de este curso.
3 de 24
Curso Mentor Apache
Ubuntu
Nota
Como en las anteriores unidades, la primera parte es mas extensa porque incluye una serie de explicaciones acerca de la utilización de
los módulos en Apache2 que son válidas tanto para Ubuntu como para Windows.
La parte dedicada a Windows sólo contiene la parte específica y diferenciada para el tema tratado en esta unidad.
4 de 24
Curso Mentor Apache
Definición y clasificación
Definición
Un módulo en Apache2 es una forma de agrupar ciertas funcionalidades para el servidor web.
Existe una gran cantidad de módulos disponibles desde Apache2. La lista completa está en http://modules.apache.org.
Uno de los principales motivos por los que se utilizan los módulos en Apache2 es que no todas las instalaciones de servidores web
necesitan las mismas funcionalidades.
Si la instalación de Apache2 arrastrase toda su posible funcionalidad la necesidad de memoria RAM y espacio en disco sería elevada y
el servicio sería 'pesado'. Sin embargo, si se modulariza sólo se incluye lo que se necesita mediante los módulos correspondientes.
Existen dos tipos de módulos:
1. Los que se compilan de forma "estática" cada vez que se compila Apache2.
2. Los que se cargan dinámicamente. Esto permite que Apache2 cambie dinámicamente los módulos cada vez que se inicia, sin
necesidad de recompilar todo el programa de nuevo.
Esta opción se denomina DSO o Dynamic Shared Object (Objeto Compartido Dinámico) y los archivos correspondientes a estos
módulos tienen extensión .so.
Por defecto, la propia instalación del paquete .deb de Apache2 ya instala una serie de módulos básicos, entre ellos el que permite la
carga dinámica de módulos. Para conocer cuáles son ejecutar la orden:
# apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
5 de 24
Curso Mentor Apache
Módulos básicos
Descripción de los módulos básicos
Incluimos una breve descripción de los módulos mas importantes y básicos de Apache2.
core.c
Contiene utilidades de Apache2 que están siempre disponibles y son requeridas en toda instalación.
Las directivas disponibles a partir de este módulo son:
AccessFileName: especifica el nombre del fichero de configuración particular de un directorio. En este directorio se pueden
incluir las directivas que queremos que se apliquen a ese directorio concreto.
AccessFileName .htaccess
AllowOverride: ya estudiada en la Unidad 2.
AuthName: establece el ámbito para autenticación HTTP.
AuthName "Mi dominio"
Directory - DirectoryMatch
Files - FilesMatch
IfDefine – IfModule
http_core.c
Contiene el soporte básico http, necesario en cada instalación de Apache 2.2.
mod_access.c
Permite el control de acceso basado en el nombre de host, dirección IP u otras características de la petición del cliente. Limita el acceso
URL.
Directivas utilizables:
allow indica la parte permitida de las listas de control de acceso y determina a qué hosts se les permite acceso.
deny indica la parte bloqueada de las listas de control de acceso y determina a qué hosts no se les permite acceso.
order especifica la secuencia en la que se procesan las reglas allow y deny.
mod_dir.c
Establece la lista de nombres de archivos que se pueden utilizar si no se indica un nombre de archivo en una URL que referencia un
directorio.
El índice de un directorio puede venir dado de dos formas:
El valor por defecto de la directiva DirectoryIndex es el siguiente:
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml
Ejemplo: si se pasa la URL http://servidor/directorio/ el navegador web recibe el contenido de un archivo index.html que exista en ese
directorio.
6 de 24
Curso Mentor Apache
mod_alias.c
En general permite la redirección y la asignación de partes del sistema de archivos físico a entidades lógicas accesibles por medio del
servidor web.
Las directivas contenidas en este módulo permiten la manipulación y control de peticiones de URLs que llegan al servidor.
Alias permite mapear URLs y paths del sistema de archivos local. De esta forma contenidos que no están directamente por
debajo del valor de DocumentRoot sean servidos como parte del árbol web de documentos.
ScriptAlias además del efecto anterior determina o marca el directorio destino como contenedor sólo de ejecutables,
generalmente scripts CGI.
AliasMatch añade expresiones regulares.
Redirect se utiliza para indicar a los navegadores que el documento buscado ha cambiado de localización (en el mismo
servidor o en una ubicación externa).
RedirectMatch se utiliza cuando la redirección es una URL que contiene expresiones regulares.
mod_auth_basic.c
Autenticación de usuarios a través de los métodos estándar de Apache2.
Este módulo permite la utilización de autenticación básica HTTP para restringir el acceso de usuarios a través de archivos de texto de
contraseñas y grupos.
Este módulo se estudia con detalle en la Unidad 6.
mod_auth_digest.c
Autenticación de usuarios usando autenticación MD5. Este módulo permite la utilización de autenticación digest HTTP.
Se estudia con detalle en el Capítulo 6.
Otros módulos relacionados con la autenticación son:
Módulo Descripción
mod_authn_anon
Permite a usuarios anónimos acceder a áreas que requieren autenticación.
mod_authn_dbm
Autenticación de usuario utilizando archivos DBM.
mod_authn_file
Autenticación de usuario utilizando archivos de texto.
mod_authnz_ldap
Permite que se pueda usar una base de datos LDAP para almacenar las credenciales en la
autenticación básica HTTP.
mod_authz_*
Permiten o deniegan el acceso (autorización) a los recursos basándose en el acceso de
usuarios autenticados.
mod_authz_host
Autorización basada en la IP o nombre del equipo cliente.
mod_log_config.c
Registro flexible de las peticiones del cliente hechas al servidor.
Los registros se escriben en un formato personalizable, y se pueden escribir directamente a un archivo, o a un programa externo.
Este módulo se estudia en la Unidad 8.
7 de 24
Curso Mentor Apache
worker.c
Módulo de MultiProcesamiento (MPM) que implementa un servidor híbrido multiproceso-multihebra.
Usando hebras para atender peticiones el servidor puede servir un mayor número de peticiones con menos recursos de sistema que un
servidor basado únicamente en procesos (http://httpd.apache.org/docs/2.2/mod/).
mod_mime.c
Determina el tipo de archivo por su nombre.
Asocia varios bits de meta-información con archivos a través de su extensión de nombre de archivo.
La meta-información incluye su tipo MIME, idioma, juego de caracteres y codificación. Esta información se envía al navegador, y
participa en la negociación del contenido, y las preferencias del usuario se respetan al elegir uno de los posibles archivos a servir.
mod_status.c
Muestra información interna acerca de la actividad y funcionamiento del servidor.
La estadística actual del servidor se presenta de una forma fácilmente legible mediante una página HTML. Si la página es requerida se
puede hacer un refresco automático. Otra página proporciona una lista legible por la máquina simple del estado actual del servidor.
mod_autoindex.c
Permite visualizar el listado de directorios generado por el servidor.
Actúa de forma similar al comando ls de GNU/Linux. Esta generación automática se activa utilizando la directiva Options de la forma:
Options +Indexes
mod_negotiation.c
Proporciona la visualización condicional de documentos basándose en los campos Content-Encoding, Content-Language, Content-Length
y Content-Type de las cabeceras HTTP.
mod_so.c
Carga y ejecuta módulos DSO.
Contiene las directivas necesarias para poner en marcha objetos dinámicos compartidos.
Nota: La información de este punto ha sido parcialmente extraída de la página oficial http://httpd.apache.org/.
8 de 24
Curso Mentor Apache
Activación / Instalación
Órdenes a2enmod / a2dismod
Por ejemplo, se quiere activar el módulo userdir. Para ello:
1. Comprobamos que está disponible en /etc/apache2/mods-available/:
# ls /etc/apache2/mods-available/
2. Activamos el módulo y relanzamos el servicio apache2:
#a2enmod userdir
Enabling module userdir.
Run '/etc/init.d/apache2 restart' to activate new configuration!
#/etc/init.d/apache2 restart
# ls -al /etc/apache2/mods-enabled
lrwxrwxrwx 1 root root 30 2011-05-26 19:09 userdir.conf -> ../mods-available
/userdir.conf
lrwxrwxrwx 1 root root 30 2011-05-26 19:09 userdir.load -> ../mods-available
/userdir.load
9 de 24
Curso Mentor Apache
userdir.conf contiene la configuración por defecto de dicho módulo
userdir.load contiene la línea correspondiente a la carga (LoadModule) de dicho módulo indicando el path (/usr/lib
/apache2/modules/mod_userdir.so) donde se encuentran los módulos compilados y preparados para la carga dinámica
(.so).
apxs2 (APache eXtenSion tool) es una herramienta muy importante para los desarrolladores de módulos.
apxs2
Permite compilar e instalar mediante un sólo comando los módulos disponibles a partir del fuente (extensión .c).
Permite la instalación de módulos disponibles en forma de archivos de objetos (extensión .o) o librerías estáticas (extensión .a).
A partir de las fuentes, apxs2 crea un “objeto dinámico compartido” (DSO) que puede ser utilizado directamente como módulo por
Apache2.
La utilización de la orden apxs2 requiere la instalación del paquete Debian apache2-threaded-dev.
# apt-get install apache2-threaded-dev
También requiere que esté disponible el módulo mod_so (se ha comprobado que por defecto viene incorporado).
La orden siguiente permite instalar un módulo a partir del código fuente:
# apxs2 -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
# apxs2 -i -a mod_foo.c
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
-c indica que se compila el fuente mod_foo.c
-i indica que se instala uno o más objetos compartidos (DSO)
La primera orden compila © y la segunda instala (i) y activa (a) el módulo.
Otras opciones disponibles:
-o permite indicar el nombre que se le asigna al objeto DSO (.so). Si no se incluye se toma como nombre el mismo que el fuente. En el
ejemplo sería: mod_foo.so.
-a automáticamente activa el módulo y añade la línea LoadModule correspondiente en el archivo de configuración apache2.conf
10 de 24
Curso Mentor Apache
Módulo mod_userdir
Definición
Uno de los módulos más conocidos y que acabamos de activar es mod_userdir.
mod_userdir permite que cualquier usuario del servidor pueda crear su espacio web en un directorio o carpeta dentro de su cuenta.
Es decir, permite asociar sitios con los usuarios del sistema.
Las directivas disponibles para este módulo son:
UserDir indica el nombre del subdirectorio, dentro del directorio home de cada usuario, donde estarán los archivos HTML que
podrán ser servidos por Apache2.
Por defecto, el subdirectorio es public_html.
UserDir public_html
También permite indicar usuarios que pueden disponer de este espacio web:
UserDir enable usuario1 usuario2 ... usuarioN
La directiva anterior permite a estos usuarios tener directorio de inicio accesible vía web.
UserDir disable usuario1 usuario2 ... usuarioN
La directiva anterior deshabilita a estos usuarios para tener directorio de inicio accesible vía web.
usuario1, usuario2,... son usuarios que tienen login en el sistema. Si están activos podemos poner el carácter '~' en los caminos de las
URLs. Por ejemplo, si escribimos:
http://servidor.apache2.com/~usuario1
se accede al home del usuario y no al directorio /var/www/ al que accederíamos si pusiésemos sólo servidor.apache2.com.
Si se quiere acceder a la página web sin necesidad de utilizar el carácter '~' habrá que definir un alias en /etc/apache2/conf.d
/alias.
alias /usuario1/ /home/usuario1/public_html/
El archivo de configuración por defecto para este módulo /etc/apache2/mods-available/userdir.conf, contiene:
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>
</IfModule>
11 de 24
Curso Mentor Apache
se podría llegar al directorio root.
La sección <Directory> está indicando que los home de todos los usuarios podrán ser listados sus contenidos
(Options Indexes). Es decir, cualquier usuario cuyo home contenga el directorio public_html podrá publicar su
contenido en el servidor Apache2 correspondiente.
12 de 24
Curso Mentor Apache
Otros módulos importantes para Apache2 (algunos de ellos nuevos) son los siguientes y que se irán estudiando a medida que se vayan
necesitando:
mod_ssl
Módulo nuevo desde Apache 2.0.
Este módulo es una interfaz para los protocolos de encriptado SSL/TLS de OpenSSL.
Se verá con detalle en la Unidad 6.
mod_dav
Módulo nuevo desde Apache 2.0.
Este módulo implementa la especificación del HTTP Distributed Authoring and Versioning (DAV) para colgar y mantener contenidos
web.
Se verá con detalle en la Unidad 8.
mod_deflate
Módulo nuevo desde Apache 2.0.
Este módulo permite soportar navegadores que requieren que el contenido sea comprimido (algoritmo deflate) antes de ser servido al
cliente, ahorrando ancho de banda.
mod_headers
Este módulo permite la personalización de las peticiones HTTP y las cabeceras de las respuestas.
mod_proxy
Implementa un proxy caché para Apache2.
El módulo proxy cumple los requerimientos de la especificación HTTTP/1.1.
Además, se han incorporado nuevas secciones de configuración a la directiva <Proxy> que hacen mas fácil (e internamente más
rápido) el control de los sitios web que usan proxys. El módulo está ahora dividido en módulos específicos para cada protocolo, incluidos
proxy_connect, proxy_ftp y proxy_http.
Se verá con detalle en la Unidad 9.
mod_include
Permite inclusiones del lado del servidor.
Aplica SSI (Server Side Includes) que, como ya se ha indicado, son documentos HTML que incluyen instrucciones condicionales
analizadas por el servidor antes de ser enviados al cliente.
13 de 24
Curso Mentor Apache
Archivos .htaccess
Definición
Los archivos .htaccess permiten a los usuarios que no tienen permisos modificar la configuración y así poder ejercer
algún control sobre el comportamiento de su parte del servidor Apache2.
Las directivas que modifican el comportamiento se colocan en un archivo .htaccess situado en el directorio al que tiene
que afectar, junto a todos sus subdirectorios.
Las modificaciones introducidas no requieren reiniciar el servidor web.
Para que el servidor haga caso de los archivos .htaccess hay que incluir la directiva AllowOverride (permite
sobreescritura).
Si se quiere deshabilitar completamente la utilización de estos archivos hay que incluir la directiva:
AllowOverride None
Directivas en .htaccess
Directivas relacionadas:
AccessFileName
En el archivo de configuración /etc/apache2/apache2.conf encontramos:
AccessFileName .htaccess
AllowOverride
AllowOverride All | None | Tipo_de _Directiva
donde:
None: los archivos .htaccess son totalmente ignorados
All: la configuración del archivo .htaccess sobreescribe la configuración de apache2.conf para ese directorio concreto.
Tipo_de_Directiva puede ser:
AuthConfig directivas de autenticación
FileInfo control del tipo de documentos (mod_mime)
Indexes controla la visualización de un directorio
Limits permite directivas de control de acceso
Options controla los servicios de un directorio
En concreto, escribir:
AllowOverride AuthConfig FileInfo Indexes Limits Options
AllowOverride All
es totalmente equivalente.
En general, si vamos a la web oficial http://httpd.apache.org/docs/2.2/en/mod/quickreference.html aquellas directivas que tengan una 'h'
en la penúltima columna están disponibles para el archivo .htaccess.
14 de 24
Curso Mentor Apache
1. El primero es de funcionamiento.
Cuando se activa AllowOverride para permitir el uso de archivos .htaccess, Apache2 mirará en cada directorio buscando
estos archivos. De esta forma entran en funcionamiento tanto si se utilizan como sino. Además el archivo .htaccess se carga
cada vez que se solicita un documento.
Además Apache2 buscará archivos .htaccess en todos los directorios de niveles superiores, para tener el conjunto
completo de directivas que debe aplicar. Así, si un archivo se solicita fuera de un directorio /var/www/ejemplo,
Apache2 debe buscar los archivos siguientes:
/.htaccess
/var/.htaccess
/var/www/.htaccess
/var/www/ejemplo/.htaccess
Entonces, para cada acceso a un archivo fuera de ese directorio, hay 4 accesos adicionales al sistema de archivos, incluso
aunque ninguno de esos archivos estuviera presente. Esto ocurriría sólo en el caso de que los archivos .htaccess estuvieran
permitidos en /, que no deberá ser el caso.
2. La segunda consideración es de seguridad.
Se está permitiendo que los usuarios modifiquen la configuración del servidor y pueden ser cambios de los que no se tiene
control. Hay que documentar exactamente qué se ha establecido en AllowOverride para conocer exactamente qué nivel de
privilegios se ha dado a los usuarios.
Es importante saber que es completamente equivalente poner un archivo .htaccess en el directorio /var/www/ejemplo/
conteniendo una directiva, a poner la misma directiva en una sección <Directory> en la configuración del sitio principal del servidor.
Archivo .htaccess en /var/www/ejemplo cuyo contenido es:
AddType text/ejemplo .eje
Tiene idéntico efecto que en /etc/apache2/sites-available/default añadir:
<Directory /var/www/ejemplo>
AddType text/ejemplo .eje
</Directory>
Con la diferencia que este archivo se carga cuando Apache2 arranca y sin embargo al archivo .htaccess se accede cada vez que se
solicita un archivo.
15 de 24
Curso Mentor Apache
Windows
A tener en cuenta ...
El concepto y sentido de los módulos en Windows es idéntico que en Ubuntu.
Existe alguna diferencia en cuanto a cuáles de ellos vienen incluidos de serie en los respectivos paquetes instalables. Por ejemplo, en
general las versiones de Apache2 para GNU/Linux incluyen el módulo mod_ssl que garantiza las comunicaciones seguras, sin embargo
en Windows se ha de descargar el archivo .msi especial que lleva soporte SSL.
16 de 24
Curso Mentor Apache
Módulos de Apache2
Módulos en Apache2 con Windows
Los módulos instalados por defecto están disponibles en el directorio C:\Program Files\Apache Software Foundation\Apache2.2
\modules.
La filosofía de activación/desactivación de módulos en Windows se mantiene con respecto a la versión de Apache 1.3. Es decir, para
activar un módulo se añade (o descomenta) la línea LoadModule correspondiente en el archivo httpd.conf.
Por ejemplo:
que activa el módulo mod_alias.
No existe, por tanto, ninguna herramienta a2enmod/a2dismod para activar/desactivar los módulos, ni existen tampoco los directorios
mods_available y mods_enabled. La activación es en tiempo de ejecución.
Por ejemplo, una sección típica de carga de módulos del archivo C:\Archivos de programa\Apache Software
Foundation\Apache2.2\conf\httpd.conf, para una instalación por defecto de Apache2, tendría el siguiente aspecto:
.......................................................
En el archivo existen otras líneas LoadModule comentadas. Si se quiere activar el módulo correspondiente basta con descomentar
dicha línea.
Los comportamientos específicos para cada módulo se pueden incluir en la sección <IfModule> en el propio archivo httpd.conf o
en archivos dedicados para cada módulo que, con un Include, se añaden a httpd.conf.
Por ejemplo, el módulo mod_dir.so tiene sus directivas en una sección <IfModule> dentro del propio httpd.conf:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule
El modulo mod_userdir.so sin embargo, dispone de un archivo específico en conf/extra llamado httpd-
userdir.conf que incluye toda la configuración específica para dicho módulo:
# UserDir: The name of the directory that is appended onto a user's home
......................................................................
17 de 24
Curso Mentor Apache
Order allow,deny
</Limit>
Order deny,allow
</LimitExcept>
</Directory>
Include conf/extra/httpd-userdir.conf
Y comprobar que está descomentada la línea:
18 de 24
Curso Mentor Apache
Archivos .htaccess
Utilización en Windows
Como ya definimos, .htaccess es un archivo oculto en un directorio del servidor que permite incluir directivas de configuración del
servidor web Apache2.
Normalmente es utilizado por los usuarios para personalizar el comportamiento del servidor Apache2 cuando accedan a sus espacios
web. Así, cuando se realiza una petición al servidor este busca el archivo en el directorio solicitado y si existe da prioridad a las
directivas incluidas en él.
Para crear un archivo .htaccess abrir el Bloc de notas, escribir las directivas y guardarlo con el nombre
“.htaccess” . Hay que incluir las comillas para que no se guarde con la extensión txt.
Como el archivo ha sido creado por un usuario para personalizar el acceso a su web, si este usuario:
A partir de ahora, cada vez que el navegador acceda al directorio el servidor lo leerá y ejecutará.
Para que el servidor haga caso de los archivos .htaccess hay que incluir la directiva AllowOverride (permite sobreescritura).
Si se quiere deshabilitar completamente la utilización de estos archivos hay que incluir la directiva:
AllowOverride None
Por defecto viene la opción desactivada.
En el caso de que se permita su utilización, las directivas relacionadas son:
AccessFileName que permite modificar el nombre del archivo por defecto. Se incluye en el archivo de
configuración httpd.conf:
AccessFileName .htaccess
AllowOverride All | None | Tipo_de _Directiva
19 de 24
Curso Mentor Apache
Glosario
Glosario Unidad 4
Concepto Definición
Identificación positiva de una entidad de red tal como un servidor, un cliente, o un usuario.
Autenticación
Definición estándar para un interfaz entre un servidor web y un programa externo que permite hacer peticiones de
CGI
servicio a los programas externos.
Protocolo creado por Netscape Communications Corporation para la autenticación en comunicaciones en general
Encriptado SSL/TSL
y encriptado sobre redes TCP/IP. Su aplicación más popular es HTTPS, el Protocolo de Transferencia de
Hipertexto (HTTP) sobre SSL. TSL es la evolución de SSL.
Los hilos o hebras son similares a los procesos en que ambos representan una secuencia simple de instrucciones
Hebras
ejecutada en paralelo con otras secuencias. Los hilos son una forma de dividir un programa en dos o más tareas
que corren simultáneamente.
Se trata de servir diferentes sitios web con una sola entidad de Apache. El hosting virtual de IPs diferencia los
Host Virtual
sitios web basándose en sus direcciones IP, mientras que el hosting virtual basado en nombres usa solo el
nombre del host y de esta manera puede alojar muchos sitios web con la misma dirección IP.
LDAP (Lighweight Directory Access Protocol) es un servicio de directorio ordenado y distribuido para buscar
LDAP
diversa información en un entorno de red. LDAP puede considerarse una base de datos (aunque su sistema de
almacenamiento puede ser otro diferente) al que pueden realizarse consultas.
Parte independiente de un programa. La mayor parte de la funcionalidad de Apache está contenida en módulos
Módulo
que pueden incluirse o excluirse. Los módulos que se compilan con el binario httpd de Apache se llaman módulos
estáticos, mientras que los que se almacenan de forma separada y pueden ser cargados de forma opcional, se
llaman módulos dinámicos o DSOs. Los módulos que están incluidos por defecto de llaman módulos base. Otros
módulos disponibles para Apache no se distribuyen por defecto y son llamados módulos de terceros.
Un recurso puede estar disponible en varias representaciones. Por ejemplo, puede ser que esté disponible en
Negociación de
varios idiomas o varios tipos de medios, o una combinación. Una forma de seleccionar la opción más apropiada
Contenido
es dar al usuario una página del índice, dejarle seleccionar. Sin embargo es posible que el servidor elija
automáticamente. Esto es posible porque los navegadores pueden enviar sus preferencias como parte de la
petición. Por ejemplo, un navegador puede indicar que prefiere la información en francés.
SSI Server Side Includes: comentarios especiales incluidos en el html que al leerlos el servidor ejecuta
acciones como incluir trozos de html, ejecutar un programa cgi, fecha, hora,...
Otros Glosarios
20 de 24
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
21 de 24
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 4 'Módulos en Apache2'
Los puntos a destacar de esta unidad son los siguientes:
1. Ubuntu y Windows comparten la utilización de los módulos de Apache, pero no los mecanismos de instalación y/o activación.
2. Ubuntu estructura los módulos en directorios diferenciados: modulos disponibles y modulos activados.
3. Dispone de órdenes específicas para realizar la activación/desactivación de los módulos.
4. Los archivos .htaccess permiten a los usuarios que no tienen permisos modificar la configuración y así poder ejercer algún control
sobre el comportamiento de su parte del servidor Apache2.
5. Es importante por seguridad mantener un control estricto sobre la utilización de los archivos .htaccess.
6. Desde Windows la estructura de Apach2 sigue la de la versión 1.3.
7. En el archivo httpd.conf están las líneas de carga de los diferentes módulos y que hay que descomentar para que se activen.
8. Aquellos módulos que requieran una configuración específica o personalizada se pueden generar archivos de configuración que se
añadiran a httpd.conf mediante Includes.
22 de 24
Curso Mentor Apache
Autoevaluación Unidad 4
Autoevaluación
23 de 24
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 4
24 de 24
Curso Mentor Apache
Apache
Unidad 5: Hosts virtuales
En este capítulo aprenderás:
el concepto de host virtual.
los tipos de hosts virtuales que puede manejar Apache2 y su fundamento.
Los directorios y archivos implicados en su configuración.
Las órdenes relativas a su manipulación.
cómo se definen los hosts virtuales de Apache2, su activación y desactivación.
la utilización básica de los hosts virtuales de Apache2.
Material complementario:
1. Archivo con las actividades de la unidad. Archivo U5_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U5_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 29
Curso Mentor Apache
Introducción
Objetivos
Conocer el concepto y funcionalidad de los hosts virtuales en Apache2.
Conocimientos previos
En esta unidad abordamos la configuración y utilización de los hosts virtuales e Apache2 . Es importante tener claros los
mecanismos de configuración de Apache en ambos sistemas operativos Ubuntu y Windows y las diferencias entre ambos.
Contenidos
Unidad 5: Hosts virtuales
A. Ubuntu
B. Windows
C. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 29
Curso Mentor Apache
Ubuntu:
3 de 29
Curso Mentor Apache
Trabajar con Hosts Virtuales consiste en ejecutar más de un sitio web en el mismo servidor.
Mediante los hosts virtuales Apache2 nos permite la posibilidad de alojar varios dominios en una sola máquina.
De esa forma, cuando una petición entra en el servidor Apache2 desde un navegador web a través de una IP dada, Apache2
comprueba el nombre de dominio que se está solicitando y muestra el contenido asociado a dicho nombre de dominio.
La utilización de hosts virtuales tiene:
1. Ventajas
Versatilidad: crea diferentes sitios web configurables
Precio: se necesita sólo una máquina para alojar varios servidores web
Configuración : una configuración del sistema sirve para todos los servidores web
Actualizaciones : sólo una vez
Requerimientos: no requiere ningún software ni hardware adicional.
2. Desventajas
Fragilidad: si cae el sistema todos los sitios web caerán
Configuración : si la configuración no es correcta no funcionará ninguno de ellos
Actualizaciones : si requiere detener el sistema pararan todos los servidores web
Seguridad : cualquier problema de seguridad afectará a todos
Actividad 5.1
Enunciado:
Supongamos que queremos alojar dos sitios web servidor1.dominio.com y servidor2.dominio.com en la misma máquina,
respondiendo ambos a una sóla IP y con una sóla instancia de Apache2 configurada y que responde las peticiones por el puerto
80.
Solución:
Usando hosts virtuales podemos conseguir que, en el caso de que sea invocado servidor1.dominio.com, Apache2 vaya a leer los
archivos en el directorio que hayamos configurado como DocumentRoot, y los mande al navegador de quien lo haya pedido, y
en el caso que sea convocado como servidor2.dominio.com, vaya a leer los archivos a otro directorio. Es decir, habrá un
directorio (DocumentRoot) para cada uno de los servidores virtuales que definamos.
Apache soporta dos tipos de hosts virtuales:
1. Hosts virtuales basados en nombres: permiten alojar varios nombres de host (o dominios) en una misma
4 de 29
Curso Mentor Apache
máquina (IP). Todos los hosts virtuales que comparten la misma IP deben declararse mediante la directiva
NameVirtualHost.
Símil: supongamos un hogar familiar con un teléfono fijo (IP) que comparten todos sus miembros. Al llamar por
teléfono se pregunta por una persona (nombre) u otra que atenderá la llamada.
2. Hosts virtuales basados en IP: una máquina responde de diferente manera a diferentes direcciones IP. Es decir,
tenemos múltiples IPs asignadas al sistema y queremos que cada una de ellas soporte un sitio web.
Símil: una persona tiene dos teléfonos, el del trabajo y el particular. En función a qué teléfono se le llame la
respuesta de la misma persona podrá ser diferente.
También podría darse la situación de disponer de varias IPs en el sistema y querer que cada una de ellas soporte varios
sitios web. Se trata de una situación mixta: por nombre y por IP.
En general, el caso más usual es el primero (que una sola máquina responda a varios nombres) y es el que vamos a
analizar.
5 de 29
Curso Mentor Apache
Directivas relacionadas
Consideraciones
1. El host virtual heredará los parámetros del host principal que no se cambien para él de forma explícita.
2. Para la definición de hosts virtuales se utiliza la sección <VirtualHost> y en ella se incluyen las directivas que se
aplican a un determinado host virtual.
3. Como mínimo deben incluir las directivas DocumentRoot y ServerName.
Directivas
Directiva Descripción
DocumentRoot Directorio donde Apache2 va a buscar los documentos el servidor virtual.
NameVirtualHost Define la dirección IP (y opcionalmente, el puerto) donde va a escuchar el servidor virtual.
ServerName Define el nombre del servidor virtual en formato DNS.
ServerAlias Define mas nombres de servidor virtuales para ese servidor.
VirtualHost Define una sección para un host virtual con las directivas aplicables a él.
6 de 29
Curso Mentor Apache
Para usar hosts virtuales basados en nombre se debe especificar en el servidor qué dirección IP se va a usar para atender las
peticiones de los diferentes hosts mediante la directiva NameVirtualHost.
Normalmente puede usarse cualquiera o todas las direcciones IP del servidor.
Para la directiva NameVirtualHost utilizaremos:
NameVirtualHost *
donde el '*' indica que los servidores especificados aceptan todas las solicitudes entrantes.
¿Cómo sabe Apache2 si una petición va dirigida a uno u otro host virtual?
La respuesta está en las cabeceras del HTTP/1.1.
Cuando un navegador envía una petición al servidor usando el protocolo HTTP/1.1 envía una cabecera del tipo host:
nombre_de_un_host con la que Apache2 puede diferenciar las peticiones de los distintos hosts virtuales.
El problema viene cuando el navegador es muy antiguo y utiliza el protocolo HTTP/1.0. En este caso Apache2 servirá siempre la
página del host por defecto.
El siguiente paso es crear un bloque <VirtualHost> para cada host diferente que se quiera alojar en el servidor. El
argumento de la directiva <VirtualHost> debe ser el mismo que el argumento de la directiva NameVirtualHost.
<VirtualHost * >
Si se va a usar más de un puerto (por ejemplo si va a usar SSL) se debe añadir un puerto a cada argumento, por ejemplo:
<VirtualHost *:80 >
Dentro de cada bloque <VirtualHost>, necesitará como mínimo una directiva ServerName para indicar qué host se sirve y
una directiva DocumentRoot para indicar dónde están los contenidos a servir dentro del sistema de archivos.
En Ubuntu al instalar Apache siempre existe un host virtual definido cuyo archivo de configuración se llama default y está en
el directorio /etc/apache2/sites-available/.
Importante
Si en el archivo /etc/apache2/sites-available/default existen varias entradas <VirtualHost> por defecto las
páginas que se mostrarán son las del primer host virtual de la lista.
Es necesario entonces que, si se dispone de un servidor 'oficial' con varios hosts virtuales, este servidor 'oficial' también
aparezca como <VirtualHost> y esté en primer lugar.
7 de 29
Curso Mentor Apache
Actividades
Actividad 5.2
Enunciado:
Añadir un host virtual a un servidor web ya existente como un sitio diferente a default.
Solución:
El servidor web existente (host virtual por defecto) dispone de su configuración como host virtual en el archivo
Supongamos que ya se está sirviendo el dominio servidor.apache2.com y se quiere añadir el host virtual
virtual.apache2.com, que apunta a la misma dirección IP.
Para preparar el nuevo sitio virtual, correspondiente al dominio virtual.apache2.com
<VirtualHost *>
ServerName virtual.apache2.com
DocumentRoot /var/www/virtual
<Directory /var/www/virtual>
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
Activar el sitio ejecutando la orden:
#a2ensite virtual
Reiniciar el servidor para que lea los cambios realizados en el archivo de configuración.
#/etc/init.d/apache2 reload
Ir al navegador y probar la URL virtual.apache2.com. Comprobar que se visualiza el contenido de index.html
para ese sitio virtual.
Pero ¿qué ocurre si ahora vamos a la URL servidor.apache2.com?
Es posible (no tiene porque ser así) que visualizemos el mismo archivo index.html que en el dominio virtual.
Esto quiere decir que hemos de modificar la configuración del sitio por defecto de Apache servidor.apache2.com.
Solución:
1. Editar el archivo /etc/hosts y comprobar que se tiene la línea:
192.168.0.1 servidor.apache2.com servidor
2. Editar el archivo de configuración del sitio /etc/apache2/sites−available/default y comprobar las líneas
indicadas, dejando el resto como están:
NameVirtualHost *
<VirtualHost *>
8 de 29
Curso Mentor Apache
ServerName servidor.apache2.com
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride none
Order allow,deny
Allow from all
RedirectMatch ^/$ /apache2-default/
</Directory>
</VirtualHost>
3. Reiniciar el servidor para que lea los cambios realizados en el archivo de configuración.
#/etc/init.d/apache2 reload
4. Ir al navegador y probar la URL http://servidor.apache2.com y comprobar que se visualiza de nuevo la
página de inicio de Apache2.
5. Ejecutar la siguiente orden para comprobar los hosts virtuales configurados:
#apache2 -S
Explicación de la configuración dada:
Con la directiva NameVirtualHost * se le está diciendo a Apache2 que se activan los hosts virtuales por nombre para la IP
dada en ServerName (externo).
Los siguientes grupos <VirtualHost *>...</VirtualHost> definen los hosts virtuales de nuestro servidor. En cada uno de
estos bloques, se le indica a Apache2 el DocumentRoot del host especificado en ServerName.
El primer host virtual de la lista es el que se usa por defecto.
Cuando una petición entra en el servidor Apache2 desde un navegador web a través de una IP dada, Apache2 comprueba el
nombre de dominio que se está solicitando y muestra el contenido asociado a dicho nombre de dominio.
Actividad 5.3
Enunciado:
¿Qué hay que hacer para poder acceder a uno de los sitios web usando nombres diferentes?
Solución:
Para ello se utiliza la directiva ServerAlias (indica la lista de nombres que pueden usarse para acceder a un mismo sitio web),
puesta dentro de la sección <VirtualHost>.
En el caso de utilizar el sitio por defecto se podría escribir en /etc/apache2/sites−available/default:
ServerAlias *.apache2.com
entonces las peticiones para todos los hosts en el dominio apache2.com serán servidas por el host virtual
servidor.apache2.com.
Los caracteres comodines '*' y '?' permiten encontrar equivalencias con los nombres. Pero no podemos inventar nombres y
9 de 29
Curso Mentor Apache
ponerlos en la directiva ServerName o ServerAlias. Antes hay que establecer la relación IP-Nombre bien mediante el
archivo /etc/hosts o mediante DNS.
Si se abre el navegador se comprobará que ahora se accede a la página inicial de Apache2 tanto desde
servidor.apache2.com como desde virtual.apache2.com.
Pero esto no interesa, así que se deja como estaba y se elimina el ServerAlias.
Actividad 5.4
Enunciado:
Host virtual basado en nombres (adecuar para DNS).
Solución:
Si en aula dispone de servicio DNS se puede dejar de utilizar el archivo /etc/hosts y trabajar con DNS.
1. El primer paso consiste en configurar los servicios DNS para que ambos dominios (servidor.apache2.com –
virtual.apache2.com) apunten a la misma dirección IP 1 . Esto se hace mediante el tipo de registro CNAME (nombre
canónico).
En el archivo /etc/bind/db.apache2.com escribir:
$TTL 10800
apache2.com. IN SOA servidor.apache2.com.
(1 ;
10800 ; 3 horas
900 ; 15 minutos
604800 ; 1 semana
86400) ; 1 día
apache2.com. IN A 192.168.0.1
apache2.com. IN NS servidor.apache2.com.
; SERVIDORES
servidor IN A 192.168.0.1
virtual IN CNAME servidor
; ESTACIONES DEL AULA
pc02 IN A 192.168.1.2
De esta forma se le está diciendo al servidor de DNS que el nombre virtual es un alias de servidor. Y así los clientes ya
podrán obtener la dirección IP de virtual.apache2.com.
2. Editar el archivo /etc/bind/named.conf.local y dejar las líneas siguientes:
zone "apache2.com" { type master;
allow-query { 127.0.0.1; 192.168.0.1/24; };
allow-transfer { 127.0.0.1; 192.168.0.1/24; };
file "/etc/bind/db.apache2.com"; };
zone "1.168.192.in-addr.arpa" { type master;
allow-query { 192.168.0.1/24; };
allow-transfer { 192.168.0.1/24; };
file "/etc/bind/db.192.168.0"; };
allow-query deja activas sólo las consultas internas y a la máquina local.
allow-transfer restringe las transferencias de zona.
10 de 29
Curso Mentor Apache
3. Editar el archivo /etc/bind/db.192.168.0 y dejar las líneas siguientes:
$TTL 10800
@ IN SOA apache2.com. ( 1 ;
10800 ;
900 ;
604800 ;
86400 ; )
@ IN NS servidor.apache.com.
1 IN PTR servidor.apache2.com.
1 IN PTR virtual.apache2.com.
10 IN PTR pc02.apache2.com.
4. Configuración: los archivos de configuración no se ven afectados en este caso. Sólo afecta a la resolución de nombres.
5. Para comprobar los dominios virtuales:
# apache2 -S
6.Reiniciar el demonio named.
# /etc/init.d/bind9 restart
11 de 29
Curso Mentor Apache
Si se tiene un sistema que dispone de varias direcciones IP y se quiere que cada una de ellas soporte un sitio web se deberá
crear una sección virtual para cada dirección IP.
Adaptar las IPs a los valores reales en el aula.
<VirtualHost 192.168.0.1>
ServerName servidorA.apache2.com
DocumentRoot /var/www/servidorA
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB.apache2.com
DocumentRoot /var/www/servidorB
</VirtualHost>
En este caso los servidores virtuales definidos reciben las solicitudes en función de la IP requerida, no del nombre del servidor.
Como no se dispone de equipos con varias interfaces de red se puede probar con las IPs que asigna VMware (hay que tener
ejecutándose VMware-Workstation) o creando alias de la tarjeta disponible (no es muy conveniente trabajar de esta forma).
Es posible también asociar la IP a un puerto concreto 80, 443, etc.
auto eth0:0
iface eth0:0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.100
Se está creando un alias de la tarjeta ethernet eth0 y se le asigna la IP 192.168.0.2.
Crear ahora los directorios adecuados e incluir en ellos algún archivo html para hacer la prueba.
12 de 29
Curso Mentor Apache
Actividades
Actividad 5.5
Enunciado:
Definir hosts virtuales basados en IP
Solución:
El ejemplo muestra cómo se debe configurar Apache2 para que, además de la dirección IP original 192.168.0.1, permita trabajar
con dos dominios mas utilizando otras dos direcciones IP 192.168.0.2 y 192.168.0.3.
Se supone que la puerta de enlace es 192.168.0.100 y el dominio inicial asociado a la IP 192.168.0.1 es servidor.apache2.com.
Para la implementación se utilizarán los alias de las tarjetas ethernet.
Siguiendo el esquema del punto anterior definir en /etc/network/interfaces dos alias de la tarjeta real eth0, que serán
eth0:0 y eth0:1 con los datos siguientes:
auto eth0:0
iface eth0:0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.100
auto eth0:1
iface eth0:0 inet static
address 192.168.0.3
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.100
Una vez están definidos los alias hay que reiniciar la red y comprobar que ya están disponibles:
#/etc/init.d/networking restart
#ifconfig
A partir de este momento el sistema ya dispone de 3 interfaces de red, una real y dos alias que permiten definir dos host
virtuales alojados en el mismo servidor web, además del dominio inicial servidor.apache2.com.
La configuración para los hosts virtuales virtualA.apache2.com y virtualB.apache2.com es la siguiente y podría ser
incluida tanto en el archivo default como en archivos diferenciados dentro de sites-available:
<VirtualHost 192.168.0.2>
ServerName virtualA.apache2.com
DocumentRoot /var/www/virtualA
ErrorLog /var/log/apache2/virtualA-error.log
CustomLog /var/log/apache2/virtualA-access.log combined
</VirtualHost>
<VirtualHost 192.168.0.3>
ServerName virtualB.apache2.com
DocumentRoot /var/www/virtualB
ErrorLog /var/log/apache2/virtualB-error.log
CustomLog /var/log/apache2/virtualB-access.log combined
13 de 29
Curso Mentor Apache
</VirtualHost>
Actividad 5.6
Enunciado:
Ejemplo mixto de hosts virtuales basados en direcciones IP y en nombres.
Solución:
Muestra la configuración de la red principal con un servidor virtual basado en IP y utilizando la interfaz con IP 192.168.1.1, y
además define 2 servidores virtuales sobre la IP 192.168.1.2 diferenciándolos por el nombre del host virtual. Es un ejemplo mixto.
Para ello hacemos una copia del host virtual por defecto 'default' que incluye Apache2 al instalar y le llamamos 'default-
copia'.
Editamos /etc/apache2/sites-available/default-copia y dejamos las líneas siguientes:
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.0.1>
ServerName principal.apache2.com
DocumentRoot /var/www/principal
ErrorLog /var/log/apache2/principal-error.log
CustomLog /var/log/apache2/principal-access.log combined
<Directory "/var/www/principal">
AllowOverride None Options None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#Host virtual dominio-alfa
<VirtualHost 192.168.0.2>
ServerName dominio-alfa.apache2.com
DocumentRoot /var/www/dominio-alfa
ErrorLog /var/log/apache2/dominio-alfa-error.log
CustomLog /var/log/apache2/dominio-alfa-access.log combined
<Directory "/var/www/dominio-alfa">
AllowOverride None Options None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#Host virtual dominio-beta
<VirtualHost 192.168.0.2>
ServerName dominio-beta.apache2.com
DocumentRoot /var/www/dominio-beta
ErrorLog /var/log/apache2/dominio-beta-error.log
CustomLog /var/log/apache2/dominio-beta-access.log combined
<Directory "/var/www/dominio-beta">
AllowOverride None Options None
Order allow,deny
Allow from all
</Directory>
14 de 29
Curso Mentor Apache
</VirtualHost>
Actividad 5.7
Enunciado:
Servidor virtual por defecto "_default_"
Solución:
Existe un nombre o indicador de servidor virtual por defecto “_default_” que atiende aquellas peticiones que no son atendidas por
ningún otro servidor virtual.
<VirtualHost _default_>
DocumentRoot /www/defecto
</VirtualHost>
Se puede añadir después de la etiqueta "_default_" un número de puerto y de esa forma se podrían tener servidores por defecto
diferentes para cada puerto.
15 de 29
Curso Mentor Apache
Windows: Introducción
16 de 29
Curso Mentor Apache
La utilización de hosts virtuales en Windows funciona igual que en Edubuntu. La única diferencia es el archivo en el que residen y
el mecanismo de activación de los mismos.
Para cada sitio web que queramos ejecutar localmente habrá que elegir un nombre para él (procurando que no coincida con un
nombre no utilizado en Internet) y añadir la referencia en el archivo de resolución de nombres local C:\WINDOWS\system32
\drivers\etc\hosts:
127.0.0.1 localhost
192.168.0.1 servidor
192.168.0.1 servidor.apache2.com
#Include conf/extra/httpd-vhosts.conf
Es importante tener en cuenta que, aunque la ruta del archivo viene separada por '\' en la directiva utilizamos '/'.
17 de 29
Curso Mentor Apache
El archivo de configuración para los hosts virtuales viene con unos ejemplos que habrá que eliminar o actualizar con
los datos correctos de nuestros hosts virtuales.
Para preparar el nuevo sitio virtual, correspondiente al dominio virtual.apache2.com:
1. Editar el archivo C:\WINDOWS\system32\drivers\etc\hosts y añadir la línea:
192.168.0.1 virtual.apache2.com virtual
NameVirtualHost *:80
<VirtualHost *:80>
ServerName virtual.apache2.com
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/virtual"
CustomLog logs/virtual.access.log combined
ErrorLog logs/virtual.error.log
<Directory "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/virtual">
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost
Creamos archivos diferenciados para almacenar los accesos y errores del sitio virtual.
5. Nuestro servidor servidor.apache2.com debe aparecer también como sitio virtual. Por lo tanto, añadimos en
este archivo el grupo de directivas que configuran este ServerName como host virtual.
La configuración final del archivo httpd-vhosts.conf será:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName servidor.apache2.com
ServerAlias servidor
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs"
CustomLog logs/access.log combined
ErrorLog logs/error.log
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs>
Options Indexes FollowSymLinks MultiViews
18 de 29
Curso Mentor Apache
AllowOverride none
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName virtual.apache2.com
ServerAlias virtual
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/virtual"
CustomLog logs/virtual.access.log combined
ErrorLog logs/virtual.error.log
<Directory "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/virtual">
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
Include conf/default/httpd-vhosts.conf
7. Reiniciar el servidor para que lea los cambios realizados en el archivo de configuración. Para ello ir a la barra de
herramientas y hacer clic sobre y seleccionar Apache Restart.
8. Ir al navegador y probar la URL virtual.apache2.com. Comprobar que se visualiza el contenido de
index.html para ese sitio virtual.
9. Ejecutar la siguiente orden para comprobar los hosts virtuales configurados: OJO
apache2 -S
Explicación de la configuración dada:
Con la directiva NameVirtualHost *:80 se le está diciendo a Apache2 que se activan los hosts virtuales por nombre y los
siguientes grupos <VirtualHost *>...</VirtualHost> definen los hosts virtuales de nuestro servidor. En cada uno de
estos bloques, se le indica a Apache2 el DocumentRoot del host especificado en ServerName.
Cuando una petición entra en el servidor Apache2 desde un navegador web a través de una IP dada, Apache2 comprueba el
nombre de dominio que se está solicitando y muestra el contenido asociado a dicho nombre de dominio.
Si en el archivo httpd-vhosts.conf existen varias entradas <VirtualHost> por defecto las páginas que se mostrarán
son las del primer host virtual de la lista. Es importante entonces que, si se dispone de un servidor 'oficial' con varios hosts
virtuales, este servidor 'oficial' también aparezca como <VirtualHost> y esté en primer lugar.
Este primer host virtual está accesible siempre como http://localhost.
Importante
Si al acceder a un host virtual el navegador muestra un mensaje de error "403 Forbidden" comprobar si existe el archivo
index.html en el DocumentRoot del sitio, ya que, por defecto el servidor Apache2 no permite listar el contenido del
directorio.
19 de 29
Curso Mentor Apache
Si en DocumentRoot no existe un favicon.ico se genera un log de error en el archivo correspondiente. Recordar
que el favicon.ico es la pequeña imagen que aparece junto a al URL y que personaliza nuestro sitio web.
Se puede utilizar una dirección IP concreta en lugar de * y de esa forma podemos asignar varios hosts virtuales por
nombre a esta IP y otro grupo de hosts virtuales a otra IP. Sería una combinación de ambas técnicas.
20 de 29
Curso Mentor Apache
Actividades
Actividad 5.8
Enunciado:
¿Qué hay que hacer para poder acceder a un sitio web usando nombres diferentes?
Solución:
Para ello se utiliza la directiva ServerAlias (indica la lista de nombres que pueden usarse para acceder a un mismo sitio
web), puesta dentro de la sección <VirtualHost>.
En el caso de utilizar el sitio por defecto se podría escribir en C:\Archivos de programa\Apache Software
Foundation\Apache2.2\conf\extra\httpd-vhosts
ServerAlias *.apache2.com
entonces las peticiones para todos los hosts en el dominio apache2.com serán servidas por el host virtual
servidor.apache2.com.
Los caracteres comodines '*' y '?' permiten encontrar equivalencias con los nombres. Pero no podemos inventar nombres y
ponerlos en la directiva ServerName o ServerAlias. Antes hay que establecer la relación IP-Nombre bien mediante el
archivo hosts o mediante DNS.
Si se abre el navegador se comprobará que ahora se accede a la página inicial de Apache2 tanto desde
servidor.apache2.com como desde virtual.apache2.com. Pero esto no interesa, así que podemos utilizar otro
ServerAlias que no sea tan genérico:
<VirtualHost *:80>
ServerName servidor.apache2.com
ServerAlias servidor
Actividad 5.9
Enunciado:
Host virtual basado en nombres (adecuar para DNS).
Solución:
Hasta hace relativamente poco tiempo, Windows utilizaba el servicio WINS para la resolución de nombres. A partir de Windows
2000 utiliza el servicio DNS que mantiene compatibilidad con WINS.
Windows por instalación lleva incluido el servicio de cliente DNS, pero no el de servidor.
Normalmente este servicio viene integrado en Active Directory en Windows 2003/2008 Server que funcionan como controladores
de dominio, pero no se aconseja su utilización de Active Directory desde estaciones de trabajo, que es el modo de utilización de
un Windows desktop.
De cualquier forma, sí que se puede instalar Active Directory en Windows desktop, pero no utilizando cdpromo sino utilizando el
AdminPack de 2003 /2008 server y puede ser un poco arriesgado.
Ya que nuestro servidor web Apache2 va a dar servicio a nuestra red local, la acción de resolución de nombres en Windows la
vamos a seguir dejando a cargo del archivo hosts.
21 de 29
Curso Mentor Apache
Apache2 puede atender varios servidores virtuales, cada uno de ellos con una dirección IP diferente utilizando la sección de
configuración VirtualHost.
Esta sección, de la misma forma que para hosts virtuales por nombre, define una configuración y dirección IP para cada uno de
los sitios o hosts virtuales.
Por ejemplo:
<VirtualHost 192.168.0.1>
ServerName servidorA.apache2.com
ServerAlias servidorA
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/servidorA"
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB.apache2.com
ServerAlias servidorB
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/servidorB"
</VirtualHost>
El ejemplo define dos servidores web, cada uno de ellos con una IP y un nombre diferentes. Ambos tienen su propio
DocumentRoot y demás directivas básicas.
Lógicamente para poder definir servidores virtuales por IP la máquina que alberga el sistema servidor debe tener configuradas
diferentes direcciones IP, bien porque dispone de varias tarjetas de red, bien porque ha creado varios alias.
Si nuestra máquina servidor dispone de dos direcciones IP y hemos asignado a las dos el mismo nombre, hemos de hacer un
uso especial de las directivas de servidores por nombre.
Por ejemplo, cuando se dispone una conexión de red para la red local y otra conexión diferente para Internet pero con el mismo
nombre, la configuración sería:
NameVirtualHost 192.168.1.1
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.1.1 192.168.0.1>
ServerName servidor.apache2.com
ServerAlias servidor
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/servidor"
</VirtualHost>
Esta configuración sirve la misma web hacia la red local y hacia Internet. En este caso es conveniente definir un alias para el
servidor y así no tener que usar dominios en la red local.
22 de 29
Curso Mentor Apache
Actividades
Actividad 5.10
Enunciado:
Combinar hosts virtuales basados en nombre y en IP.
Solución:
Supongamos que nuestro sistema dispone de varias direcciones IP y queremos que cada una de ellas soporte varios sitios web.
Hemos de proporcionar una directiva NameVirtualHost para cada dirección IP y repetir tantas secciones <VirtualHost>
como sitios queremos por IP.
Adaptar las IPs a los valores reales en el aula.
NameVirtualHost 192.168.0.1
NameVirtualHost 192.168.0.2
<VirtualHost 192.168.0.1>
ServerName servidorA1.apache2.com
DocumentRoot C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/servidorA1
</VirtualHost>
<VirtualHost 192.168.0.1>
ServerName servidorA2.apache2.com
DocumentRoot C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/servidorA2
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB1.apache2.com
DocumentRoot C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/servidorB1
</VirtualHost>
<VirtualHost 192.168.0.2>
ServerName servidorB2.apache2.com
DocumentRoot C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs
/servidorB2
</VirtualHost>
En este caso no incluimos el '*' para forzar a que cada servidor escuche por una IP concreta, pero incluimos la directiva
NameVirtualHost cuyo argumento debe coincidir con el del servidor web con el que está conectado.
Actividad 5.11
Enunciado:
Servidor virtual por defecto "_default_"
Solución:
Existe un nombre o indicador de servidor virtual por defecto “_default_” que atiende aquellas peticiones que no son atendidas por
ningún otro servidor virtual.
<VirtualHost _default_>
23 de 29
Curso Mentor Apache
Se puede añadir después de la etiqueta "_default_" un número de puerto y de esa forma se podrían tener servidores por defecto
diferentes para cada puerto.
24 de 29
Curso Mentor Apache
Glosario
Glosario Unidad 5
Concepto Definición
Permiten la posibilidad de alojar varios dominios en una sola máquina. Es decir, se trata de servir
Host Virtual
diferentes sitios web con una sola entidad de Apache.
El host virtual basado en IPs diferencia los sitios web basándose en sus direcciones IP.
Host Virtual IP
El host virtual basado en nombres usa sólo el nombre del host y de esta manera puede alojar muchos
Host Virtual Nombre
sitios web con la misma dirección IP.
Otros Glosarios
25 de 29
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
26 de 29
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 5 'Hosts Virtuales'
Los puntos a destacar de esta unidad son los siguientes:
1. Los hosts virtuales Apache2 nos permiten la posibilidad de alojar varios dominios en una sola máquina.
2. El host virtual heredará los parámetros del host principal que no se cambien para él de forma explícita.
3. Para la definición de hosts virtuales se utiliza la sección <VirtualHost> y en ella se incluyen las directivas que se
aplican a un determinado host virtual.
4. Como mínimo deben incluir las directivas DocumentRoot y ServerName.
5. Para usar hosts virtuales basados en nombre se debe especificar en el servidor qué dirección IP se va a usar para
atender las peticiones de los diferentes hosts mediante la directiva NameVirtualHost.
6. Dentro de cada bloque <VirtualHost>, necesitará como mínimo una directiva ServerName para indicar qué host se
sirve y una directiva DocumentRoot para indicar dónde están los contenidos a servir dentro del sistema de archivos.
7. La utilización de hosts virtuales en Windows funciona igual que en Edubuntu. La única diferencia es el archivo en el que
residen y el mecanismo de activación de los mismos.
27 de 29
Curso Mentor Apache
Autoevaluación Unidad 5
Autoevaluación
28 de 29
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 5
29 de 29
Curso Mentor Apache
Apache
Unidad 6: Autenticación y control de acceso
En este capítulo aprenderás a:
los conceptos de autenticación o identificación, autorización y control de acceso.
los mecanismos de Apache2 para implementar estos conceptos.
los diferentes modelos de seguridad de Apache2
los métodos de autenticación HTTP básico y digest, características así como los grupos de directivas aplicables en ellos.
Material complementario:
1. Archivo con las actividades de la unidad. Archivo U6_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U6_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 27
Curso Mentor Apache
Introducción
Objetivos
Conocer los conceptos de autenticación y control de acceso.
Comprobar que los mecanismos de seguridad establecidos funcionan correctamente.
Conocimientos previos
En esta unidad estudiamos mecanismos de seguridad disponibles en Apache2.
El requerimiento básico es haber superado las anteriores unidades y disponer de un servidor Apache bien configurado en ambos sistemas
operativos .
Contenidos
Unidad 6: Autenticación y control de acceso
1. Conceptos Generales
2. Autenticación: modelo básico de seguridad de Apache2
3. Directivas de autenticación
A. Ubuntu
1. Autenticación y autorizacion HTTP
2. Control de acceso: directivas Allow y Deny
3. Autenticación HTTP básica
4. Autenticación HTTP digest
B. Windows
1. Autenticación en Windows
2. Autenticación HTTP básica
3. Autenticación HTTP digest
C. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 27
Curso Mentor Apache
Conceptos Generales
Autenticación, autorización y control de acceso
Cuando el servidor Apache recibe la petición de una página web, antes de ofrecerla lleva a cabo varias acciones para verificar que dicha
petición esta autorizada.
Estas acciones son:
1. Autenticación: proceso por el cual se verifica la identidad del usuario
2. Autorización: proceso por el cual se verifica que un usuario de identidad conocida tiene acceso a la información solicitada.
3. Control de Acceso: proceso por el cual se verifica que la máquina desde la que se ha hecho la solicitud de información tiene
acceso a la misma.
1.I dentificación o Autenticación
La primera operación se llama Identificación o Autenticación y su objetivo es comprobar la identidad del usuario, es decir, ¿es realmente
quien dice ser?. El usuario proporciona información acerca de su identidad para que el servidor pueda identificarle. Normalmente el usuario
da su nombre de usuario (login) y su contraseña. Estos dos datos también se llaman credenciales y si el servidor comprueba que estas
credenciales coinciden con las almacenadas en su base de datos, la primera operación está concluida.
Esta operación también puede ser realizada mediante la utilización de certificados digitales.
Aunque para la Autenticación se puede utilizar el propio archivo de usuarios del sistema (/etc/passwd) no es conveniente.
Mediante los diferentes módulos de autenticación (mod_auth_basic, mod_auth_digest, etc) se utilizan archivos (htpasswd,
htdigest,...) que tienen una estructura similar a /etc/passwd y permiten autenticar usuarios no registrados en el sistema.
Si la autenticación de usuarios se hace mediante bases de datos el módulo utilizado es mod_auth_dbm y si se hace contra un
servidor LDAP el módulo es mod_authnz_ldap.
Si se quiere configurar tanto la Autenticación como la Autorización y el Control de acceso utilizando archivos .htaccess, es necesario
incluir la directiva AllowOverride asignándole el valor AuthConfig para permitir el uso de las distintas directivas de autenticación.
2. Autorización
La segunda operación es la Autorización. Cuando el usuario ha probado ser quien dice ser, el servidor debe comprobar si dicho usuario
tiene acceso a la información que pretende visitar. Para ello el servidor dispone de una lista de los usuarios que pueden acceder a los
recursos que ofrece.
Para la Autorización se suele utilizar listas de permisos en las que se enumeran cada una de las acciones que puede realizar un usuario, o
las que no puede hacer. Para facilitar el control de estas listas los usuarios se agrupan y los permisos se otorgan al grupo. Desde Apache2
la Autorización es gestionada mediante directivas <Directory> en el archivo de configuración o mediante la utilización de archivos
.htaccess que configuran el directorio.
3. Control de acceso
El control de acceso se utiliza para establecer y controlar las máquinas que tienen acceso a un recurso independientemente del usuario que
accede, ya que este control se hace antes, en el proceso de Autenticación. Desde Apache2 el control de acceso se gestiona mediante las
directivas <Directory>, <Files> y <Location>, o mediante el archivo de configuración .htaccess para controlar un directorio
concreto.
3 de 27
Curso Mentor Apache
El modelo básico de seguridad de Apache2 se basa en los conceptos de:
autenticación 'sencilla' > equivalente a la Autenticación y Autorización (Autenticación HTTP)
autenticación 'severa' > equivalente al Control de acceso (Autenticación Host)
La autenticación 'sencilla' depende de la información que proporciona el usuario, como son por ejemplo, el nombre de usuario y la
contraseña.
La autenticación 'severa' utiliza credenciales que han sido obtenidas sin preguntar al usuario directamente, como es por ejemplo, la
dirección IP de la máquina desde la que se conecta el usuario.
Según el tipo de autenticación, Apache2 responde con un tipo de error diferente.
Para la autenticación 'sencilla' si los datos no son correctos responde con un error 401 y permite infinitos reintentos.
En el proceso de autenticación 'severa' si las credenciales son erróneas Apache2 devuelve un error 403 de prohibición sin dar opción a
volver a intentarlo.
Se pueden combinar ambos tipos de autenticación mediante la utilización de la directiva Satisfy. Los casos posibles son:
No se requiere autenticación. Ninguna.
Sólo se requiere autenticación severa (IP).
Sólo se requiere autenticación sencilla (nombre de usuario y contraseña).
Se aceptan ambos tipos de autenticación y se permite el acceso si una de ellas es correcta.
Se requieren ambos tipos de autenticación.
Satisfy: especifica la política de acceso a seguir cuando se usan tanto Allow como Require.
Esta directiva sólo es útil si se va restringir el acceso a un área concreta con un nombre de usuario/contraseña y dirección del cliente.
Posibles parámetros de Satisfy:
Posibles utilizaciones:
1. Sólo los usuarios mencionados pueden acceder al recurso.
Require user userid [userid] ...
2. Sólo los usuarios pertenecientes a los grupos mencionados pueden acceder al recurso.
Require group group-name [group-name] ...
3. Todos los usuarios pueden acceder al recurso.
Require valid-user
Ejemplo: se quiere permitir que todo el mundo tenga acceso total a su red local o a una parte del sitio web, pero requerir que los visitantes
de fuera de la red local introduzcan una contraseña. La configuración sería similar a la siguiente:
Require valid-user
Allow from 192.168.0.
Satisfy Any
4 de 27
Curso Mentor Apache
Directivas de autenticación
A tener en cuenta...
1. Antes de comenzar a hablar acerca de las comunicaciones seguras en Apache2 debemos comprobar que Apache2 está compilado con
los módulos de seguridad que vamos a utilizar.
Para ver los módulos incluidos en Apache ejecutar:
#apache2 -l
Pero si queremos saber cuáles son los módulos activados hemos de acceder a /etc/apache2/mods-enabled/.
Para activar la autenticación necesitamos los módulos siguientes:
mod_auth_basic: para autenticación básica.
mod_auth_digest: para autenticación con el método digest (usuario y password encriptados).
Para utilizar los mecanismos proporcionados por Apache para el proceso de autenticación deben esta activado el módulo correspondiente al
método que se vaya a utilizar. Para ello utilizamos la orden a2enmod.
#a2enmod auth_basic
#/etc/init.d/apache2 force-reload
2. Las directivas utilizadas deben estar incluidas en el archivo de configuración del servidor:
bien en secciones <Directory> o
bien en archivos .htaccess de configuración por directorios
Para utilizar archivos .htaccess se necesita la directiva AllowOverride con el valor AuthConfig que permite incluir
directivas relativas a la autenticación en estos archivos.
AllowOverride AuthConfig
Directivas de autenticación
Las directivas relacionadas con la autenticación son las siguientes:
Directiva Descripción
AuthType Indica cuál es el tipo de autenticación que va a utilizarse.
AuthName Indica el nombre del dominio de autenticación enviado al programa cliente.
AuthUserFile Indica la ruta hacia el archivo de usuarios para la autenticación básica (módulo
mod_auth).
AuthDigestFile Indica la ruta hacia el archivo de usuarios para la autenticación MD5 (módulo
mod_digest). La orden htdigest gestiona este archivo. El algoritmo de codificación MD5
es mas seguro que el utilizado por el método básico.
AuthGroupFile Indica la ruta hacia el archivo de grupos (módulo mod_auth).
La versión de Apache 2.2 incorpora un nuevo conjunto de módulos que separan el control de la autenticación (mod_authn_*) y la
autorización de acceso (mod_authz_*).
5 de 27
Curso Mentor Apache
Ubuntu
6 de 27
Curso Mentor Apache
En el primer punto del capítulo se han explicado las diferentes operaciones que requiere Apache para permitir el acceso de los usuarios a
los recursos que él gestiona. Respecto al proceso de Autenticación existen dos métodos:
Básico o Simple: el usuario en el navegador web introduce su login o nombre de usuario y contraseña y se envían al servidor sin
cifrar.
Digest: el usuario en el navegador web introduce su login y contraseña y se envían al servidor cifrados.
En ambos métodos es Apache quien se encarga de comprobar, desde su archivo de texto, base de datos o servidor LDAP, que los valores
dados por el usuario son correctos.
Estos dos métodos sólo autentican al usuario cuando intenta acceder a un recurso. Apache comprueba si es un usuario válido, y le permite
o no acceder al recurso. Pero en ninguno de los dos métodos los datos que, a continuación, se envían del navegador web al servidor o
viceversa van cifrados. Son métodos que controlan el acceso a los recursos, pero no protegen la información intercambiada en la
comunicación cliente-servidor una vez se ha comprobado que el acceso es válido.
7 de 27
Curso Mentor Apache
Control de acceso
Directivas Allow / Deny
Como ya se explicó en el punto primero, es posible permitir el acceso a los usuarios en función de la máquina desde la que hacen las
solicitudes de información.
En este caso se utilizan las directivas Allow y Deny que permiten y rechazan, respectivamente, el acceso en función del nombre o la
dirección de la máquina desde la que se hace la solicitud de información.
Relacionada con ellas está la directiva Order que indica a Apache2 en qué orden tiene que aplicar las directivas Allow y Deny.
La sintaxis es:
Allow from dirección
dirección: dirección IP o nombre de dominio completamente cualificado (o un nombre de dominio parcial). Se pueden dar varias
direcciones o nombres de dominio.
Ejemplos de utilización:
1. Denegar el acceso a la máquina con IP 250.66.19.10
Deny from 250.66.19.10
Los usuarios que se conecten a esta máquina no podrán ver ninguna información que esté afectada por esta directiva.
2. Denegar el acceso desde un nombre de máquina.
Si el nombre de la máquina es servidor.apache2.com
Deny from servidor.apache2.com
Las peticiones procedentes de dicha máquina serán denegadas.
3. Denegar el acceso a un dominio entero:
Si se quiere bloquear el acceso a un dominio entero se puede especificar sólo parte de una dirección o nombre de dominio:
Deny from 250.66.19
Deny from dominio1.com dominio2.com
Como ya sabemos la directiva Order indica en qué orden se aplican Allow y Deny. En el ejemplo siguiente primero se evalúa Deny (from
all) y no se permite el acceso a ningún usuario. A continuación se evalúa Allow que permite el acceso sólo a usuarios de
host.dominio1.com:
Order deny,allow
Deny from all
Allow from host.dominio1.com
Si se usa sólo la directiva Allow (sin combinar con Deny) se permitiría el acceso a usuarios de esa máquina y a cualquier otro usuario. Y
lo que se quiere es dejar entrar sólo a los de host.dominio1.com.
8 de 27
Curso Mentor Apache
El módulo que controla este método de autenticación es mod_auth_basic y tiene la ventaja de que está soportado por todos los
navegadores web. Por el contrario, tiene el inconveniente de que el login y la contraseña no van cifradas del navegador web al servidor.
La autenticación Básica utiliza el método de codificación Base64 (no encriptación) que puede, desde Perl y haciendo uso de la función
decode_base64, obtener la contraseña de cualquier usuario.
En el archivo /etc/apache2/sites-available/default, o en el archivo relativo al host virtual correspondiente, habrá que añadir
un bloque <Directory>...</Directory> por cada directorio que se quiera proteger:
<Directory "/var/www/privado">
AuthType Basic
AuthName "Directorio privado"
AuthUserFile /etc/apache2/passwd/.htpasswd
Require valid-user
</Directory>
Donde:
Directory: indica que las directivas siguientes actúan sobre el directorio /var/www/privado y sus subdirectorios. Por
lo tanto, se va a proteger este directorio y sus posibles subdirectorios.
AuthName: nombre del dominio de autenticación. Define el conjunto de recursos que estarán sujetos a los mismos
requisitos de autenticación. También es el texto que aparecerá en la ventana que pide el usuario y la clave e indica el
nombre del dominio de autenticación (realm). El navegador web lo utiliza para determinar qué contraseña enviar para
un dominio de autenticación dado.
En el ejemplo anterior, una vez que el usuario se ha autenticado en el dominio "Directorio privado", se intentará
utilizar la misma contraseña en cualquier 'área' del mismo servidor que tenga el mismo valor para AuthName
"Directorio privado". De esa forma no se le pide al usuario de nuevo la contraseña.
AuthType: tipo de autenticación.
Basic: la contraseña se negocia sin encriptar
Digest: la contraseña se negocia encriptada
AuthUserFile: ubicación del archivo de texto que contendrá los nombres de usuario y contraseñas usadas en la autenticación
HTTP básica. Se suele llamar .htpasswd. Previamente hay que crear el directorio /etc/apache2/passwd.
AuthGroupFile: ubicación del archivo de texto que contendrá los nombres de los grupos y los usuarios asociados a ellos usados
en la autenticación HTTP básica. Se suele llamar .htgroup.
AuthAuthoritative: toma los valores On (por defecto) y Off. Permite que, si usamos en un directorio varios métodos de
autenticación diferentes y falla el primero, se pase al segundo.
Require: usuarios que tienen acceso a los recursos especificados. Opciones disponibles:
valid-user: cualquier usuario incluido en el archivo de contraseñas .htpasswd.
user <lista de usuarios>: lista de usuarios de .htpasswd, separados por espacios, que pueden acceder. Si se incluye
esta opción hay que incluir también la directiva AuthUserFile para indicar donde se encuentra el archivo con la definición
de los usuarios usados en la autenticación HTTP básica.
group <lista de grupos>: lista de grupos, separados por espacios, que pueden acceder. Si se incluye esta opción hay que
incluir también la directiva AuthGroupFile para indicar donde se encuentra el archivo con la definición de los grupos
usados en la autenticación HTTP básica.
Satisfy: al utilizar esta directiva determina si se deben cumplir todos los requisitos (All) o cualquiera (Any).
9 de 27
Curso Mentor Apache
Configuración
Creación de un usuario
Para crear usuarios para el método de autenticación Básico se utiliza la orden htpasswd.
#htpasswd -c /etc/apache2/passwd/.htpasswd nombre_usuario
La opción -c permite crear el archivo .htpasswd con el primer usuario dado de alta, que además no tiene porque ser un
usuario existente en el sistema.
Los permisos del archivo .htpasswd deben ser 644, es decir lectura y escritura para el dueño, que es root y lectura para el
grupo y los otros.
Nota-1. Para seguir dando de alta usuarios no hay que poner el argumento -c de lo contrario creará siempre de nuevo el
archivo con sólo el último usuario incorporado.
Nota-2. Los usuarios creados para Apache2 no tienen porque estar dados de alta en el sistema, y si existen no tienen porque
tener la misma contraseña.
Nota-3. Este método es útil cuando se trabaja con pocos usuarios, entendiendo por pocos hasta unos 100 usuarios. A partir
de esta cantidad conviene utilizar sistemas de autenticación que validen al usuario contra una base de datos.
Creación de un grupo
Para generar los grupos hay que crear el archivo de texto /etc/apache2/passwd/.htgroup con el formato para cada
línea:
nombreGrupo: user1 user2 user3 ...
La directiva AuthGroupFile indica la ruta completa donde se encuentra el archivo que hemos creado con la definición de los
grupos.
...............................
AuthGroupFile /etc/apache2/passwd/.htgroup
...............................
Cada usuario del grupo lo añadiremos al archivo de contraseñas según el apartado anterior.
Si se quiere indicar que el grupo no importa se escribe:
AuthGroupFile /dev/null
También se puede indicar cualquier usuario, siempre que esté en el archivo de contraseñas, utilizando la directiva Require:
Require valid-use
Actividad 6.1
Enunciado:
Ejemplo de creación de un usuario 'usuario1' con acceso restringido al sitio 'privado'.
Solución:
1. Creamos el directorio 'privado' con acceso restringido al usuario usuario1.
#mkdir /var/www/privado
Copiar a este directorio una página web sencilla que identifiquemos fácilmente de nombre index.html.
2. Creamos el directorio donde almacenar las contraseñas (si no existe), por ejemplo:
#mkdir /etc/apache2/passwd
Nota: es importante que el archivo .htpasswd no esté accesible desde la web (fuera de DocumentRoot).
10 de 27
Curso Mentor Apache
3. Damos de alta al usuario usuario1 en el archivo de contraseñas:
#htpasswd -c /etc/apache2/passwd/.htpasswd usuario1
New password:XXXXXX
Re-type new password:XXXXXX
Adding password for user usuario1
4. Comprobamos que se ha dado de alta el usuario usuario1 en .htpasswd:
#more /etc/apache2/passwd/.htpasswd
usuario1:Uc2mbt97WwWCE
Ahora ya tenemos todo preparado para configurar las dos formas diferentes de autenticación básica.
1. Globalmente : utilizando el archivo de configuración /etc/apache2/sites-available/default en el que habría que añadir
un bloque <Directory>...</Directory> para el directorio que queremos proteger:
Alias /privado /var/www/privado
<Directory "/var/www/privado">
AuthType Basic
AuthName "Directorio privado"
AuthUserFile /etc/apache2/passwd/.htpasswd
Require user usuario1
</Directory>
Recordar que hay que forzar a Apache2 a que lea sus archivos de configuración con force-reload.
Probamos la configuración desde el navegador: ir a la URL http://servidor.apache2.com/privado/ y aparece la ventana:
y visualizamos el contenido del archivo index.html creado en dicho directorio.
Los archivos .htaccess se leen cada vez que hay una petición de páginas y no hay que reiniciar el servidor web para que se
activen los cambios realizados.
Creamos en /var/www/privado/ el archivo .htaccess con el contenido siguiente:
#vi /var/www/privado/.htaccess
AuthType Basic
AuthName "Directorio privado"
11 de 27
Curso Mentor Apache
AuthUserFile /etc/apache2/passwd/.htpasswd
Require user usuario1
Ahora habría que comentar en /etc/apache2/sites-available/default el grupo de directivas incluidas para la
autenticación global e incluir un grupo <Directory></Directory> con la directiva AllowOverride que habilite la utilización de
archivos .htaccess con autenticación:
Alias /privado /var/www/privado
<Directory "/var/www/privado">
AllowOverride AuthConfig
</Directory>
Probamos la configuración desde el navegador mediante .htaccess.
Ir a la URL http://servidor.apache2.com/privado/ y aparece la misma ventana anterior pidiendo la identificación del usuario.
Visualizamos el contenido del archivo index.html creado en dicho directorio.
Actividad 6.2
Enunciado:
¿Cómo podemos eliminar un usuario del archivo de contraseñas?
Solución:
Utilizando la opción -D de la orden htpasswd.
Por ejemplo, eliminamos el usuario juan:
#htpasswd -D /etc/apache2/passwd/.htpasswd juan
12 de 27
Curso Mentor Apache
El módulo que controla este método de autenticación es mod_auth_digest. Tiene la ventaja de que el login y la contraseña
van cifradas del navegador web al servidor. Por el contrario, tiene el inconveniente de que no está soportado por todos los
navegadores web.
Lo primero que hay que hacer es activar dicho módulo. Para ello:
#a2enmod auth_digest
#/etc/init.d/apache2 force-reload
Utiliza MD5 (Message Digest Authentication) para generar un hash que es el que se transmite o envía al servidor.
En el archivo /etc/apache2/sites-available/default habría que añadir un bloque <Directory>...</Directory>
por cada directorio que queramos proteger:
<Directory "/var/www/privado">
AuthName "Directorio privado"
AuthType Digest
AuthDigestDomain http://servidor.apache2.com/privado/
AuthUserFile /etc/apache2/passwd/.htdigest
Require valid-user
</Directory>
Donde:
AuthName: indica el nombre del dominio de autenticación (realm).
AuthType: indica que el método a usar es 'Digest'.
AuthDigestProvider: indica el soporte utilizado para la autenticación. Por defecto es file (archivo).
AuthDigestDomain: dominio protegido con autenticación digest.
AuthUserFile: indica donde se encuentra el archivo de contraseñas que ahora llamamos .htdigest.
También se pueden utilizar archivos .htaccess creados en los directorios a proteger con este tipo de autenticación.
13 de 27
Curso Mentor Apache
Configuración
Creación de un usuario
La creación de usuarios en el método de autenticación Digest requiere la orden htdigest.
#htdigest /etc/apache2/passwd/.htdigest zona_privada nom_usuario
El parámetro 'zona_privada' debe coincidir exactamente con el nombre del dominio de autenticación dado en la directiva
AuthName ya que, cuando se crea un usuario, se hace incluyéndolo a un dominio de autenticación concreto.
Si la directiva Require indica 'valid-user', se consideran usuarios válidos sólo los que pertenecen al dominio de autenticación
dado en AuthName y las contraseñas sólo pueden utilizarse en este dominio.
En nuestro caso 'zona_privada' será sustituido por “Directorio privado”.
En el ejemplo añadimos el usuario usuario1 al archivo de contraseñas /etc/apache2/passwd/.htdigest. El programa nos
pedirá la clave y luego nos la vuelve a preguntar para confirmarla.
Si se utiliza el archivo .htdigest por primera vez y no existe, hay que incluir la opción -c:
#htdigest -c /etc/apache2/passwd/.htdigest “Directorio privado” usuario1
Adding password for usuario1 in realm Directorio privado.
New password: XXXXXX
Re-type new password: XXXXXX
El contenido almacenado en dicho archivo es el siguiente:
#more /etc/apache2/passwd/.htdigest
usuario1:Directorio privado:2a1bc3d31d53d6abf5c8143c2b3ab052
En este tipo de autenticación HTTP la pertenencia de un usuario a un grupo queda determinada por su inclusión en un
archivo de grupos y su referencia mediante la directiva AuthDigestGroupFile tanto en secciones <Directory> como en
archivos .htaccess.
Actividad 6.3
Enunciado:
Creación de un sitio 'privado' llamado "Directorio privado DIGEST" restringido al usuario1 mediante autenticación digest.
Solución:
1. Utilizamos el mismo directorio privado con acceso restringido al usuario usuario1 que con autenticación básica. En él disponemos de un
archivo index.html.
2. Utilizamos el mismo directorio donde almacenar las contraseñas /etc/apache2/passwd y damos de alta al usuario usuario1 en el
archivo de contraseñas digest:
#htdigest -c /etc/apache2/passwd/.htdigest “Directorio privado DIGEST” usuario1
Podemos ahora establecer dos formas diferentes de autenticación:
1. Globalmente: utilizando el archivo de configuración /etc/apache2/sites-available/default en el que habría que
añadir un bloque <Directory>...</Directory> para el directorio que queremos proteger:
Alias /privado /var/www/privado
<Directory "/var/www/privado">
AuthType digest
AuthName "Directorio privado DIGEST"
AuthUserFile /etc/apache2/passwd/.htdigest
14 de 27
Curso Mentor Apache
Require user usuario1
</Directory>
Recordar que hay que forzar a Apache2 a que lea sus archivos de configuración con force-reload y probamos la configuración
desde el navegador:
Ir a la URL http://servidor.apache2.com/privado/ y aparece la ventana siguiente:
Al introducir las credenciales de usuario1 muestra:
#vi /var/www/privado/.htaccess
AuthType digest
AuthName "Directorio privado DIGEST"
AuthUserFile /etc/apache2/passwd/.htdigest
Require user usuario1
Ahora habría que comentar en /etc/apache2/sites-available/default el grupo de directivas incluidas para la autenticación
global e incluir un grupo <Directory></Directory> con la directiva AllowOverride que habilite la utilización de archivos .htaccess con
autenticación:
Alias /privado /var/www/privado
<Directory "/var/www/privado">
AllowOverride AuthConfig
</Directory>
Importante: desconexión
Importante: desconexión
Una vez se ha autenticado el usuario el navegador cachea la credencial (nombre de usuario y contraseña) de forma que, si el navegador
intenta acceder a otro recurso de la zona protegida, el servidor devuelve el error 401 (Authorization Required) y el navegador
15 de 27
Curso Mentor Apache
automáticamente volverá a mandar las credenciales cacheadas al servidor.
Es decir, con la autenticación HTTP no se puede conseguir una desconexión automática pasado un determinado periodo de tiempo.
16 de 27
Curso Mentor Apache
Windows
A tener en cuenta ...
Los conceptos de Autenticación, Autorización y Control de acceso dados en el punto de Conceptos Generales son igualmente válidos para
Windows. En consecuencia ,en este punto veremos configuraciones adaptadas a Windows en sus archivos correspondientes de los
ejemplos dados.
La estudiada directiva AuthType determina el tipo de autenticación de usuario: basic o digest. La diferencia entre ellas ha sido ya
explicada.
17 de 27
Curso Mentor Apache
De la misma forma que en Ubuntu, el funcionamiento de la autenticación HTTP básica es el siguiente. El navegador solicita el
acceso a un documento protegido y el servidor Apache2 envía una cabecera con el estado 401 y otra para la respuesta de
autenticación. La cabecera contiene el tipo de autenticación, en este caso básica, y el nombre del dominio.
El navegador muestra un ventana en la que solicita el nombre de usuario y la contraseña. La información es enviada al
servidor Apache2 que comprueba su validez. Si no es válida vuelve a solicitar la información volviendo a enviar las cabeceras
401 y la de autenticación.
A partir de ahora el servidor no pedirá autenticación por cada página del directorio que se consulte. El navegador envía la
información 'usuario/contraseña' que tiene en caché.
El módulo que controla este método de autenticación es mod_auth_basic cuya línea LoadModule debe ser activada el
archivo httpd.conf:
LoadModule auth_basic_module modules/mod_auth_basic.so
/privado"
<VirtualHost *:80>
ServerName servidor.apache2.com
ServerAlias servidor
ErrorLog "logs/error.log"
/privado">
Order allow,deny
18 de 27
Curso Mentor Apache
</limit>
</limitexcept>
AuthType Basic
/bin/passwd"
Require valid-user
</Directory>
</VirtualHost>
El significado de las directivas de configuración incluidas es idéntico que en Ubuntu. Lo único que cambia es la ruta y nombre
de los archivos y directorios implicados.
El archivo C:/Program Files/Apache Software Foundation/Apache2.2/bin/passwd que almacena los usuarios de
Apache2 con sus contraseñas, se crea utilizando la orden htpasswd.exe, que se encuentra en el directorio /bin/ de Apache2.
C:\Archiv...\Apache2.2\bin>htpasswd -nb nombre_usuario contraseña > passwd
Podemos utilizar la opción -c crea un nuevo archivo. Sólo habría que utilizarlo la primera vez ya que, si existe , reescribe y se pierderían los
demás usuarios.
La opción -b (modo batch) permite introducir la contraseña desde la línea de órdenes. La ventaja de usar -b es que permite introducir los
datos seguidos, pero tiene el inconveniente de que la contraseña es visible mientras se teclea.
Para añadir usuarios, una vez creado el archivo (-c) hay que ejecutar de la misma forma sin la opción -c. Si no se quiere que se vea la
contraseña no incluir la opcion -b.
Es importante que el archivo indicado en AuthUserFile esté ubicado fuera del directorio htdocs donde se alojan las páginas y evitar su
acceso a los usuarios, es decir, fuera de DocumentRoot. La estructura de dicho archivo es idéntica que en Ubuntu.
Si accedemos a http://servidor.apache2.com/privado aparece la ventana siguiente:
19 de 27
Curso Mentor Apache
Al introducir el nombre de usuario y contraseña se comparan con el contenido del archivo passwd para validar y muestra (por
ejemplo):
Si se quiere utilizar el archivo .htaccess en el directorio a proteger, la sección Directory incluida en httpd-vhosts.conf
se elimina y las directivas incluidas se añaden a .htaccess. Además deberemos incluir la directiva siguiente:
AllowOverride AuthConfig
También se puede controlar el acceso a nivel grupo. Para ello se definen grupos de usuarios y en vez de permitir el acceso
uno a uno, se autoriza al grupo.
Supongamos que los usuarios usuario1 y usuario2 forman parte de un grupo de usuarios que llamaremos users.
Creamos un archivo .htgroup en la carpeta C:\Archivos de programa\Apache Software
Foundation\Apache2.2\bin\ con el Bloc de notas, que incluya una línea como esta:
users: usuario1 usuario2
El grupo de directivas que deberemos ahora incluir en la sección Directory de httpd-vhosts.conf es el siguiente:
AuthType Basic
AuthName "Directorio privado"
AuthUserFile “C:\Archivos de programa\Apache Software Foundation\Apache2.2
\bin\passwd”
AuthGroupFile “C:\Archivos de programa\Apache Software Foundation\Apache2.2
\bin\.htgroup”
Require group users
20 de 27
Curso Mentor Apache
Comprobar que la línea LoadModule en httpd.conf correspondiente al módulo auth_digest está descomentada:
LoadModule auth_digest_module modules/mod_auth_digest.so
Creación de un usuario
C:\Archiv...\Apache2.2\bin>htdigest.exe -c .htdigest zona_privada nombre_usuario
El parámetro 'zona_privada' debe coincidir exactamente con el nombre del dominio de autenticación dado en la directiva
AuthName ya que, cuando se crea un usuario, se hace incluyéndolo a un dominio de autenticación concreto.
Si la directiva Require indica 'valid-user', se consideran usuarios válidos sólo los que pertenecen al dominio de autenticación
dado en AuthName y las contraseñas sólo pueden utilizarse en este dominio.
En nuestro caso 'zona_privada' será sustituido por “Directorio privado”.
En el ejemplo añadimos el usuario usuario1 al archivo de contraseñas .htdigest. El programa nos pedirá la clave y luego
nos la vuelve a preguntar para confirmarla.
Si se utiliza el archivo .htdigest por primera vez y no existe, hay que incluir la opción -c.
Si ahora vamos a http://servidor.apache2.com/privado nos pide la autenticación. Si escribimos el usuario elvira veremos que no nos da
paso, sin embargo, si indicamos el usuario1 y su contraseña veremos el contenido de la carpeta privado.
21 de 27
Curso Mentor Apache
Ahora habría que comentar en httpd.conf el grupo de directivas incluidas para la autenticación global e incluir un grupo <Directory>
</Directory> con la directiva AllowOverride que habilite la utilización de archivos .htaccess con autenticación:
<Directory "C:\Archivos de programa\Apache Software Foundation\Apache2.2 \htdocs
\privado">
AllowOverride AuthConfig
</Directory>
Probamos la configuración desde el navegador mediante .htaccess.
Ir a la URL http://servidor.apache2.com/privado/ y aparece la misma ventana anterior pidiendo la identificación del usuario.
Visualizamos el contenido del archivo index.html creado en dicho directorio.
22 de 27
Curso Mentor Apache
Glosario
Glosario Unidad 6
Concepto Definición
Autenticación Proceso por el cual se verifica la identidad del usuario.
Autorización Proceso por el cual se verifica que un usuario de identidad conocida tiene acceso a la información
solicitada.
Codificación Base64 Es un sistema de codificación que permite representar datos binarios usando únicamente los caracteres
imprimibles ASCII.
Dominio de Define el conjunto de recursos que estarán sujetos a los mismos requisitos de autenticación.
autenticación
Hash Un hash o función resumen hace referencia a una función o método para generar claves que representen de
manera unívoca a un documento, registro, archivo, etc.
Otros Glosarios
23 de 27
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
24 de 27
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 6 'Autenticación, autorización y control de
acceso'
Los puntos a destacar de esta unidad son los siguientes:
1. La Identificación o Autenticación tinen como objetivo comprobar la identidad del usuario
2. La Autorización permite al servidor comprobar si el usuario tiene acceso a la información que pretende visitar
3. El Control de acceso se utiliza para establecer y controlar las máquinas que tienen acceso a un recurso independientemente del
usuario que accede
4. Para activar la autenticaciónse necesitan los módulos mod_auth_basic para autenticación básica (usuario y password sin
encriptar) y mod_auth_digest para autenticación con el método digest (usuario y password encriptados).
5. La directiva AuthName indica el nombre del dominio de autenticación enviado al programa cliente.
6. Los usuarios creados para Apache2 no tienen porque estar dados de alta en el sistema, y si existen no tienen porque tener la misma
contraseña.
7. Se pueden utilizar archivos .htaccess creados en los directorios a proteger con ambos tipos de autenticación básica y digest.
25 de 27
Curso Mentor Apache
Autoevaluación Unidad 6
Autoevaluación
26 de 27
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 6
27 de 27
Curso Mentor Apache
Apache
Unidad 7: Seguridad en Apache con SSL
En este capítulo aprenderás a:
el concepto de servidor seguro
las técnicas de criptografía simétrica y asimétrica
la instalación, activación y funcionamiento del módulo ssl
la configuración de un sitio seguro utilizando SSL
la creación de una Autoridad de Certificación
cómo obtener un certificado digital para el servidor seguro
cómo obtener un certificado digital para el cliente y ser firmado por una CA
cómo se instala un certificado personal en el navegador web
algunas indicaciones básicas sobre cómo salvaguardar la seguridad del servidor web
Material complementario:
1. Archivo con las actividades referidas a lo largo del capítulo. Archivo U7_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U7_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 39
Curso Mentor Apache
Introducción
Objetivos
Conocer términos como firma digital, autoridad de certificación,...
Realizar la instalación y configuración de OpenSSL.
Realizar la creación de una autoridad de certificación.
Utilizar los certificadosdigitales.
Utilizar un analizador de vulnerabilidades.
Conocimientos previos
En esta unidad explicamos los conceptos sobre seguridad en Apache2 y la configuración que debemos hacer sobre el servidor para
disponer de un servidor web seguro. El requerimiento es haber comprendido y realizado las actividades de la unidad 6 y haber
entendido los conceptos explicados en esta unidad.
Contenidos
Unidad 7: Seguridad en Apache con SSL
A.General
1. Servidores seguros
2. Proceso de firma digital
3. SSL (Secure Sockets Layer)
4. Conceptos importantes
B. Ubuntu
1. SSL y Apache2
2. Autenticación del cliente mediante certificados.
C. Windows
D. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 39
Curso Mentor Apache
Servidores seguros
SSL
SSL (Secure Socket Layer) es un protocolo que permite establecer una comunicación segura y codificada entre el servidor y el
navegador.
SSL se desarrolló para trabajar con el protocolo HTTP, creando un protocolo de transmisión de hipertexto seguro (HTTPS).
HTTPs se basa en dos tipos de criptografía:
Criptografía simétrica o de clave compartida
Criptografía asimétrica o de clave pública/privada
Se utilizan ambos tipos porque se aprovechan las ventajas de cada una y se evitan sus inconvenientes.
La criptografía asimétrica funciona bien para la autenticación, ya que cada usuario protege su clave secreta, pero es lenta para el
cifrado.
La criptografía simétrica es rápida en el cifrado y mala para la gestión de claves.
A continuación se incluye una breve explicación de cada una de ellas.
Encriptación simétrica: técnica basada en la utilización de una clave conocida tanto por el emisor como por el receptor o
destinatario. La misma clave que cifra en el origen descifra en el destino.
El usuario A y el usuario B conocen la clave K.
El 'Mensaje' original, utilizando un algoritmo de encriptación simétrico y la clave K, genera el 'Mensaje K' que es transmitido al
usuario B. Este, aplicando la misma clave y el algoritmo inverso, obtiene el 'Mensaje' original.
Ventaja: es muy eficiente para el cifrado de grandes volúmenes de información ya que los algoritmos utilizados son muy
rápidos. Pero, para que sea inalterable frente a ataques por criptoanálisis, la clave debe ser mayor de 40 bits. Cuanto mayor
sea el tamaño de la clave mas robusto será el algoritmo de cifrado.
Inconveniente: ambas partes deben conocer la clave. Se ha de transmitir la clave con el riesgo que esto supone.
Los algoritmos de cifrado simétrico más utilizados:
1. DES (Data Encryption Standard, 1976): está cayendo en desuso y ha sido reventado en numerosas pruebas de
criptoanálisis.
3 de 39
Curso Mentor Apache
2. IDEA (International Data Encryption Algorithm, 1992): trabaja con claves de 128 bits y nunca se ha roto, de momento.
Encriptación asimétrica: técnica basada en la utilización de dos claves: pública y privada.
La clave pública cifra
La clave privada descifra
Según esta técnica cada usuario tiene dos claves:
La clave pública es conocida por otros usuarios en otras máquinas. Se publica.
La clave privada solo la conoce el dueño de la clave. No se publica.
Estas claves se generan al mismo tiempo dando lugar a pares relacionados matemáticamente, de forma que la combinación pública-
privada es única.
El algoritmo utilizado tiene hasta 1024 bits, y tiene un coste de computación elevado.
La información que recibe un usuario será segura mientras él controle sus claves privadas. El usuario puede cambiar su clave privada
en cualquier momento y puede publicar su clave pública asociada para sustituir la clave pública obsoleta.
Según esta técnica:
1. el usuario A tiene dos claves, una pública y otra privada (que sólo conoce él).
2. se supone que el usuario A quiere transmitir un mensaje sólo al usuario B.
3. el usuario A conoce la clave pública de B y mediante un algoritmo de encriptación simétrico cifra el mensaje que transmite.
4. el usuario B, utilizando su clave privada y el algoritmo inverso, reproduce el mensaje original.
La utilización de esta técnica tiene como:
Ventaja:
la clave privada no se transmite.
Inconvenientes:
Esta técnica no utiliza algoritmos eficientes ya que no son rápidos cifrando y descifrando.
La garantía de la autenticidad de las claves públicas, es decir ¿quién garantiza que la clave pública de un usuario
es realmente de él? Aquí es donde entran en escena los certificados digitales de las claves públicas.
Esta técnica garantiza la:
1. Confidencialidad
El algoritmo garantiza que nadie que no conozca la clave privada del usuario B puede obtener el mensaje original. Sólo el
destinatario legítimo (usuario B) podrá leer el mensaje.
2. Autenticidad
Con este tipo de criptografía, y haciendo un uso diferente de las claves públicas y privadas de los usuarios implicados, se
puede garantizar la autenticidad del origen, es decir, asegurar quien generó el mensaje.
En la figura siguiente el usuario A cifra el mensaje con su clave privada y es transmitido al usuario B. El usuario B
usando la clave pública del usuario A obtiene el mensaje original. Dado que esa clave es pública, cualquiera puede
obtener el mensaje, pero esto garantiza al usuario B que la única persona que pudo haberlo generado es el usuario A
(ya que solamente él conoce la clave privada con que fue cifrado). Se garantiza la autenticidad.
4 de 39
Curso Mentor Apache
5 de 39
Curso Mentor Apache
¿En que consiste el proceso de firma digital?
La figura siguiente muestra la técnica de firma digital sobre un mensaje.
1. El usuario remitente aplica un algoritmo hash sobre los datos y genera un hash.
2. El usuario remitente con su clave privada transforma el hash en una firma digital.
3. El usuario remitente envía al usuario destinatario los datos, la firma y el certificado digital del remitente.
4. El usuario destinatario aplica el algoritmo hash a los datos recibidos y genera un valor hash.
5. El usuario destinatario utiliza la clave pública del usuario remitente y el valor has obtenido para comprobar la firma.
Si coincide se pueden asegurar dos cosas:
el mensaje no ha sido modificado: integridad del mensaje
la única persona que lo ha podido firmar ha sido el remitente: identidad del firmante
ya que es el único que posee la clave privada que se corresponde con la clave pública con que se ha descifrado. Todo el proceso es
transparente al usuario.
La asociación entre la firma digital y la persona que la utiliza es el objetivo de los certificados digitales.
La firma electrónica es un concepto directamente relacionado con la firma digital, sin embargo no son lo mismo, a pesar del
extendido uso indistinto y de una utilización léxica y práctica muy similar de estos dos conceptos.
6 de 39
Curso Mentor Apache
7 de 39
Curso Mentor Apache
8 de 39
Curso Mentor Apache
SSL permite establecer, de forma sencilla, conexiones seguras a través de Internet ya que todos los datos que se transfieren entre el
navegador web (cliente) y el servidor van cifrados.
TSL (Transport Layer Security) es la evolución de SSL y lo sustituirá con el tiempo. De hecho la versión 1 de TLS coincide
prácticamente con la versión 3 del protocolo SSL.
En la Unidad 6 se vieron los mecanismos que proporciona Apache2 para la transmisión de las credenciales de usuario desde el
navegador hacia el servidor. Se comprobó que la autenticación digest aseguraba esta transmisión enviando la identificación de usuario
encriptada. Pero en ningún caso se aseguraba la transmisión completa encriptada.
La utilización de SSL garantiza que todo el intercambio de información realizado durante una sesión de conexión se lleva a cabo de
forma segura mediante encriptación.
SSL en una conexión TCP/IP proporciona:
1. Confidencialidad: mediante el cifrado de la información transferida.
2. Integridad del mensaje: mediante el control sobre cualquier modificación intencionada o accidental en la información
mientras viaja por Internet.
3. Autenticación del servidor: el usuario puede asegurarse de la identidad del servidor al que se conecta y al que posiblemente
envíe información personal confidencial. Proporcionado por el certificado de servidor.
4. Autenticación de cliente: el servidor conoce la identidad del usuario y le permite o no su acceso a áreas protegidas. Para
ello el cliente debe tener instalado un certificado de cliente en su ordenador que identifica el servidor al cliente. Se evitan así
ataques comunes de captación de contraseñas mediante el uso de analizadores de protocolos (sniffers) o la ejecución de
reventadores de contraseñas. De todas formas, son muy pocos los servidores web que autentican a los usuarios de esta
manera.
SSL puede utilizar una clave de sesión de 40 o 128 bits. Esta clave se genera en cada transacción. En la medida que la longitud de
la clave sea mayor se hará más difícil romper la encriptación. La mayoría de los navegadores soportan claves de sesión de 128 bits.
SSL crea una capa (layer) entre el protocolo de HTTP y el protocolo de transporte TCP como muestra la figura siguiente:
La comunicación se realiza en dos fases:
1. Fase de saludo (handshaking, estrechar las manos): el cliente y el servidor se identifican mediante el intercambio de claves
públicas (encriptación asimétrica) y llevan a cabo la autenticación utilizando certificados digitales.
2. Fase de comunicación: se realiza el intercambio de datos utilizando (generalmente) una clave de tipo simétrico.
Los navegadores llevan ya incorporados un módulo SSL que se activa de forma automática cuando es necesario. Normalmente
cuando en la URL se escribe https://.
9 de 39
Curso Mentor Apache
Conceptos importantes
Certificado digital y Autoridad de certificación
10 de 39
Curso Mentor Apache
A. Certificado digital (CSR): conjunto de caracteres añadidos al documento (o archivo) que acredita
al autor (Autenticación)
y no ha existido ninguna manipulación de los datos (Integridad).
Contiene la clave pública y datos identificativos (nombre, apellidos, DNI,...) firmados digitalmente por una Autoridad Certificadora
(CA) en la que todos confían.
La CA es la tercera parte de confianza que permite que, personas que no se conocen entre sí, puedan confiar en los certificados que
se presentan el uno al otro. Son CA, por ejemplo, la Fábrica Nacional de Moneda y Timbre o Verisign.
El objetivo del certificado digital es asociar una clave pública a un usuario determinado.
El Certificado digital es utilizado por el usuario para firmar sus mensajes utilizando su clave privada (criptografía
asimétrica), que sólo el conoce y que impide que pueda después negar que es el autor.
La validez de la firma puede ser comprobada por cualquier otro usuario que tenga la clave pública del autor.
Funcionamiento:
A firmar el usuario un mensaje se aplica un algoritmo hash (MD5 ó SHA-1) sobre el texto y se obtiene un extracto o resumen
de longitud fija, que es específico para ese mensaje. Cualquier cambio en el mensaje, por pequeño que fuera, generaría un
resumen diferente, y no se correspondería con el que inicialmente firmó el usuario. El resumen obtenido (según el algoritmo
utilizado) tendrá una longitud entre 128 y 160 bits. A continuación se cifra mediante la clave privada del usuario. El algoritmo
de encriptación asimétrica más utilizado en este paso es el RSA. Así se obtiene un resumen final cifrado con la clave privada
del usuario, que se añade al final del mensaje para que se pueda verificar la autoría e integridad del mensaje por usuarios
interesados que tengan la clave pública del usuario autor del mensaje.
Comprobación:
La validez del mensaje, documento o archivo se comprueba mediante la clave pública del autor. El usuario que recibe el
mensaje dispone de la clave pública de remitente que ha obtenido a través de una CA y con ella descifra el resumen cifrado
del usuario autor y luego calcula el resumen hash que le correspondería al texto del mensaje recibido. Si ambos resultados
coinciden el documento no ha sufrido ninguna modificación y es válido. Si no coinciden no es válido
Legalmente la firma electrónica basada en un certificado digital tiene la misma validez jurídica que la firma manuscrita. Es el sistema
utilizado en la e-administración.
La identificación personal basada en un certificado digital tiene la misma validez que la presentación del DNI.
B. Autoridad de Certificación (CA): entidad en la que confían tanto el emisor del mensaje como el receptor. Por tanto, confían
también en los certificados digitales que emite dicha entidad.
Su objetivo es acreditar la correspondencia entre una clave y su propietario real.
Actúa como un notario 'electrónico' que extiende un certificado de claves que está firmado con su propia clave privada.
Todos los usuarios que poseen la clave pública de la CA pueden comprobar la validez del certificado y si éste ha sido
modificado.
La ley de firma electrónica define las CA como "prestadoras de servicios de certificación" y, según la legislación de cada país, "son
aquellas personas físicas o jurídicas que expiden certificados, pudiendo prestar, además otros servicios en relación con la firma
electrónica".
Muchos navegadores que soportan SSL tienen una lista de CA cuyos certificados son automáticamente aceptados. Si no está en la
lista el navegador pregunta al usuario si acepta o no la conexión.
Certificado (CRT): un CSR firmado por la CA es un CRT.
El archivo CRT contiene la clave pública del usuario, su nombre, el nombre de la CA, y está firmado digitalmente por la CA. De esta
forma otras entidades pueden verificar esta firma para comprobar la veracidad del certificado.
11 de 39
Curso Mentor Apache
El módulo de seguridad mod_ssl proporciona encriptación para el servidor web Apache2 a través de los protocolos SSL (Secure
Socket Layer) y TLS (Transport Layer Security). Este módulo utiliza las librerías y herramientas OpenSSL que proporcionan
comunicaciones encriptadas.
El módulo mod_ssl está disponible en el paquete apache2-common.
Para compilar Apache con soporte SSL es necesario tener instalado los fuentes de openssl, ya que al compilar se necesitan los
ficheros de cabecera (.h). También necesitamos tener instalado openssl para poder trabajar con los certificados.
Para instalar ambos paquetes ejecutar:
#apt-get install openssl libssl-dev
El paquete OpenSSL proporciona:
La librería crypto que implementa gran cantidad de algoritmos criptográficos muy utilizados.
La librería ssl que implementa los protocolos SSL y TSL.
La aplicación openssl (funciona en línea de comandos) que permite la utilización de la librería crypto. Puede hacer, entre
otras tareas, lo siguiente:
creación de claves RSA, DSA
creación de certificados X.509, CSR y CRL
calcular el MD5
encriptar y desencriptar
Para crear nuestra propia CA
Directiva Descripción
SSLEngine Activa el motor SSL
SSLCACertificateFile Indica el archivo con el certificado de la Autoridad de Certificación
SLCARevocationFile Archivo con la lista de certificados revocados (CRL) por la Autoridad de Certificación.
SLCertificateFile Archivo del certificado del servidor que puede incluir su clave privada.
SLCertificateKeyFile Archivo con la clave privada y codificada del certificado. Debe estar protegido.
SSLOptions Opciones SSL para directorios.
SSLProtocol Protocolos usados (SSLv2, SSLv3, TLS).
12 de 39
Curso Mentor Apache
Directiva Descripción
SLRequire Definición de requisitos de acceso.
SLRequireSSL Indica la obligación de usar HTTPS.
SSLUserName Variable que almacena el nombre de usuario.
SSLVerifyClient Nivel de verificación de clientes.
13 de 39
Curso Mentor Apache
Autoridad de certificación
Creación de nuestra propia CA
Certificado del servidor SSL
Para poder establecer una conexión SSL la máquina destino requiere un certificado de servidor.
El certificado de servidor contiene la firma de la Autoridad Certificadora (CA), la clave pública del destinatario, la fecha de caducidad,
etc.
Podemos solicitar un certificado digital a una Autoridad Certificadora (CA) pero cobrará por ello. Sin embargo podemos, mediante
openssl, crear nuestra propia Autoridad Certificadora transformando nuestro servidor en un servidor SSL y transmitir la información
cifrada sin ningún gasto.
Lógicamente los certificados emitidos por nuestra CA no tienen ninguna validez en entornos de producción. Los certificados
auto-firmados no son aceptados automáticamente en ningún navegador.
Un servidor web es seguro cuando utiliza una combinación del protocolo SSL (HTTPs) para poder enviar la información cifrada y
un certificado digital proporcionado por una CA.
Se reconoce el uso de comunicaciones mediante SSL porque en la URL aparece el prefijo https://.
El certificado digital, una vez autogenerado u obtenido, se debe de instalar en el servidor seguro SSL.
Para instalar el certificado en el servidor seguro SSL:
1. Comprobar si se tiene instalado el paquete openSSL y activado el módulo mod_ssl:
#ls /etc/apache2/mods-enabled
2. Comprobar que está activado el módulo SSL. Si no aparece utilizar la orden:
#a2enmod ssl
3. Instalar o comprobar si está instalado el paquete openssl:
#dpkg -s openss
La configuración la vamos a hacer sobre el servidor web de ejemplo servidor.apache2.com.
4. Ir a /etc/apache2 y crear el directorio /ssl en el se guardará el certificado que vamos a generar.
#wget http://librarian.launchpad.net/7477840/apache2-ssl.tar.gz
#gunzip apache2-ssl.tar.gz
#tar xvf apache2-ssl.tar
#sudo cp apache2-ssl-certificate /usr/sbin/
#sudo cp ssleay.cnf /usr/share/apache2/
Este paquete tar contiene dos archivos:
ssleay.cnf que hemos copiado en /usr/share/apache2
apache2-ssl-certificate que hemos copiado en /usr/sbin
6. Generar las claves asimétricas y el certificado (autofirmado) de la CA, y que en nuestro caso también van a ser del servidor SSL.
# apache2-ssl-certificate
creating selfsigned certificate
replace it with one signed by a certification authority (CA)
14 de 39
Curso Mentor Apache
If you want your certificate to expire after x days call this programm
with -days x
Generating a 1024 bit RSA private key
......................++++++
.....++++++
writing new private key to '/etc/apache2/ssl/apache.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:ES
State or Province Name (full name) [Some-State]:España
Locality Name (eg, city) []:Valencia
Organization Name (eg, company; recommended) []:ITE
Organizational Unit Name (eg, section) []:CURSO MENTOR
server name (eg. ssl.domain.tld; required!!!) []:servidor.apache2.com
Email Address []:webmaster@apache2.com
Con ello hemos creado el archivo /etc/apache2/ssl/apache.pem que contiene las claves (RSA PRIVATE KEY) y el
certificado (CERTIFICATE) pertenecientes al servidor servidor.apache2.com, firmado por nosotros mismos.
# more /etc/apache2/ssl/apache.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDdrNsQAj+2kG1qWe8JEGpn+GYYDmaxK1mArZx/5H6/AGGagB09
aoUkEKXDUNkQBIBUcJIa3idmU/ZYZays4oaoyOq48buyOQB4gSZWBQ+oJDKjGexV
..............................................
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICtzCCAiACCQDQKZM/WWiK2jANBgkqhkiG9w0BAQQFADCBnzELMAkGA1UEBhMC
RVMxEDAOBgNVBAgUB0VzcGHDsWExETAPBgNVBAcTCFZhbGVuY2lhMRQwEgYDV
..............................................
-----END CERTIFICATE-----
Instalar el certificado
Para ello:
1. Creamos los directorios y archivos necesarios:
#cd /etc/apache2/ssl
#mkdir miCA
#mkdir miCA/private
#mkdir miCA/newcerts
#touch miCA/index.txt
Importante: todas las órdenes se ejecutan desde /etc/apache2/ssl.
2. Copiamos las claves de la CA al directorio correspondiente con el nombre cakey.pem:
#cp apache.pem miCA/private/cakey.pem
3. Copiar el certificado de la CA al lugar necesario
15 de 39
Curso Mentor Apache
#cp apache.pem miCA/cacert.pem
4. Crear/Editar el fichero miCA/serial y guardarlo en modo texto. Su contenido debe ser una línea con el valor 01, como se
muestra a continuación.
#more miCA/serial
01
Ahora lo único que queda pendiente es incluir en el sitio las directivas que indican que el acceso al mismo se hace mediante el
protocolo HTTPs.
16 de 39
Curso Mentor Apache
Existen varias posibilidades para configurar SSL.
Cualquier cliente web puede conectarse a una URL determinada, usando https. En este caso el servidor enviará su certificado
al cliente para que este pueda descifrar la información que le llega del servidor y cifrar la que envía hacia el servidor.
Sólo los clientes web que tengan un determinado certificado pueden conectarse a una determinada URL.
Combinar el primer ejemplo con las técnicas de autenticación que hemos visto antes. De forma que cuando intentemos
acceder a una determinada URL usando https tendremos que autenticarnos primero.
1. Tomamos como referencia el archivo /etc/apache2/sites-available/default-ssl generado.
2. Tomamos como comienzo del sitio web (DocumentRoot) el directorio /var/www/htmls. Creamos el directorio
/ var/www/htmls, donde vamos a situar las páginas del servidor seguro.
3. Creamos un archivo index.html con un texto indicativo para poder probar.
# a2dissite default
17 de 39
Curso Mentor Apache
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Listen 443
Añadimos nuestro sitio seguro a los sitios disponibles con:
#a2ensite default-ssl
Site default-ssl installed; run /etc/init.d/apache2 reload to enable.
Reiniciamos Apache2 para que lea la nueva configuración.
#/etc/init.d/apache2 reload
Abrimos el navegador y damos la URL https://servidor.apache2.com y aparece la siguiente ventana indicando que el certificado de
que dispone este sitio ha sido emitido por una entidad desconocida:
18 de 39
Curso Mentor Apache
Pulsamos en Entiendo los riesgos y a continuación en Añadir Excepción. Luego pulsar sobre Confirmar excepción de seguridad.
Nos muestra nuestro texto de bienvenida al servidor seguro:
Si el certificado obtenido queremos tenga un mayor plazo de validez (por defecto tiene un mes) habría que ejecutar la orden con los
argumentos siguientes:
# apache2-ssl-certificate --force -days 365
Previamente tendríamos que eliminar el certificado anterior y recargar Apache2.
Actividad 7.1
19 de 39
Curso Mentor Apache
Enunciado:
¿Cómo comprobaríamos que tenemos dos servidores web escuchando?
Solución:
Si ejecutamos la orden:
#netstat -atup |grep /apache2
tcp6 0 0 *:www *:* LISTEN 12424/apache2
tcp6 0 0 *:https *:* LISTEN 12424/apache2
Otra forma sería utilizando la orden nmap (comprobar que el paquete nmap está instalado):
#nmap localhost
80/tcp open http
443/tcp open https
En este caso se quiere que sólo una parte del sitio esté disponible como sitio seguro mediante SSL. Por ejemplo todo lo que haya
detrás de /var/www/htmls/
<Directory /var/www/htmls>
SSLRequireSSL
</Directory>
20 de 39
Curso Mentor Apache
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@apache2.com
ServerName servidor.apache2.com
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directorry>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/htmls>
SSLRequireSSL
</Directory>
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" common
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Si vamos ahora al navegador y escribimos en la URL: http://servidor.apache2.com se nos abre la página de
Apache2 para la parte no segura (/var/www/) y si escribimos https://servidor.apache2.com se nos abre el
directorio que hemos declarado como seguro (/var/www/htmls).
21 de 39
Curso Mentor Apache
Si aparece el mensaje de error tipo 'sockets 443...' es porque existe un archivo en /var/run/apache2.pid que hay que
eliminar. Parece que intenta escuchar en el puerto 443 pero no puede.
22 de 39
Curso Mentor Apache
Con lo que hemos explicado hasta ahora conseguimos que las comunicaciones entre el servidor web y los navegadores
(clientes web) se haga cifrada.
El servidor se ha identificado mediante un certificado, pero podemos hacer que el cliente también lo haga.
Lo que tenemos que hacer es generar certificados para los clientes y poner la directiva SSLVerifyClient con el valor
“require” (en lugar de “none” que es el valor por defecto) incluida en la sección Directory correspondiente a la zona segura.
Para ello hay que realizar las acciones siguientes:
1. Creación de una clave privada (KEY)
2. Generación de una solicitud de certificado (CSR), que en nuestro caso es autogenerado
3. Instalación del certificado (CRT)
1. Generar clave privada
Generamos un Certificado para uso personal. Como usuario y desde su home.
Generamos la clave privada triple-DES mediante algoritmo RSA, tamaño de la clave 1024 y archivo de salida privada.key en el
directorio home del usuario:
$openssl genrsa -des3 -out privada.key 1024
Generating RSA private key, 1024 bit long modulus
..............++++++
e is 65537 (0x10001)
Enter pass phrase for privada.key: soyelvira
Verifying - Enter pass phrase for privada.key: soyelvira
2. Petición de certificado
Hay que realizar la petición de certificado en el formato estándar PKCS#12 para que la firme la Autoridad Certificadora. La extensión
suele ser .csr (Certificate Signing Request, Petición de Firma de Certificado) y contiene la clave pública y los datos identificativos
para que los firme la CA.
En general, el archivo .csr es el que se envía a la entidades certificadoras cuando se solicita el CSR. Pero también nuestro sistema
puede generar un Certificado AutoGenerado que permitirá trabajar de forma segura, pero advirtiendo siempre a los clientes que el
certificado no puede ser validado en una entidad certificadora.
En el caso de una persona, los campos identificativos serán el Common Name (CN) con el nombre y DNI de la persona (esto es una
convención utilizada, por ejemplo, por la Fábrica Nacional de Moneda y Timbre) y la dirección de correo electrónico, que servirá para
enviar correos cifrados y firmados.
El valor del campo Organization Name (Nombre de la Organización), debe coincidir con el de la Autoridad Certificadora.
Como usuario y desde su home, ejecutar:
#openssl req -config openssl.cnf -new -key usuario.key -out usuario.csr
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:España
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ITE
Organizational Unit Name (eg, section) []: CURSO MENTOR
Common Name (eg, YOUR name) []:Usuario
Email Address []:
Please enter the following 'extra' attributes
23 de 39
Curso Mentor Apache
to be sent with your certificate request
A challenge password []:
An optional company name []:
3. Firma del certificado
La Autoridad Certificadora (nuestro servidor SSL) firma el certificado.
Es posible que devuelva algún error de archivo no encontrado. En ese caso hay que revisar en /usr/lib/ssl/openssl.cnf los
caminos hasta los archivos cakey.pem, index.txt, serial, etc son correctos.
# vi /usr/lib/ssl/openssl.cnf
dir = ./miCA
# chmod a+r /etc/apache2/ssl/private/cakey.pem
Comprobamos que el certificado expedido tiene validez de 365 días.
¡¡¡¡¡¡¡¡¡¡¡¡¡ OJO con las mayúsculas y minúsculas!!!!!!!!!!!!!!
Hay que ejecutar como root (o sudo) desde el directorio /etc/apache2/ssl/
En el directorio /etc/apache2/ssl/ tenemos disponible el certificado certificado.crt.
4. Exportamos el certificado
Exportamos el certificado y las claves a formato PKCS#12. El archivo PKCS#12 contiene las claves asimétricas (privada y
pública) y el certificado (con la clave pública y los datos del usuario, ya firmados por la autoridad certificadora).
Ejecutar desde /etc/apache2/ssl como usuario usuario:
24 de 39
Curso Mentor Apache
El archivo generado usuario.p12 (PKCS#12) irá protegido por una contraseña. Podemos grabarlo en un soporte e importarlo desde
un navegador, cliente de correo, etc, para ser utilizado. Debemos guardarlo bien, porque contiene nuestra clave privada. Una vez
importado en el navegador, nos conectamos a nuestro servidor que nos requerirá identificarnos con un certificado de cliente válido. Y
si no, no nos permitirá entrar.
25 de 39
Curso Mentor Apache
1. Partimos de un servidor Apache 2.2 instalado y con hosts virtuales configurados. Para activar el soporte SSL de Apache2 en
Windows XP hay que hacer lo siguiente:
2. Comprobar que el ejecutable openssl.exe está disponible en el directorio /bin de Apache2.2. Recordar que instalamos el binario
con soporte SSL.
3. Comprobar que el archivo mod_ssl.so está en el directorio /modules de Apache2.2
4. Descomentar en el archivo de configuración httpd.conf las líneas:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
5. Añadir la directiva específica de SSL en httpd.conf
<Directory />
SSLRequireSSL
</Directory>
6. Si queremos que todos los módulos de Apache estén enterados de la opción SSL hay que cambiar en el registro de
Windows XP la entrada siguiente (abrir una consola y ejecutar la orden regedit):
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Apache2\ImagePath
aparece:
C:\Program Files\Apache Group\Apache2\bin\Apache.exe" -k runservice
cambiar por:
C:\Program Files\Apache Group\Apache2\bin\Apache.exe" -D SSL -k runservice
7. Creación de nuestra Autoridad Certificadora, para luego expedir certificados a los clientes que quieran conectarse al servidor.
Ir al directorio C:/Program Files/Apache Software Foundation/Apache2.2, ejecutar:
8. Creación de la clave privada de nuestro futuro certificado del servidor SSL.
Desde una consola ir a C:/Program Files/Apache Software Foundation/Apache2.2/bin y ejecutar la orden
siguiente que genera la clave privada:
openssl genrsa -out serv-privkey.pem 2048
9. Ahora vamos a crear un certificado digital con nuestra CA. Pero, antes de hacer el certificado , hay que hacer
una petición y en ella se establece el propietario del certificado. Desde \bin ejecutar:
26 de 39
Curso Mentor Apache
Utilizamos el archivo de configuración generado para crear el certificado. Para ello ejecutar desde \bin:
openssl x509 -CA cacert.pem -CAkey cakey.pem -req -in peticion-certificado-servidor.pem -days
3600 -CAcreateserial -out servidor-cert.pem
donde indicamos que el certificado es para un servidor utilizando la opción -extfile y el archivo config.txt.
Esto crea un certificado que expirará en 3600 días
Generamos el certificado para el servidor:
bin\openssl x509 -in server.crt -out server.der.crt -outform DER
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache none
SSLMutex default
<VirtualHost _default_:443>
DocumentRoot "C:/Archivos de programa/Apache Software Foundation /Apache2.2/htdocs"
ServerName servidor.apache2.com:443
ServerAdmin webmaster@apache2.com
ErrorLog “C:/Archivos de programa/Apache Software Foundation /Apache2.2/logs/error.log”
TransferLog “C:/Archivos de programa/Apache Software Foundation /Apache2.2/logs/access.log”
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW :+SSLv2: +EXP:+eNULL
SSLCertificateFile C:/Archivos de programa/Apache Software Foundation /Apache2.2/conf/ssl
/servidor-cert.pem
SSLCertificateKeyFile C:/Archivos de programa/Apache Software Foundation /Apache2.2/conf/ssl
/serv-privkey.pem
#SSLVerifyClient require
#SSLVerifyDepth 10
</VirtualHost>
El archivo httpd-ssl.conf contiene algún fallo en nombres de archivos. Por ejemplo el archivo de error se llama
error.log y el de acceso access.log y no como aparecen por defecto.
También hay que tener en cuenta que el path al archivo si contiene espacios debe ir entre “”
Al reiniciar el servidor Apache2 e ir a https://servidor.apache2.com y pulsar Aceptar y veremos el mensaje contenido en el archivo
index.html de la página principal.
Y si nos fijamos en la esquina inferior derecha veremos que nuestra página tiene el candado cerrado indicando que es una página
segura.
OJO con las comillas dobles. Hay de dos tipos: ALT-34 y las comillas tipográficas utilizadas por WORD. Estas últimas pueden dar
problemas.
27 de 39
Curso Mentor Apache
En el apartado anterior generamos los siguientes archivos:
de nuestra CA: cacert-pem, cacert.srl, cakey.pem
de nuestro certificado de servidor: servidor-cert.pem y serv-privkey.pem (certificado y clave privada respectivamente)
Ahora lo que tenemos que hacer es generar certificados para los clientes y poner la directiva SSLVerifyClient con el valor “require”
(en lugar de “none” que es el valor por defecto) incluida en la sección Directory correspondiente a la zona segura.
Para ello hay que realizar las acciones siguientes:
1. Creación de una clave privada (PEM)
2. Generación de una solicitud de certificado (CSR), que en nuestro caso es autogenerado
3. Instalación del certificado (CRT)
4. Exportar el certificado
1. Generar clave privada del cliente
Generamos un Certificado para uso personal. Como usuario y desde su home (C:\Documents and Settings\usuario).
Generamos la clave privada triple-DES mediante algoritmo RSA, tamaño de la clave 2048 y archivo de salida cliente-privada.pem
en el directorio home del usuario:
openssl genrsa -out cliente-privada.pem 2048
Generating RSA private key, 2048 bit long modulus
..............++++++
e is 65537 (0x10001)
2. Petición de certificado
Hay que realizar la petición de certificado en el formato estándar PKCS#12 para que la firme la Autoridad Certificadora. La extensión
suele ser .csr (Certificate Signing Request, Petición de Firma de Certificado) y contiene la clave pública y los datos identificativos
para que los firme la CA.
En el caso de una persona, los campos identificativos serán el Common Name (CN) con el nombre y DNI de la persona (esto es una
convención utilizada, por ejemplo, por la Fábrica Nacional de Moneda y Timbre) y la dirección de correo electrónico, que servirá para
enviar correos cifrados y firmados.
El valor del campo Organization Name (Nombre de la Organización), debe coincidir con el de la Autoridad Certificadora.
Lo ejecuta el usuario:
3. Firma del certificado
La Autoridad Certificadora (nuestro servidor SSL) firma el certificado cliente que habrá que distribuir para que puedan visitar el sitio
https://servidor.apache2.com.
openssl x509 -CA cacert.pem -CAkey cakey.pem -req -in peticion-certificado-cliente.csr
-set_serial 3 -days 30 -out cliente-certificado.pem
Hay que ejecutar como Administrador
Es un certificado del tipo x509 cuya CA está definida en el archivo cacert.pem , utiliza como clave privada (-CAkey) el archivo
cakey.pem y el certificado que se va a generar tiene las especificaciones definidas peticion-certificado-cliente.csr.
28 de 39
Curso Mentor Apache
El certificado tiene una validez de 30 dias y sin cifrado (cifrado SHA1 no está soportado por Win32).
También le decimos que el certificado tiene el número 3. Este número debe cambiar para cada certificado cliente, ya que la
revocación openssl la hace por el número de certificado.
4. Exportamos el certificado
Exportamos el certificado y las claves a formato PKCS#12. El archivo PKCS#12 contiene las claves asimétricas (privada y
pública) y el certificado (con la clave pública y los datos del usuario, ya firmados por la autoridad certificadora) que el navegador
entiende.
Ejecutar desde /etc/apache2/ssl como usuario usuario:
El archivo generado usuario.p12 (PKCS#12) tiene contraseña. Podemos grabarlo en un soporte e importarlo desde un navegador,
cliente de correo, etc, para utilizarlo. Contiene nuestra clave privada.
Una vez importado en el navegador cuando el usuario1 se conecte al servidor servidor.apache2.com vía https, le pedirá que se
identifique con un certificado de cliente válido, de lo contrario no le permitirá acceder.
La configuración de Apache2 requiere activar la directiva que solicita certificado para clientes y la localización del archivo de
certificado de nuestra CA.
1. Solicitar certificado. En httpd-ssl.conf descomentar la línea
SSLVerifyClient require
SSLCertificateFile "C:/Archivos de programa/Apache Software Foundation/Apache2.2
/conf/ssl/servidor-cert.pem"
2. Reiniciar el servidor Apache2 y este pedirá certificado a cada usuario que intente entrar.
SSLCertificateFile: donde está el certificado de nuestro servidor
SSLVerifyClient require: indica que el servidor debe solicitar un certificado al cliente cuando acceda a nuestro sitio web seguro.
29 de 39
Curso Mentor Apache
Mecanismos de seguridad
¿Es Apache2 un servidor web seguro?
Realmente el historial de agujeros de seguridad de Apache es muy amplio. Pero también hay que decir que el historial de creación de
parches para tapar esos agujeros es también muy amplio y, sobre todo, esos parches se han generado de una forma muy rápida.
Lógicamente la seguridad de Apache dependerá en gran parte de la configuración que se le de. Prácticamente todo es configurable en
Apache así que habrá que ir con cuidado.
Un principio básico de la seguridad en general dice que sólo se deben tener activos en el servidor aquellos servicios realmente
necesarios y si no se necesitan y no están instalados mejor aún.
Si el servicio es necesario el segundo principio es activar de dicho servicio sólo aquellas funcionalidades que se necesiten.
¿Qué funcionalidad esperamos de un servidor web?
En base a esta pregunta sólo se incluirán aquellos módulos que sean necesarios en tiempo de compilación.
Por ejemplo:
¿ Se van a servir sólo páginas web HTML estáticas?
Si decimos que si sabemos que no se va a permitir la ejecución de scripts CGI.
¿El acceso a algunas páginas web será restringido a direcciones IP seleccionadas o usuarios (autenticación básica)?
Si sólo activamos la autenticación básica no tendremos disponible el protocolo SSL.
¿Debe funcionar nuestro servidor web como proxy-cache?
El servidor deberá registrar todas las peticiones web (incluyendo información sobre navegadores web).
Sugerencias de seguridad
Proponemos algunas medidas de seguridad generales para proteger nuestro servidor web:
1. El servidor Apache2
Determinar cuáles son los módulos que necesita tener activados y desactivar el resto.
El servidor debe revelar la menor cantidad posible de información sobre sí mismo.
El administrador debe ser el propietario de los directorios de configuración, de los archivos ejecutables, históricos y de
contenidos de Apache.
Los archivos y directorios con información global del servidor deben ser accesibles sólo para lectura por el usuario propietario
de los procesos del servidor (directiva User).
El servidor web debe ejecutarse bajo UID/GID dedicado, no uno ya utilizado por cualquier otro proceso del sistema. Además
dicho usuario, en nuestro caso www-data, no debe de disponer de login:
www-data:x:33:33:www-data:/var/www:/sbin/nologin
Controlar los datos que están disponibles. Cualquier tipo de dato que requiera un acceso restringido deben configurarse
utilizando directivas de Apache que restringen el acceso a determinadas direcciones IP o a determinados usuarios.
Los archivos y directorios que contienen información general del servidor incluidos en el directorio dado en la directiva
DocumentRoot deberán tener permiso de lectura para el grupo que ejecuta los procesos.
Si dentro de un directorio del DocumentRoot de Apache hay un enlace simbólico a /etc, cualquier usuario de Internet puede
tener acceso al archivo /etc/password. No es recomendable el uso de la opción de Apache FollowSymLinks.
30 de 39
Curso Mentor Apache
Si los usuarios del ordenador también pueden publicar documentos en el servidor, deberán tener en sus directorios home un
directorio que coincida con el indicado en la directiva UserDir y un archivo dentro de este directorio con el nombre indicado en
la directiva DirectoryIndex. Todos los ficheros y directorios publicados deben tener permiso de lectura para el grupo indicado
en la directiva Group. Si se quiere restringir mas el acceso a la información publicada utilizar permisos 711 para el directorio
de las páginas del usuario.
Un usuario no deberá tener permiso para modificar los documentos de otro usuario o la información principal del servidor.
La autenticación de usuarios y grupos se realiza a través de una serie de archivos que deben estar fuera del árbol de
directorios de documentos y sólo con permisos de lectura para el usuario que ejecuta apache2 en el servidor.
Permitir el índice de los directorios tampoco es una buena idea, ya que el intruso tiene información de la estructura de
directorios del servidor web. Cabe la posibilidad de que encuentre cualquier archivo que hayamos dejado sin darnos cuenta y
que tenga información comprometida. Podemos controlar este comportamiento con Option Indexes.
Mantenerse informado de las posibles vulnerabilidades detectadas en Apache2. Si tenemos una versión con una vulnerabilidad
que se soluciona en una versión posterior, actualizar la versión lo antes posible.
Seguridad por oscuridad: el servidor web deberá proporcionar la menor cantidad posible de información sobre sí mismo.
2. Directiva ServerSignature
Eliminamos información almacenada en el archivo error.log y en las páginas que genera el servidor. Esta información
normalmente contiene la dirección de correo introducida en ServerAdmin.
ServerSignature Off
3. Directiva ServerTokens
Eliminamos información innecesaria en el banner (módulos, versión, etc) que normalmente se muestra en las cabeceras
HTTP de las respuestas del servidor.
Si tenemos el valor:
ServerTokens Full
vemos la respuesta de Apache2 siguiente:
Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c Server at profesores.apache2.com Port
80
Si tenemos el valor:
ServerTokens Prod
vemos la respuesta de Apache2 siguiente:
Apache Server at profesores.apache2.com Port 80
4. Permisos ejecutable apache2
El archivo ejecutable apache2 debe pasar sus permisos de 755 (lectura y ejecución al grupo y a todos) a 700 (sólo el
root puede ejecutarlo).
# chmod 700 /usr/sbin/apache2
5. Directiva Indexes
Muestra el listado de archivos y directorios cuando se accede a un directorio que no contiene ningún archivo index.htm o
index.html. Está activada por defecto pero es recomendable desactivarla, ya que los usuarios podrían descargar
documentos que no les interesan para nada.
31 de 39
Curso Mentor Apache
<Directory "/var/www">
Options –Indexes
</ Directory >
6. Directiva TimeOut
Una forma de ataque a nuestro servidor web a través de Internet es tratar de consumir todos los recursos del servidor de
forma que se sobrecargue. Normalmente llamado ataque de denegación de servicio (DoS).
La directiva TimeOut indica:
a) El tiempo de espera desde que se se establece la conexión hasta recibir la señal GET, HEAD, o POST.
b) El tiempo entre paquetes TCP recibidos para una trasmisión larga de datos, como el envío de un archivo mediante un
POST o PUT.
c) El tiempo de espera para el acuse de recibo o ACK de los datos enviados.
Por defecto el valor de esta directiva es de 300 ( 5'). Es preferible mantener un valor bastante mas bajo:
Timeout 50
7. Directiva KeepAlive
KeepAlive indica si son soportadas o no las conexiones persistentes. La mayoría de navegadores utilizan el protocolo
HTTP/1.1 que permite, por ejemplo, a través de una misma conexión descargar simultáneamente todas las imágenes de
una página web evitando así la necesidad de establecer nuevamente la conexión.
KeepAlive On
8. Verificación del servidor
Nikto es una herramienta open-source que facilita la tarea de verificación del servidor web. Esta herramienta realiza un
scanner sobre los servidores web haciendo unas 3300 pruebas para comprobar la seguridad del servidor.
Podemos descargar la última versión de la web oficial http://www.cirt.net/code/nikto.shtml
Para ejecutar las pruebas:
$ ./nikto-1.36/nikto.pl -h 192.168.1.1
9. Entorno de red y servicios del sistema
El servidor web deberá protegerse mediante un cortafuegos. Las reglas deberán aceptar peticiones entrantes al puerto TCP 80
y permitir respuestas salientes. Sólo se admitirán además paquetes ICMP del tipo origen apagado, tiempo excedido o destino
inalcanzable, todos los demás paquetes deberán denegarse.
Comprobar los servicios activos en el sistema y desactivar los que realmente no hagan falta. Para comprobar los
servicios ejecutar la orden:
# lsof -i
Para desactivar servicios utilizar la herramienta sysvconf. Hay servicios que realmente no son necesarios y solemos tener
activos (LISTEN) como son telnet, ftp, rpc, nfs, etc...
10. El Sistema Operativo
32 de 39
Curso Mentor Apache
33 de 39
Curso Mentor Apache
Glosario
Glosario Unidad 7
Concepto Definición
Certificado digital Consta de una clave pública y un identificador, ambos firmados digitalmente por una Autoridad
Certificadora. Su objetivo es asociar una clave pública a un usuario determinado.
Criptoanálisis Estudio de los métodos para obtener el sentido de una información cifrada rompiendo o forzándola.
DSA Algoritmo utilizado sólo en firma digital.
Encriptación Proceso mediante el cual la información es codificada de tal manera que no pueda ser interpretada
fácilmente. Es una medida de seguridad utilizada para que al transmitir la información no pueda ser
interceptada por intrusos. Opcionalmente puede existir además un proceso de desencriptación a través del
cuál la información puede ser interpretada una vez que llega a su lugar de origen.
Firma digital La firma digital es una porción código que se adjunta a un mensaje y que garantiza al destinatario quién es
el remitente del mensaje, y qué la información del mensaje no ha sido alterada. Se utiliza en un entorno de
clave pública y su objetivo es garantizar la integridad del mensaje y la identidad del firmante.
Hash Hash o función resumen hace referencia a un método para generar claves que representan de manera
unívoca a un documento, registro, archivo, etc. Un hash hace una conversión de los datos de cualquier
tamaño a un número de longitud fija y además, no es reversible.
MD5 Algoritmo de Resumen del Mensaje 5. Es un algoritmo de reducción criptográfico que genera un hash de
128 bits.
RSA Sistema criptográfico de clave pública. Se utiliza en la firma digital y en el intercambio de claves.
SHA-1 Secure Hash Algorithm. Es un algoritmo de reducción criptográfico que genera un hash de 160 bits. Muy
utilizado en las firmas electrónicas.
Socket Elemento de programación que permite a dos máquinas comunicarse a través de una red, mediante el uso
de la IP de origen, la IP de destino y el número de puerto. Se crea un socket cuando hay una conexión
entre el cliente y el servidor.
X.509 Es un estándar de certificados para firmar documentos y garantizar la seguridad y fiabilidad en las
comunicaciones. El X.509 está definido por la RFC3280 del IETF.
34 de 39
Curso Mentor Apache
Otros Glosarios
35 de 39
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
36 de 39
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 7 'Seguridad'
Los puntos a destacar de esta unidad son los siguientes:
1. La criptografía asimétrica funciona bien para la autenticación, ya que cada usuario protege su clave secreta, pero es lenta para
el cifrado. La criptografía simétrica es rápida en el cifrado y mala para la gestión de claves.
2. La criptografía asimétrica garantiza la Confidencialidad y la Autenticidad.
3. La firma digital garantiza la Integridad del mensaje y la identidad del firmante.
4. SSL permite establecer, de forma sencilla, conexiones seguras a través de Internet ya que todos los datos que se transfieren
entre el navegador web (cliente) y el servidor van cifrados.
5. El objetivo del certificado digital es asociar una clave pública a un usuario determinado.
6. El objetivo de la autoridad certificadora es acreditar la correspondencia entre una clave y su propietario real.
7. Un principio básico de la seguridad en general dice que sólo se deben tener activos en el servidor aquellos servicios realmente
necesarios y si no se necesitan y no están instalados mejor aún.
37 de 39
Curso Mentor Apache
Autoevaluación Unidad 7
Autoevaluación
38 de 39
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 7
39 de 39
Curso Mentor Apache
Apache
Unidad 8: Registro y Monitorización de Apache2
En este capítulo aprenderás:
el concepto de registro
las técnicas de rotación de los archivos de registro
el concepto de analizador de logs
la instalación, configuración y utilización del analizador de logs Webalizer
la instalación, configuración y utilización del analizador de logs Awstats
la instalación, configuración y utilización del analizador de logs BBClone
el concepto de rendimiento del sistema
la utilización de la herramienta ab para evaluar el rendimiento del sistema
Material complementario:
1. Archivo con las actividades referidas a lo largo del capítulo. Archivo U8_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U8_Mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 35
Curso Mentor Apache
Introducción
Objetivos
Conocer las directivas asociadas al registro.
Conocer el proceso de rotación de archivos de registro que consiste en,
periodicamente, salvar el archivo actual bajo otro nombre y crear uno nuevo vacío
Trabajar con herramientas que proporcionan estadísticas de uso del servidor web Apache2.
Estudiar mecanismos que mejoren el rendimiento del servidor web.
Conocimientos previos
En esta unidad abordamos la monitorización de Apache2 y la utilización de diferentes herramientas para ello. Como unidad dentro
de la fase final del estudio de Apache es importante haber asimilado y practicado los conceptos de las unidades anteriores.
Contenidos
Unidad 8: Registro y Monitorización de Apache2
A. General
1. Registro de Apache2
2. Rotación de archivos de registro: logrotate
B. Ubuntu
C. Windows
D. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 35
Curso Mentor Apache
Registro de Apache2
Registro
La instalación de Apache2 por defecto deja activados sus mecanismos de registro de actividad en general del servidor web.
Haciendo uso de un conjunto de directivas almacena información relativa a:
errores producidos al ejecutar el proceso apache2 -> Registro de error
accesos al servidor -> Registro de actividad
En el primer caso, los errores, prácticamente no se puede configurar. Estos registros de error vienen con un formato
determinado, sin embargo los registros de actividad tienen un formato altamente configurable. Es decir, el administrador
puede decidir qué información quiere registrar y, por lo tanto, decidir el formato del registro.
Estos archivos crecen en función del volumen de accesos que soporte el servidor web.
Definimos el Registro de Apache2 como el sistema de almacenamiento de información relativa a los accesos y las
situaciones de error .
Directivas de registro
Las directivas asociadas al registro son las siguientes:
Directiva Descripción
CustomLog Establece el nombre del archivo (path absoluto o relativo a ServerRoot) y formato del archivo de
accesos al servidor.
CustomLog logs/access.log common
ErrorLog Contiene la ruta absoluta o relativa al path de Apache2 (ServerRoot) del archivo de registro de
errores. Registra lo que sucede con Apache: errores y accesos de clientes.
Si se tienen varios hosts virtuales cada uno de ellos puede incluir su propia directiva ErrorLog y el
registro de errores se hace en archivos independientes. Si no se indica de esta forma los mensajes
de error de todos hosts virtuales se almacenarán en el mismo archivo.
ErrorLog /var/log/apache2/error.log
LogLevel Controla la gravedad y número de mensajes que se guardan en archivo de registro de errores. Existen
ocho niveles. Por defecto:
LogLevel warn
LogFormat Establece el formato de las líneas del archivo de log. Permite personalización por parte del usuario.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
La directiva CustomLog puede llevar explícitamente una cadena con los diferentes símbolos disponibles de LogFormat. Por
ejemplo, si indicamos:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
podemos sustituir ambas por la equivalente:
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
3 de 35
Curso Mentor Apache
en la que se da, en vez del alias common la propia cadena.
Niveles de ejecución
Los diferentes niveles de registro disponibles desde LogLevel son los dados en la tabla siguiente. Están ordenados de menor a
mayor información almacenada.
"Un proceso hijo no puede abrir el fichero de lock (lock file). El programa va
emerg Emergencias. No se puede utilizar el servidor
a terminar"
Cuando se especifica un determinado nivel, se escriben en el log también los mensajes de todos los demás niveles por encima.
El nivel asignado por defecto es warn. Por lo tanto, todos los mensajes de todos los niveles de warm hacia arriba también se
almacenan.
Algunos de los símbolos de formato disponibles desde LogFormat son los dados en la tabla siguiente:
Nivel Descripción
%a Dirección IP del cliente web
%b Número de bytes enviados al cliente web.
%h Nombre del host del cliente web.
%p Número de puerto en el que se ha recibido la solicitud
%t Fecha y hora local
%T Segundos usados para hacer la transmisión .
%u Si el acceso requiere autenticación indica el nombre del usuario.
%U Dirección URL solicitada por el cliente web.
%v Nombre del host virtual y dominio del servidor según nomenclatura DNS.
Si se necesita obtener un mayor nivel de detalle se puede utilizar el formato combinado (combined) en lugar del
común (common). Este formato permite incluir, además de los símbolos anteriores, información relativa a la URL
4 de 35
Curso Mentor Apache
solicitada por el cliente (%U o %{Referer}i\) y el nombre y versión del buscador o cliente utilizado para acceder
(%{user-agent}i\).
En general suele ser de interés utilizar el formato combinado, sobre todo pensando en los analizadores de logs que utilizan la
información adicional en sus estadísticas.
Reflexión
¿Qué nivel se debe indicar en LogLevel para obtener el máximo de información acerca del acceso? ¿Qué
problema puede presentar?
5 de 35
Curso Mentor Apache
El proceso de rotación de archivos de registro consiste en (semanalmente por defecto) salvar el archivo actual bajo otro nombre y
crear uno nuevo vacío. De esta forma, sin renunciar a disponer de todos los sucesos del sistema, se puede trabajar con archivos
de menor tamaño.
Logrotate es una utilidad (instalada por defecto en el sistema) que lleva acabo la rotación automática, comprensión, extracción y
envío de los archivos de logs.
Su objetivo es facilitar la administración del sistema en general, ya que se generan en él gran número de archivos de registro.
Logrotate permite manipular cada archivo de registro de forma diaria, semanal, mensual, o cuando se haga demasiado grande.
Logrotate
Logrotate se ejecuta como un tarea diaria del cron y toma las opciones del archivo de configuración /etc/logrotate.conf
cuyo contenido se incluye:
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
La configuración anterior indica que Logrotate rota los archivos semanalmente, los rota 4 veces antes de borrarlos, puede
comprimir los archivos de la semana y crea un archivo nuevo por cada archivo que rota. Luego incluye las configuraciones
específicas de cada servicio dadas en /etc/logrotate.d/ y, por último incluye tratamientos específicos a los archivos de logs
incluidos (/var/log/wtmp)
En el directorio /etc/logrotate.d/ se encuentra el archivo de configuración específico de Apache2.
6 de 35
Curso Mentor Apache
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
Todas las opciones disponible se pueden consultar en la página de manual de Logrotate.
Los archivos obtenidos de la rotación se llaman access.log.1 y error.log.1.
7 de 35
Curso Mentor Apache
Un servidor web debe disponer de estadísticas de uso para poder conocer qué páginas son mas frecuentemente servidas y cuáles
menos.
Desde Ubuntu vamos a estudiar el analizador de accesos de Apache: webalizer
Al ser una herramienta web es independiente del sistema operativo y, por tanto sirve igual para Windows.
8 de 35
Curso Mentor Apache
Webalizer
Instalación
Webalizer es una aplicación de análisis de logs de servidores web. Es decir, permite obtener estadísticas de acceso a un servidor
web, indicando cuáles son las páginas más visitadas, etc.
Estas estadísticas las muestra como gráficas que son accesibles vía web. Genera, por tanto, informes en formato html.
Webalizer se puede descargar de ftp://ftp.mrunix.net/pub/webalizer/ y se distribuye bajo licencia GNU GPL.
Desde Ubuntu instalamos el paquete .deb webalizer:
# apt-get install webalizer
En el proceso de instalación-configuración nos dice que la versión instalada es la 2.01 y dónde se almacenarán los informes
generados (/var/www/webalizer).
La sintaxis de utilización es:
webalizer [opciones] <archivo_log>
La herramienta dispone de gran cantidad de opciones que se pueden consultar con la orden man.
En general no es necesario modificar el archivo de configuración /etc/webalizer/webalizer.conf. Si queremos
modificar los parámetros configurados en la instalación de webalizer y adecuarlas a nuestro sistema lo haremos con
las directivas:
LogFile /var/log/apache2/access.log
OutputDir /var/www/webalizer
ReporTitle Informe estadísticas servidor web
Para generar el informe hay que ejecutar como root:
# webalizer
Webalizer V2.01-10 (Linux 2.6.20-16-generic) locale: es_ES.UTF-8
Utilizando histórico /var/log/apache2/access.log (clf)
Using default GeoIP database
Creando informe en /var/www/webalizer
El nombre de máquina en el informe es 'elvira-edubuntu'
No encuentro el archivo histórico...
Aviso: Cortando campo de enlace origen demasiado grande
Generando informe de August 2007
Generando informe resumido
Guardando información de archivo...
9 de 35
Curso Mentor Apache
9139 registros (2 ignorados) en 23,00 segundos, 397/sec
Si ahora vamos al navegador web e introducimos la URL: http://servidor.apache2.com/webalizer/ veremos una gráfica del estilo
siguiente:
En la imagen diferenciamos entre el informe resumido de los últimos doce meses (tabla superior) y el detalle para cada uno de los
meses que es una tabla que contiene totales para la fecha de generación del documento.
Los campos que aparecen en las estadísticas se interpretan de la forma siguiente:
Accesos (hit): se define como el número de peticiones de archivos que se realizan al servidor durante un período de tiempo
dado. Se confunde con visitas, pero no son lo mismo. Un hit es un acceso, una petición al servidor de un archivo. Ejemplo:
si en la página además del archivo html se utiliza un archivo externo javascript, otro css, y, además, la cabecera y 1 imagen
pequeña, en total tenemos 5 accesos, cinco peticiones de archivos. El número de Accesos siempre será mayor que el
número de visitas.
Archivos: es el número total de peticiones (Accesos) que devuelven 'algo' al usuario. No es lo mismo que Acceso ya que
no siempre se enviará algo a la petición. En ocasiones el resultado ya está en la caché o se produce algún error, con lo que
no hay retorno.
Visita: cuando un usuario entra en la página se produce una visita. Todo el tiempo que navegue por la web contará como
esa visita, sólo una. La primera petición que realiza ese cliente remoto es lo que cuenta como visita, luego puede estar el
tiempo que quiera descargando algo, leyendo contenidos, todo eso formará parte de la misma visita.
Clientes: número de visitas que no se repiten. No se contabilizan los usuarios que vuelven a lo largo del tiempo. Este es
uno de los valores más fiables, para conocer el número de visitas ya que tenderá a ser menor del número real y no nos
muestra las estadísticas web infladas.
Total de Kbytes: cantidad total de datos que transfirió el servidor a los clientes. Es útil para llevar un control sobre la
transferencia máxima mensual que nos proporciona nuestro servicio de hosting.
Páginas Vistas: cualquier tipo de archivo HTML, o cualquiera que genere HTML. No se incluyen los otros archivos incluidos
en el documento, como imágenes, audio, flash, etc.
Página de Entrada: páginas a través de las que el usuario accede a nuestro servidor. No siempre se accede a nuestra
página principal.
Página de Salida: última página web visitada por el usuario.
Referidos: sitios a través de los que se accede a nuestra página, ya sean buscadores u otras páginas que nos enlacen.
10 de 35
Curso Mentor Apache
Cadenas de Búsqueda: palabra o palabras clave que se usan en los buscadores para llegar a nuestra página web o sitio
web.
Si accedemos a un mes concreto nos devuelve una información mas completa de la actividad de Apache2.
Pero esta no es la forma 'normal' de generar los informes.
Al instalar webalizer se incluye, por defecto, el script que lanza la ejecución programada diariamente en el directorio
/etc/cron.daily/. Este script el servidor lo ejecuta diariamente a la hora indicada en el archivo /etc/crontab, y
genera el informe diario correspondiente.
El usuario root puede en cualquier momento ejecutar dicho script y obtener un informe con las últimas estadísticas de
la forma siguiente:
# /etc/cron.daily/webalizer
que analiza los logs que tenga nuestro servidor web y deja accesible el resultado en la carpeta webalizer del servidor:
http://servidor.apache2.com/webalizer/
11 de 35
Curso Mentor Apache
Configuración
Archivo de configuración /etc/webalizer.conf
Directivas Descripción
LogFile Ruta al archivo que almacena los accesos registrados por el servidor web.
LogFile /var/log/apache2/access.log
OutputDir Ruta del directorio donde se ubicará el informe generado. Es importante que
quede bajo el directorio del servidor web /var/www/webalizer
OutputDir /var/www/webalizer
ReportTitle Título que aparecerá en el informe:
ReportTitle Estadísticas Servidor Web
HostName Nombre del servidor web
HostName servidor
PageType En este parámetro, que puede tener varias entradas, se especifica qué tipo de
páginas se quiere procesar. Suelen ser páginas con extensión htm*, cgi (por
ejemplo consulta a motores de búsqueda), páginas dinámicas con php* y
archivos de perl .pl:
PageType htm*
PageType cgi
PageType phtml
PageType php*
PageType pl
Quiet / ReallyQuiet Suprimen los mensajes de error que puedan presentarse. Es recomendable
asignarlos como yes para procesar los logs del servidor.
Quiet yes
ReallyQuiet yes
TopEntry si se pone el valor 100, mostrará las 100 páginas de inicio de sesión más
consultadas.
TopExit si se pone el valor 100, mostrará las 100 páginas de salida de sesión más
comunes.
12 de 35
Curso Mentor Apache
Awstats
Introducción
Desde Ubuntu vamos a estudiar el analizador de accesos de Apache Awstats (Advanced Web Statistics) cuya página oficial es
http://www.awstats.org/. Es más completo que webalizer.
En la dirección http://awstats.sourceforge.net/docs/awstats_compare.html hay disponible una comparativa entre diferentes
analizadores de logs, entre ellos están incluidos awstats y webalizer.
Awstats:
soporta cualquier sistema operativo, ya que al estar escrito en Perl es suficiente que el servidor que lo va a interpretar tenga
el módulo correspondiente instalado.
puede generar estadísticas en 33 idiomas, entre los cuales se encuentran el castellano y el catalán.
es más lento que otros analizadores de logs.
Su funcionamiento se basa en:
la lectura de unos archivos de entrada (en este caso serán los archivos access.log de Apache2), que son
generados por Apache2.
A partir de los archivos de entrada Awstats genera sus propios archivos con las estadísticas. Esta generación se hace de
forma periódica con un cron.
Cuando se hace una llamada para que se muestren en un Navegador las estadísticas, Awstats lee los archivos que él ha
generado y muestra los resultados como HTML estático.
Instalación de Awstats
La instalación en Ubuntu es:
# apt-get install awstats
Comprobamos que instala la versión 6.9.5. Los archivos y directorios que instala/crea son los siguientes:
Archivos/Directorios Descripción
/usr/share/doc/awstats/ Directorio donde se guardan archivos de ejemplo y ayuda.
/usr/share/awstats/lang/awstats- Archivo de idioma castellano. Es un simple archivo de texto.
es.txt
/usr/share/awstats/plugins/ Directorio en el que se instalan los plugins que vienen por defecto con el
paquete.
/usr/share/awstats/icon/ Directorio donde se instalan los iconos que se van a utilizar para mostrar las
estadísticas.
/usr/lib/cgi-bin/awstats.pl Archivo que va a generar las estadísticas a partir de los logs del sistema.
Escrito en Perl.
/etc/cron.d/awstats Entrada de cron para actualizar las estadísticas periódicamente.
13 de 35
Curso Mentor Apache
Archivos/Directorios Descripción
/etc/awstats/awstats.conf Archivo de configuración de Awstats.
/etc/awstats/awstats.conf.local Archivo que contiene las configuraciones específicas y que se incluye
en el anterior.
14 de 35
Curso Mentor Apache
Configuración
Configuración de Awstats y funcionamiento
El archivo de configuración general de awstats es /etc/awstats/awstats.conf.
Conviene incluir nuestras modificaciones en el archivo /etc/awstats/awstats.conf que serán añadidas al anterior archivo
mediante un Include y que no se verán afectadas por las posibles actualizaciones de la herramienta.
Es importante comprobar que se tiene activado el módulo cgid ya que es necesario para el funcionamiento de Awstats.
Comprobarlo.
Tipo de logs
Hay que asegurarse de que el servidor Apache2 'logea' los accesos de manera combinada (NCSA combined/XLF/ELF). Para ello
hay que asegurarse de que el archivo de configuración de cada sitio de Apache2 tiene la siguiente directiva:
CustomLog /var/log/apache2/access.log combined
Por otro lado, también hay que asegurarse de que Apache2 hace los logs de la forma que necesitamos. Para ello hemos de
comprobar que los logs tienen el siguiente formato:
que se corresponde con una entrada del archivo /var/log/apache2/access.log.
Ahora le indicamos a Awstats el formato en que están los logs mediante la directiva LogFormat:
Valor Descripción
Comprobar las siguientes líneas en /etc/awstats/awstats.conf:
LogFormat=1
LogFile="/var/log/apache2/access.log"
15 de 35
Curso Mentor Apache
Idioma
Awstats viene preconfigurado para mostrar los logs y estadísticas en inglés. Hay que cambiarlo a castellano.
Los archivos de idioma han sido instalados en el directorio /usr/share/awstats/lang/.
Comprobamos que en /etc/awstats/awstats.conf está disponible esta ruta que es donde debe buscar los archivos de
idioma.
DirLang="/usr/share/awstats/lang"
Para que el idioma por defecto sea el castellano, tenemos que sustituir el valor de la directiva Lang 'en' por 'es'. Es posible que
aparezca 'auto' indicando que se toma el idioma por defecto del navegador.
Lang="es"
La página que se genera muestra en la parte superior izquierda unas banderas que permiten elegir el idioma que queramos que
muestre la página.
Si queremos modificar los idiomas que aparecen, su orden, etc. utilizamos la directiva ShowFlagLinks, con los identificativos de
los idiomas que queremos que aparezcan, separados por un espacio. Por ejemplo:
ShowFlagLinks="es es_cat en"
Las imágenes correspondientes a los idiomas tienen que ser almacenadas con uid y gid root con las demás imágenes.
# ls -l /usr/share/awstats/icon/flags/
-rw-r--r-- 1 root root 229 2002-10-29 19:55 es_cat.png
-rw-r--r-- 1 root root 231 2001-06-28 00:25 es.png
Imágenes
Para que las imágenes que contiene la página que se va a generar se vean correctamente, hay que indicarle a Awstats donde
están ubicadas. La directiva DirIcons en /etc/awstats/awstats.conf contiene la ruta de las imágenes relativa a la
ubicación de la página web.
Por tanto si ponemos:
DirIcons="/usr/share/awstats/icon/"
Alias /awstats-icon/ /usr/share/awstats/icon/
y, entonces en la directiva DirIcons escribimos el nombre del alias creado:
DirIcons="/awstats-icon
16 de 35
Curso Mentor Apache
Intérprete de Perl
El archivo awstats.pl necesita del intérprete de Perl para generar las estadísticas de los logs.
Hay que asegurarse de que está bien configurado indicando al script en Perl donde se encuentra el intérprete. La primera línea del
archivo /usr/lib/cgi-bin/awstats.pl es:
#!/usr/bin/perl
Como en un mismo host pueden existir distintos dominios (hosts virtuales), la directiva SiteDomain indica a cuál de esos
dominios nos estamos refiriendo.
En este caso es recomendable generar logs independientes, es decir, uno para cada dominio. En nuestro caso:
SiteDomain="servidor.apache2.com"
Indicamos con la directiva LogType el tipo de archivo que contendrá el informe generado:
LogType=W
W indica informe web
M para archivos mail
F para archivos de log FTP
Con esto quedaría finalizada la configuración básica de Awstats.
17 de 35
Curso Mentor Apache
Como puede observarse las estadísticas están vacías. Eso es así porque awstats.pl no lee los datos de los logs directamente
sino que genera un archivo de texto y muestra los datos a partir de dicho texto. Los archivos de texto generados se encuentran en:
# ls -l /var/lib/awstats/
-rw-r--r-- 1 root root 6445 2007-08-13 20:08 awstats082007.txt
Para generar estos archivos por primera vez o actualizarlos manualmente, ejecutamos el archivo awstats.pl con los siguientes
parámetros:
Volver a ir al navegador y comprobar que cambian las estadísticas y aparecen ya datos.
18 de 35
Curso Mentor Apache
La versión de este paquete de Awstats instala una entrada en el demonio de cron (cron.d).
#ls -l /etc/cron.d
-rw-r--r-- 1 root root 200 2005-11-09 17:53 awstats
Y si vemos el contenido del archivo:
#cat /etc/cron.d/awstats
10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] &&
/usr/share/awstats/tools/buildstatic.sh
El archivo de cron nos dice que el usuario www-data actualiza el awstats.pl cada 10 minutos.
Por norma general se recomienda configurar el cron para que actualice las estadísticas en horas de menor carga (por la noche), ya
que el archivo access.log puede ser grande y podría bajar el rendimiento del servidor.
La ejecución de la orden del cron presenta un problema y es que los permisos del archivo de logs access.log (640) no permiten
que el usuario www-data lo lea.
#ls -l /var/log/apache2/access.log
-rw-r----- 1 root adm 58945 2011-06-23 18:55 /var/log/apache2/access.log
#ls -l /var/log/apache2/access.log
-rw-r----- 1 root www-data 58945 2011-06-23 18:55 /var/log/apache2/access.log
Pero este cambio es necesario que se realice sobre los archivos nuevos de log que se van a ir generando según pasa el tiempo y
vamos almacenando más información.
Para que, a partir de ahora, todos los archivos generados pertenezcan al grupo www-data modificamos el archivo
/etc/logrotate.d/apache2:
#vi /etc/logrotate.d/apache2
/var/log/apache2/*.log {
19 de 35
Curso Mentor Apache
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root www-data
sharedscripts
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi
1. Direcciones de host que serán ignoradas en la estadística
SkipHosts="127.0.0.1"
2. Especificar el directorio dónde se almacena la base de datos de los resultados del análisis
DirData="/var/lib/awstats"
3. Crear DirData si no existe, de otro modo devuelve un error
CreateDirDataIfNotExists=1
4. Establece la página predeterminada
DefaultFile="index.php"
6. Tiene en cuenta los parámetros de llamada a las páginas dinámicas PHP
URLWithQuery=1
20 de 35
Curso Mentor Apache
Desde Windows vamos a estudiar la aplicación BBClone como analizador de accesos a Apache2.
BBClone detalla para cada visitante su dirección IP, sistema operativo, navegador, desde que URL han accedido a su sitio web
utilizando una interfaz gráfica. Es, además, software libre con licencia GNU General Public License.
BBClone trabaja actualizando en el servidor Apache un archivo de estadísticas cada vez que ofrece una página web a un
navegador. Para ello hay que incluir alguna líneas de código en las páginas web que queremos que BBClone contabilice. Esta
porción código será ejecutado por el servidor web justo antes de servir la página, y de esa forma se actualiza la estadística.
Para la obtención de las estadísticas utiliza scripts PHP. Por lo tanto requiere la instalación de PHP5 en nuestro sistema.
Permite consultar todo tipo de gráficas, ver las páginas a través de las que llegaron los usuarios, y las palabras
clave más usadas en los buscadores para llegar al sitio web.
21 de 35
Curso Mentor Apache
Bbclone
Descarga
De la página http://bbclone.de/download.php podemos descargar el paquete *.zip válido para Windows.
Los pasos a seguir son los siguientes:
1. Iniciar la sesión en Windows como Administrador.
2. Descargar el paquete de PHP 5.2.4 (php-5.2.4-Win32) desde www.php.net http://windows.php.net/download/ Es
importante tener cuidado de NO BAJAR el instalador ya que no hace completamente bien la instalación para Apache
como servidor web, al menos y de momento en esta versión.
3. Extraemos el archivo zip en una carpeta con un nombre como C:\PHP.
Configuración:
1. Ir a C:\PHP y seleccionar todos los archivos del tipo dll (librerías dinámicas). Ahora hay que copiarlos en
C:\WINDOWS\system32.
2. Editar el archivo C:\Program Files\Apache Software Foundation\Apache2.2 \conf\httpd.conf y descomentamos la
línea que carga el módulo correspondiente a PHP5:
LoadModule php5_module "C:/PHP/php5apache2_2.dll"
3. Ahora dentro de la sección <IfModule mime_module> añadir la línea siguiente:
<IfModule mime_module>
....................................
AddType application/x-httpd-php .php
.................................................
Con esta línea estamos diciendo que se interpreten los archivos con extensión .php (tipos mime).
4. El archivo de configuración de PHP se llama php.ini. Al instalar por defecto se crea uno llamado php.ini-dist.
Cambiar el nombre a php.ini dejándolo en el directorio donde está inicialmente.
5. En el archivo de configuración de Apache httpd.conf hemos de indicar donde debe buscar este archivo php.ini.
Añadir la siguiente línea, por ejemplo, después de la linea de LoadModule.
PHPIniDir “C:/PHP”
6. Al acceder a nuestro servidor siempre se muestra el archivo indicado en la directiva DirectoryIndex. La modificamos para
siempre cargue un archivo index.php que nosotros preparamos. La directiva debe quedar así:
DirectoryIndex index.php index.html
Sino existe un archivo index.php buscará el siguiente de la lista (index.html).
7. Creamos un archivo index.php en C:\Program Files \Apache Software Foundation\Apache2.2\htdocs con el código
siguiente:
<?php phpinfo(); ?>
22 de 35
Curso Mentor Apache
<p>Esta página ha sido creada a las <b>
<?php echo date("h:i:s a", time()); ?>
</b> en un ordenador con PHP5 funcionando.</p>
<html><body><h1>Servidor web</h1></body></html>
Volver otra vez a probar en el navegador.
Instalación de BBClone
1. Una vez descargado el paquete .zip descomprimirlo en una carpeta temporal.
2. Ir a la carpeta donde se ha descomprimido el paquete, que normalmente se llamará bbclone.
3. Ir al directorio donde están ubicadas la páginas web del servidor C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs y crear una carpeta bbclone en la que copiamos todos los archivos de la aplicación que
se han descomprimido excepto la carpeta install (si existe, ya que sólo se necesita para la instalación automática). Es
importante copiar todo manteniendo los mismos nombres de archivos y directorios y con la misma estructura.
4. Al subdirectorio 'var' y a todos los archivos que contiene hay que darles permisos de lectura y escritura para todos
los usuarios. Para ello: ir al directorio var y seleccionar todos los archivos. Ahora botón derecho Propiedades ->
Seguridad.
Seleccionar Usuarios e ir a Opciones Avanzadas.
Esto hay que hacerlo tanto al directorio como a todos los archivos que contiene: permisos completos para todos (equivalente a 777
en directorios y a 666 en archivos en GNU/Linux).
5. Ahora hemos de indicar de qué páginas queremos hacer estadísticas. En principio y como prueba sólo obtendremos
estadísticas de la página de inicio.
La porción de código a incluir en index.php es el siguiente:
<?php
DEFINE ("_BBCLONE_DIR", "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs
/bbclone/");
DEFINE ("_NEW_COUNTER", _BBCLONE_DIR . "mark_page.php");
if(file_exists(_NEW_COUNTER))
{
include (_NEW_COUNTER);
}
?>
Importante: no olvidar la '/' final en el path de DEFINE.
Si las páginas están escritas en PHP este código se puede añadir el principio de la parte de código php sin poner las
marcas de inicio y final de código php <?php ?>). Si las páginas son html, entonces hemos de añadir el código tal cual.
Además, para que funcione hemos cambiar la extensión de la página web a .php.
6. Comprobamos que está bien instalado BBClone y que ya ha realizado sus primeras estadísticas de la página de
inicio. Para ello ir a https://servidor.apache2.com/bbclone/show_global.php.
7. En el caso de querer obtener estadísticas de varias páginas podemos darles nombres a cada una de ellas para que
en las estadísticas se vean reflejados.
En el código php que incluimos en cada página de la que queremos estadísticas habrá que añadir después del último
DEFINE:
23 de 35
Curso Mentor Apache
<?php
DEFINE ("_BBCLONE_DIR", "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs
/bbclone/");
DEFINE ("_NEW_COUNTER", _BBCLONE_DIR . "mark_page.php");
DEFINE ("_BBC_PAGE_NAME","Página Profesores");
if(file_exists(_NEW_COUNTER))
{
include (_NEW_COUNTER);
}
?
Antes de manipular la configuración por defecto vamos a interpretarla y luego adaptaremos los parámetros que
necesitemos.
El archivo que hay que editar es config.php (C:\Program Files \Apache Software Foundation\Apache2.2\htdocs\bbclone
\conf).
Editar con WordPad.
Las principales opciones son:
$BBC_MAINSITE: dirección del sitio web. Sirve para que tengas un enlace a ella en la barra de navegación de las páginas de
estadísticas. Si no ponemos nada, el enlace no aparecerá.
$BBC_SHOW_CONFIG: indica si el enlace a la página para ver la configuración de BBClone aparecerá en la barra de navegación de
las páginas de estadísticas. Si ponemos 1 aparecerá y si ponemos 0 no aparecerá.
$BBC_TITLEBAR: título que aparecerá en la página de estadísticas. Puedes usar %SERVER para que ponga directamente el
nombre del servidor y %DATE para que aparezca la fecha actual. Yo pondría "Estadísticas para (Nombre del sitio web) generadas
el %DATE".
BBC_LANGUAGE: lenguaje en que queremos que aparezca por defecto la página de estadísticas. Ponemos "es" para que aparezca
en castellano.
BBC_IGNOREIP: esta opción, indicando la IP con la que normalmente el administrador accede a sus páginas web para probarlas,
hace que esos accesos no se contabilicen en las estadísticas.
La personalización que vamos a hacer en la configuración es la siguiente:
$BBC_MAINSITE = "http://servidor.apache2.com/";
$BBC_SHOW_CONFIG = 1;
$BBC_TITLEBAR = "Estadísticas de %SERVER generadas el %DATE";
$BBC_LANGUAGE = "es";
Ir a https://servidor.apache2.com/bbclone/show_global.php
Desde la pantalla mostrada se puede acceder a la configuración y comprobar los valores asignados a las diferentes
variables de config.php.
Es importante remarcar que esta herramienta no utiliza la información de access.log, la contabiliza desde sus propios archivos
almacenados en bbclone/var.
24 de 35
Curso Mentor Apache
Rendimiento
Ubuntu
A menudo es posible aumentar el rendimiento de un sitio web a costa de sacrificar algo su seguridad. Vamos a ver qué podemos
manipular en nuestro servidor web para aumentar su velocidad sin exponer demasiado su seguridad.
Hay que tener en cuenta que lo que puede aumentar el rendimiento en un servidor no ha de tener los mismos efectos en otro
servidor distinto.
Existe una aplicación llamada ab (apache bench) que funciona en línea de orden y que permite evaluar el rendimiento del servidor.
ab es muy útil cuando hacemos cambios en la configuración y queremos comprobar de qué forma se ha visto afectado el
rendimiento con esos cambios, antes y después.
La forma más usual de utilizar la herramienta ab es la siguiente:
# ab -n 500 -c 10 http://servidor.apache2.com/test.html
que dice a ab que solicite al servidor web dado 500 veces el archivo test.html y se produzcan 10 peticiones concurrentes.
-n : nº de solicitudes
-c : nivel de concurrencia
La salida generada por la orden anterior es:
Benchmarking servidor.apache2.com
(be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Finished 500 requests
Server Software:
Apache/2.2.16
Server Hostname:
25 de 35
Curso Mentor Apache
servidor.apache2.com
Server Port: 80
Concurrency Level: 10
Time taken for tests: 0.120
seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Non-2xx responses: 500
Total transferred: 248000 bytes
HTML transferred: 146500 bytes
Requests per second: 4153.00
[#/sec] (mean)
Time per request: 2.408 [ms]
(mean)
Time per request: 0.241 [ms]
(mean, across all concurrent
requests)
Transfer rate: 2011.61
[Kbytes/sec] received
26 de 35
Curso Mentor Apache
1 8
Total: 1 2 1.1
2 8
<Location /server-status>
SetHandler server-status
order deny,allow
deny from all
allow from 192.168.0.103
</Location>
ExtendedStatus On
Este código nos permite conocer detalles del servidor como cuándo fue el último reinicio, tiempo que lleva activado, cantidad de
datos que ha tramitado durante ese tiempo, procesos llevados a cabo y su función, etc. Incluye también la actividad de los
servidores virtuales.
ExtendedStatus On permite generar información completa de estado.
Para visualizar toda esta información desde el navegador ir a: http://servidor.apache2.com/server-status.
27 de 35
Curso Mentor Apache
Server-info
$ sudo a2enmod info
E incluimos en el sitio, del que queremos conocer la actividad, la siguiente porción de código:
<Location /server-info>
SetHandler server-info
order deny,allow
deny from all
allow from 192.168.0.103
</Location>
Este código nos permite conocer detalles del servidor como la versión del servidor y parámetros generales de configuración,
módulos cargados, tiempo que lleva activado, cantidad de datos que ha tramitado durante ese tiempo, procesos llevados a cabo y
su función, etc. Incluye también la actividad de los servidores virtuales.
Para visualizar toda esta información desde el navegador ir a: http://servidor.apache2.com/server-info.
28 de 35
Curso Mentor Apache
Por seguridad podemos ocultar esta información poniendo:
<Location /server.informacion.pagina>
<Location /server.status.pagina
Windows
En Windows la salida generada por la orden es la totalmente paralela. La utilidad ab está en C:\Program Files\Apache
Software Foundation\Apache2.2\bin.
Este código nos permite conocer detalles del servidor como cuándo fue el último reinicio, tiempo que lleva activado, cantidad de
datos que ha tramitado durante ese tiempo, procesos llevados a cabo y su función, etc. Incluye también la actividad de los
servidores virtuales.
Añadimos el código indicado en httpd.conf
<Location /server-status>
SetHandler server-status
order deny,allow
deny from all
allow from 192.168.0.103
</Location>
ExtendedStatus On
ExtendedStatus On permite generar información completa de estado.
Además, en Windows descomentamos la línea:
29 de 35
Curso Mentor Apache
LoadModule status_module modules/mod_status.s
30 de 35
Curso Mentor Apache
Glosario
Glosario Unidad 8
Concepto Definición
Acceso (hit) Número de peticiones de archivos que se realizan al servidor durante un período de tiempo dado. Se
confunde con visitas, pero no son lo mismo. Un hit es un acceso, una petición al servidor de un archivo.
El número de Accesos siempre será mayor que el número de visitas.
Analizador de logs Aplicación que permite obtener estadísticas de acceso a un servidor web, indicando cuáles son las
páginas más visitadas, etc
Cadenas de búsqueda Palabra o palabras clave que se usan en los buscadores para llegar a nuestra página web o sitio web.
Referidos Sitios a través de los que se accede a nuestra página, ya sean buscadores u otras páginas que nos
enlacen.
Registro de Apache2 Sistema de almacenamiento de información relativa a los accesos y las situaciones de error.
Rotación de logs El proceso de rotación de archivos de registro consiste en la rotación automática, comprensión,
extracción de los archivos de logs.
Visita Cuando un usuario entra en una página web se produce una visita. Todo el tiempo que navegue por la web
contará como esa visita, sólo una. La primera petición que realiza ese cliente remoto es lo que cuenta
como visita.
Otros Glosarios
31 de 35
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
32 de 35
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 8 'Registro y monitorización de
Apache2'
Los puntos a destacar de esta unidad son los siguientes:
1. La instalación de Apache2 por defecto deja activados sus mecanismos de registro de actividad en general del servidor web.
Permite almacenar información relativa a errores producidos al ejecutar el proceso apache2 (Registro de error) y a los
accesos al servidor (Registro de actividad).
2. El proceso de rotación de archivos de registro consiste en salvar el archivo actual bajo otro nombre y crear uno nuevo vacío.
De esta forma, sin renunciar a disponer de todos los sucesos del sistema, se puede trabajar con archivos de menor tamaño.
Logrotate es una utilidad que lleva acabo la rotación automática, comprensión, extracción y envío de los archivos de logs.
3. Apache2 dispone de herramientas web que proporcinan estadísticas de uso y de esa forma conocer qué páginas son mas
frecuentemente servidas y cuáles menos. Webalizer y Awstats son dos de ellas y válidas tanto para Ubuntu como para
Windows.
4. Desde Windows se ha estudiado la aplicación BBClone como analizador de accesos a Apache2. BBClone detalla para cada
visitante su dirección IP, sistema operativo, navegador, desde que URL han accedido a su sitio web utilizando una interfaz
gráfica. Es, además, software libre con licencia GNU General Public License.
33 de 35
Curso Mentor Apache
Autoevaluación Unidad 8
Autoevaluación
34 de 35
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 8
35 de 35
Curso Mentor Apache
Apache
Unidad 9: Proxy / WedDav
En este capítulo aprenderás:
a configurar Apache2 como proxy para tu red local tanto desde Ubuntu como desde Windows.
A configurar Apache2 como caché web acelerando de esa forma los accesos de los clientes a Internet.
A configurar Apache como servidor WebDAV y permitiendo así crear espacios de colaboración.
A utilizar las directivas asociadas a las acciones anteriores.
A activar y utilizar los módulos de Apache implicados en las funcionalidades anteriores.
Material complementario:
1. Archivo con las actividades referidas a lo largo del capítulo. Archivo U9_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U9_mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
1 de 21
Curso Mentor Apache
Introducción
Objetivos
Conocer los conceptos de proxy, caché y webdav.
Realizar la configuración necesaria de Apache2 funcionando como servidor de estos servicios en ambos sistemas
operativos.
Conocimientos previos
En esta unidad estudiamos diferentes funcionalidades de Apache2 que requieren la activación de ciertos módulos y unas
configuraciones específicas relacionadas con la utilización de Apache como proxy-caché y servidor WebDav.
Es una unidad sencilla, con conceptos muy asequibles y útiles e interesantes para aplicar a nuestro servidor web.
Contenidos
Unidad 9: Proxy / WebDav
A. Ubuntu
B. Windows
C. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 21
Curso Mentor Apache
Ubuntu:
Introducción
Apache2 puede funcionar como servidor proxy, servidor de caché o una combinación de ambos.
Servidor proxy es un servidor intermedio entre el cliente y el servidor de origen que acepta las peticiones de los clientes, las
transmite al servidor de origen, y después devuelve la respuesta del servidor de origen al cliente.
Si varios clientes piden el mismo contenido, el proxy sirve el contenido desde su caché, en lugar de pedirlo cada vez que lo
necesita al servidor de origen, reduciendo con esto el tiempo de respuesta.
El término proxy indica que se está actuando en nombre de otro elemento. En términos de servidores quiere decir que un
servidor obtiene información de otro servidor para mostrarlo al cliente web.
La gestión del comportamiento de Apache2 como proxy la proporciona el módulo mod_proxy que viene como módulo
disponible pero no está activado por defecto.
Lo usual en las aulas es disponer de una herramienta proxy específica, como puede ser Squid que es ampliamente
configurable. Pero, es su defecto se puede configurar Apache2 para llevar a cabo dicho servicio.
¿Cuáles son entonces las ventajas de utilizar Apache 2 como proxy-caché?
Una sola máquina tiene acceso a Internet.
El cliente queda oculto detrás del servidor.
La red interna, su estructura y tipología queda oculta.
Es posible llevar un control del tráfico generado por los clientes en la red interna.
Es posible bloquear o filtrar accesos.
En general, son las ventajas de la utilización de un proxy, como pudiera ser Squid o cualquier otro y que podemos resumir en:
1. Seguridad: el servidor proxy es utilizado por los clientes como puerta de enlace hacia Internet.
2. Caché: el servidor proxy almacena la páginas accedidas recientemente y esto agiliza los posteriores accesos a las
mismas.
3. Filtrado: como todas las peticiones de la red interna pasan a través del proxy podemos incorporar reglas de acceso a
Internet y a sus contenidos.
En nuestro caso configuraremos el módulo proxy para que las máquinas de la red local 192.168.0.0/24 salgan a Internet
utilizando como proxy el servidor web Apache2.
3 de 21
Curso Mentor Apache
# ls /etc/apache2/mods-available/ | grep proxy
proxy_ajp.load
proxy_balancer.load
proxy.conf
proxy_connect.load
proxy_ftp.load
proxy_http.load
proxy.load
proxy_scgi.load
Activamos los módulos siguientes:
# a2enmod proxy
Module proxy installed; run /etc/init.d/apache2 force-reload to enable.
# a2enmod proxy_connect
# a2enmod proxy_ftp
# a2enmod proxy_http
# /etc/init.d/apache2 force-reload
<IfModule mod_proxy.c>
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168.0.
</Proxy>
</IfModule>
NOTA: si en la línea Allow from colocamos un nombre de dominio habrá que comprobar que desde el servidor se resuelven
correctamente los nombres de los clientes, vía DNS o vía /etc/hosts.
El resto del archivo de configuración lo mantenemos como está.
Relanzar/recargar el demonio de Apache2:
# /etc/init.d/apache2 force-reload
4 de 21
Curso Mentor Apache
MUY IMPORTANTE
Desde el navegador web Firefox del equipo cliente hay que configurar la salida a Internet. Vamos a utilizar como proxy la
máquina 192.168.0.1 escuchando en el puerto 80, que se supone que es donde reside el servidor Apache2.
Comprobar que el acceso a Internet desde Firefox en el cliente es correcto.
Apache2 bloquea peticiones HTTP, HTTPs y FTP de sitios que en su nombre contengan el dominio, host o palabra dada.
Por ejemplo: www.sex.com se podrían bloquear todos aquellos dominios que contuvieran 'sex' en su nombre.
Apache2 funcionando como proxy dispone de directivas específicas para el filtrado de contenidos, que nos permiten bloquear
hosts concretos, dominios y hosts/dominios cuyo nombre se proporciona parcialmente. De esta forma se prohiben las
solicitudes a ciertas direcciones.
Ejemplos:
1. Bloquear un host:
ProxyBlock www.google.es
2. Bloquear el dominio:
ProxyBlock google.es
3. Bloquear cualquier host/dominio que contenga una cadena:
ProxyBlock google
4. Bloquear cualquier petición:
ProxyBlock *
Si queremos configurar Apache2 para impedir conexiones a www.elpais.es hay que editar el archivo /etc/apache2
/mods_available/proxy.conf y añadir la línea:
ProxyRequests On
ProxyBlock www.elpais.es
<Proxy *>
.................
Desde el navegador (ya preparado) comprobar que se deniega el acceso a esta página web.
5 de 21
Curso Mentor Apache
Cuando un servidor Apache2 funciona como proxy también se puede hacer que funcione como caché.
A medida que se vayan haciendo solicitudes en el servidor proxy-caché, primero se comprobará si hay copias locales de las
páginas solicitadas.
Si las hay, el servidor Apache2 mostrará al cliente web las páginas cacheadas.
Si no están en el servidor Apache2, se traerán desde Internet y se almacenarán en la caché.
La utilización de Apache2 como caché puede mejorar los tiempos de respuesta y disminuir el tráfico de red.
Estas mejoras dependerán de la cantidad de disco asignada a la caché, de los tiempos de caducidad de la caché, etc.
#ls /etc/apache2/mods-available | grep cache
cache.load
disk_cache.load
disk_cache.conf
file_cache.load
mem_cache.load
mem_cache.conf
El módulo fundamental para activar la caché de disco es disk_cache en cuyo archivo de configuración daremos los
parámetros de nuestra caché.
#a2enmod file_cache mem_cache disk_cache
#/etc/init.d/apache2 force-reload
Directivas relacionadas
Vamos a ver ahora qué directivas son las que gobiernan el funcionamiento de Apache2 como proxy-caché.
Así como la directiva básica para el funcionamiento de Apache2 como proxy era ProxyRequests, la directiva básica de
funcionamiento como caché es CacheRoot que proporciona la ubicación para los archivos en la caché.
Directivas relacionadas con la caché son:
Caché Descripción
CacheRoot Proporciona la ubicación para los archivos en la caché. Módulo disk_cache.
6 de 21
Curso Mentor Apache
Caché Descripción
CacheSize Establece la máxima cantidad de espacio en KB que será usado en caché.
Conviene dar el valor máximo disponible para el sistema de archivos. Es una
directiva que está documentada en Apache 2.2 pero no está activa.
CacheMaxExpire Nº de segundos que un objeto puede estar en la caché sin chequear la página
origen para determinar si esta página ha sido actualizada. Módulo mod_cache.
CacheLastModifiedFactor Define el valor que será usado para calcular si un objeto en la caché debería
expirar cuando este objeto no tiene marca de fecha de expiración. Ejemplo: un
factor de 0.1 para un tiempo de 20h desde la última modificación daría una fecha
de expiración de 2h. Módulo mod_cache.
CacheGcInterval Limpieza periódica de la caché. El servidor cada X horas recoge la basura y
garantiza que la caché contiene menos del tamaño en Kb indicado en CacheSize.
CacheDefaultExpire Nº de segundos para que un objeto expire si este no tiene ninguna fecha de
expiración. Configuración del servidor, virtual host. Módulo mod_cache.
CacheMaxFileSize Valor máximo (tamaño en bytes) para los objetos almacenados en caché. Módulo
disk_cache.
CacheMinFileSize Valor mínimo (tamaño en bytes) para los objetos almacenados en caché. Módulo
disk_cache.
Al ejecutar el servidor Apache2 como caché agilizamos a los usuarios el acceso a contenidos que ya han sido
solicitados por él mismo o por otros usuarios.
El único problema en estos casos es la actualización de los contenidos ya que lo que se muestra es una copia local
del objeto.
A continuación establecemos una configuración sencilla para la caché de Apache2.
CacheRoot /var/cache/apache2/mod_disk_cache
2. Este directorio existe por instalación y comprobamos que el dueño y el grupo son del usuario que ejecuta Apache2
www-data:
drwxr-xr-x 2 www-data www-data 4096 2007-08-17 00:54 mod_disk_cache
3. En el archivo de configuración disk_cache.conf añadimos las líneas que configuran el comportamiento de la caché:
<IfModule mod_disk_cache.c>
CacheRoot /var/cache/apache2/mod_disk_cache
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3
CacheMaxFileSize 64000
CacheMinFileSize 64
</IfModule>
7 de 21
Curso Mentor Apache
8 de 21
Curso Mentor Apache
WebDAV (Web-based Distributed Authoring and Versioning, Autoría y Versionado Distribuido basado en Web) es un estándar
que describe como, a través de la extensión del protocolo HTTP 1.1, se puede escribir, copiar, eliminar o modificar archivos.
También puede modificar sus propiedades, nombre o características de seguridad, niveles de acceso, etc. Es decir, permite
utilizar un servidor de archivos web remoto como si fuera un servidor de archivos local.
WebDAV sigue el lema: "makes the Web Writable".
Sabemos que la información existente en la web es de solo lectura. Cuando se solicita acceder a una página web el servidor
responde con una copia de dicha página, visible en el navegador. El protocolo HTTP no tiene ningún medio definido por el que
el usuario pueda modificar una página o crear una nueva. Normalmente se recurre a protocolos como ftp o sftp.
WebDAV es un protocolo construido sobre HTTP, al cual complementa con un conjunto de instrucciones que permiten esta
comunicación bidireccional, ofreciendo la posibilidad, como se ha comentado antes, de crear, modificar o mover documentos en
un servidor remoto, y que incluso permite construir sistemas de archivos distribuidos accesibles desde cualquier sitio.
El objetivo de WebDAV es conseguir convertir la web, a través del protocolo HTTP, en un espacio de colaboración,
donde varios usuarios puedan participar conjuntamente en la elaboración de documentos.
Algunas de las características mas destacadas de webdav (aparte de proporcionar acceso a la escritura del
documento vía http) son:
Permite deshabilitar el acceso en escritura: necesario en un entorno de trabajo compartido, y así evitar que el
trabajo de un usuario interfiera en el trabajo del anterior sobre el mismo documento.
Permite describir propiedades (metadatos) del documento en formato xml (título, autor, fecha, tamaño) que
aunque no aparecen en el documento, dan información sobre el mismo y pueden ser gestionadas por dav.
Permite llevar un registro de las sucesivas versiones del documento así como recuperar cualquiera de ellas.
Algunos de estas características de WebDAV están ya disponibles utilizando otros mecanismos. Por ejemplo:
la transferencia de archivos vía http: se hace siempre vía ftp
el control de las versiones de un documento: se hace con cvs
¿Porque entonces utilizar WebDAV?
La ventaja de utilizar WebDAV estriba en que estas funciones, al estar basadas en http, son mas potentes y flexibles. Además y
como consecuencia desaparece la diferencia entre disco duro y espacio web. De esta forma se puede utilizar el espacio web
para almacenar documentos de los que se necesita tener disponibilidad inmediata y segura.
Con un navegador adecuado el usuario podría acceder y manipular la información. Por ejemplo, OpenOffice 2 ya
lleva incorporado soporte DAV.
Además, con WebDAV los usuarios pueden montar directorios compartidos con una funcionalidad similar a la
utilización de protocolos NFS o SMB.
La utilización de este servicio requiere un servidor WebDAV (activado el módulo mod_dav que ya viene incluido en Apache2) y
un cliente preparado para comunicarse con el servidor.
La página oficial del proyecto es http://webdav.org.
Hemos visto ya como habilitar un directorio en el servidor Apache con nuestros contenidos públicos. Pero sólo como un
directorio de descarga, los usuarios que acceden a él no tienen forma de subir archivos o editar los archivos disponibles.
9 de 21
Curso Mentor Apache
WebDAV permite que la carpeta compartida se muestre en nuestro escritorio y en el de otros usuarios como una carpeta
local más, permitiendo editar su contenido.
WebDAV permite bloquear archivos para prevenir que dos personas editen el mismo contenido al mismo tiempo.
Vamos a añadir soporte a WebDAV a nuestro servidor Apache.
Habilitar los siguiente módulos:
#a2enmod dav
#a2enmod dav_fs
#a2enmod auth_digest ;si no se ha habilitado en el Capítulo 6
Creamos un usuario y contraseña para acceder a la carpeta (OJO con la opción -c si ya tenemos creado el archivo):
#htdigest /etc/apache2/passwd/.htdigest “Directorio compartido” usuario-dav
Ahora creamos un nuevo host virtual en nuestra web con información para compartir por WebDAV:
#gedit /etc/apache2/sites-available/webdav
Incluimos:
<VirtualHost * >
ServerName webdav.apache2.com
DocumentRoot /var/www/compartido
Alias /dav /var/www/compartido
<Directory /var/www/compartido>
AuthType Digest
AuthName "directorio compartido"
AuthUserFile /etc/apache2/passwd/.htdigest
Require valid-user
Options None
AllowOverride None
</Directory>
Alias /dav /var/www/compartido
<Location /dav>
DAV On
</Location>
Creamos el directorio y le decimos que pertenezca al servidor web (para que éste pueda escribir en ese directorio):
#mkdir /var/www/compartido
#chown www-data.www-data /var/www/compartido
#chmod 750 /var/www/compartido
En función del valor de umask definido en el sistema, es posible que al crear el directorio tenga asignados estos permisos.
#mkdir /var/lock/apache2
#chown www-data.www-data /var/lock/apache2
#chmod 750 /var/lock/apache2
Es posible que este directorio ya exista. Comprobar el dueño y grupo y los permisos.
Comprobar que en el archivo de configuración del módulo dav_fs.conf existen las líneas:
10 de 21
Curso Mentor Apache
DAVLockDB /var/lock/apache2/DAVLock
DAVMinTimeout 10
Habilitamos nuestro nuevo espacio web (host virtual webdav):
#a2ensite webdav
#/etc/init.d/apache2 force-reload
Para probar el funcionamiento mediante una conexión al servidor WebDAV hay que ir a:
Lugares -> Conectar con el servidor ...
Acabar de completar con los datos siguientes:
Nos conectamos al servidor WebDAV y al forzar autenticación digest nos pide usuario y contraseña de un usuario con
autorización, en nuestro caso usuario-dav.
Si introducimos el nombre del usuario en la ventana 'Conectar al servidor' ahora sólo pedirá la contraseña.
Nos mostrará el contenido del directorio /var/www/compartido como una carpeta más del sistema (unidad de red)
permitiendo la edición de los archivos que contiene.
11 de 21
Curso Mentor Apache
Windows:
Introducción
Vamos a configurar Apache2 como proxy-caché desde Windows.
Como ya se comentó desde Ubuntu, una de las ventajas de utilizar Apache2 como proxy (si no se dispone del servicio proxy en
el sistema) es que ofrece la posibilidad al administrador de controlar los accesos a Internet de los usuarios.
12 de 21
Curso Mentor Apache
Para ello editamos el archivo C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
1. Activar el módulo proxy_module eliminando '#':
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
2. Activar el proxy propiamente. Debemos incluir una sección <IfModule> en la que incluiremos las directivas específicas de
activación y ámbito de aplicación de Apache2 como proxy.
<IfModule proxy_module>
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168.0.
</Proxy>
</IfModule>
Esta sección permite que Apache2 acepte peticiones proxy dentro de la red 192.168.0.0/24.
Si sólo queremos que Apache funcione como caché debemos comentar la directiva ProxyRequests. De esta forma se limitará
a funcionar como servidor de caché.
MUY IMPORTANTE
Desde el navegador web Firefox del equipo cliente hay que configurar la salida a Internet. Vamos a utilizar como proxy la
máquina 192.168.0.1 escuchando en el puerto 80, que se supone que es donde reside el servidor Apache2.
Comprobar que el acceso a Internet desde Firefox en el cliente es correcto.
A continuación establecemos una configuración sencilla para la caché de Apache2.
1. Editamos el archivo de configuración httpd.conf y en la sección IfModule del módulo proxy añadimos la línea:
2. Este directorio muy probablemente no existirá. Crearlo y tener en cuenta que el usuario que ejecuta Apache2 debe poder
modificar dicho directorio.
3. El comportamiento de la caché se configura añadiendo las siguientes líneas en la sección IfModule:
13 de 21
Curso Mentor Apache
Si no definimos CacheRoot no se llevará a cabo la función de caché. El resto de directivas para caché sirven para determinar
las características de la caché.
A continuación establecemos una configuración sencilla para la caché de Apache2.
1. Editamos el archivo de configuración httpd.conf y en la sección IfModule del módulo proxy añadimos la línea:
2. Este directorio muy probablemente no existirá. Crearlo y tener en cuenta que el usuario que ejecuta Apache2 debe poder
modificar dicho directorio.
3. El comportamiento de la caché se configura añadiendo las siguientes líneas en la sección IfModule:
Si no definimos CacheRoot no se llevará a cabo la función de caché. El resto de directivas para caché sirven para determinar
las características de la caché.
14 de 21
Curso Mentor Apache
Vamos a explicar cómo se activa el módulo de Apache2 mod_dav y la configuración necesaria para que nuestro servidor
Apache se convierta en un servidor WebDAV.
Recordar que el objetivo de WebDAV es conseguir convertir la web, a través del protocolo HTTP, en un espacio de
colaboración, donde varias personas puedan participar conjuntamente en la elaboración de documentos.
Para ello:
1. Descomentar la línea LoadModule correspondiente al módulo en httpd.conf
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
2. Descomentar la línea Include correspondiente en httpd.conf
Include conf/extra/httpd-dav.conf
DavLockDB "C:/Archivos de programa/Apache Software Foundation/Apache2.2/var/DavLock"
4. Comprobar/crear el directorio al que hace referencia la directiva DAVLockDB teniendo en cuenta que el usuario y grupo de
Apache2 tenga permisos para escribir en él. Este directorio debe coincidir con la sección Directory que contiene la directiva
DAV On. Para ello:
C:/Archivos de programa/Apache Software Foundation/Apache2.2/> mkdir var
5. Creamos el directorio para los contenidos que pueden ser objeto de operaciones WebDAV.
C:/Archivos de programa/Apache Software Foundation/Apache2.2/htdocs/> mkdir uploads
6. Utilizar htdigest para crear la base datos de contraseñas del dominio DAV-upload y dar de alta el
usuario admin:
7. El contenido del archivo de configuración httpd-dav.conf es el siguiente:
DavLockDB "C:/Archivos de programa/Apache Software Foundation/Apache2.2/var/DavLock"
Alias /uploads "C:/Archivos de programa/Apache Software Foundation/Apache2.2/htdocs
/uploads"
<Directory "C:/Archivos de programa/Apache Software Foundation/Apache2.2/htdocs
/uploads">
Options Indexes Followsymlinks
Dav On
Order Allow,Deny
Allow from all
AuthType Digest
AuthName DAV-upload
AuthUserFile "C:/Archivos de programa/Apache Software Foundation/Apache2.2
15 de 21
Curso Mentor Apache
/bin/user.passwd"
<LimitExcept GET OPTIONS>
require user admin
</LimitExcept>
</Directory>
Acceso a la zona colaborativa:
1. Asegurarse de que la carpeta uploads tiene permisos de lectura y escritura para todos los usuarios.
2. Ir a Mis sitios de Red -> Añadir sitios de Red. En la ventana que solicita la localización del sitio de Red ir a Examinar y
buscar y seleccionar, en la red de Microsoft, la carpeta que hemos compartido como uploads.
3. Copiar la URL completa incluyendo http://
4. Aparece la pantalla de conexión al servidor que solicita el usuario y la contraseña de red.
5. Introducir el nombre de usuario creado y la contraseña. Aceptar.
6. Aparece la pantalla Bienvenido al asistente de añadir sitios de Red. Introducir un nombre para el sitio de Red.
Finalizar.
7. Aparece una carpeta web con los archivos disponibles de uploads. Estos archivos se pueden eer, copiar, modificar, guardar y
cambiar el nombre en el servidor Apache2 de igual forma a como se podría desde un explorador de archivos.
En el caso de que se presente algún problema con la utilización de WebDAV en Windows XP se puede utilizar la herramienta
DAVExplorer.
16 de 21
Curso Mentor Apache
Glosario
Glosario Unidad 9
Concepto Definición
Servidor Servidor que almacena localmente las páginas consultadas recientemente por los usuarios, evitando así
proxy-caché la conexión directa del usuario al servidor remoto y así obtener un gran incremento en la velocidad de
transferencia de la información.
Squid Squid es un programa de software libre que implementa un servidor proxy y un demonio para caché
web, bajo licencia GPL que dispone de una gran cantidad de utilidades y opciones de configuración.
WebDAV (Web-based Distributed Authoring and Versioning) protocolo sobre HTTP que permite crear, modificar o
mover documentos en un servidor remoto. La utilización de este servicio permite al usuario llevar a
cabo modificaciones sobre páginas web accedidas que, en principio, sólo podría leer y sin necesidad de
utilizar otros servicios como FTP.
Otros Glosarios
17 de 21
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
18 de 21
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 9 'Proxy / WebDav'
Los puntos a destacar de esta unidad son los siguientes:
1. Servidor proxy es un servidor intermedio entre el cliente y el servidor de origen que acepta las peticiones de los clientes,
las transmite al servidor de origen, y después devuelve la respuesta del servidor de origen al cliente.
2. Apache2 funcionando como proxy dispone de directivas específicas para el filtrado de contenidos, que nos permiten
bloquear hosts concretos, dominios y hosts/dominios cuyo nombre se proporciona parcialmente.
3. La utilización de Apache2 como caché puede mejorar los tiempos de respuesta y disminuir el tráfico de red.
4. El objetivo de WebDAV es conseguir convertir la web, a través del protocolo HTTP, en un espacio de colaboración,
donde varios usuarios puedan participar conjuntamente en la elaboración de documentos.
5. WebDAV permite que la carpeta compartida se muestre en nuestro escritorio y en el de otros usuarios como una carpeta
local más, permitiendo editar su contenido.
19 de 21
Curso Mentor Apache
Autoevaluación Unidad 9
Autoevaluación
20 de 21
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 9
21 de 21
Curso Mentor Apache
Apache
Unidad 10: MySQL y PHP en Apache2
En este capítulo aprenderás:
la utilización de Apache2 como servidor web base para instalación, configuración y uso de diferentes herramientas web.
la instalación y configuración de MySQL como SGBD y su uso básico.
la instalación y configuración del lenguaje de programación PHP5 únicamente como requerimiento de administración web de
MySQL.
la instalación y configuración de phpMyAdmin como herramienta de gestión web de MySQL.
Material complementario:
1. Archivo con las actividades referidas a lo largo del capítulo. Archivo U10_Actividades.pdf
2. Mapa conceptual del capítulo. Archivo U10_Mapaconceptual.png
3. Glosario completo del curso. Archivo glosario.pdf
NOTA Importante:
Es importante tener en cuenta que este capítulo no contempla una explicación exhaustiva de MySQL, PHP y
phpMyAdmin. El objetivo es conocer la integración y funcionamiento básico utilizando como plataforma de base Apache2.
Para evitar posibles interacciones y complicaciones es importante realizar la práctica en primer lugar teniendo activo sólo
el sitio por defecto. Una vez configurado y comprobado que funciona activar el resto de sitios virtuales definidos en las
sucesivas actividades y prácticas y comprobar que se mantiene el correcto funcionamiento.
1 de 25
Curso Mentor Apache
Introducción
Objetivos
Conocer los requerimientos del sistema para la instalación de MySQL en Apache2.
Conocimientos previos
En esta unidad abordamos la instalación y configuración básica de MySQL, así como de PHP5 para Apache2 y tanto para Ubuntu como para
Windows. Como dicha instalación y configuración es desde cero no requiere ningún conocimiento previo.
Contenidos
Unidad 10: MySQL y PHP en Apache
A. Ubuntu
1. Instalación de MySQL
2. Configuración de MySQL
3. Instalación del soporte para PHP5
4. Instalación y configuración de phpMyAdmin
B. Windows
1. Instalación de MySQL
2. Instalación del soporte para PHP5
3. Instalación y configuración de phpMyAdmin
C. Fin de unidad
1. Glosario
2. Fuentes de información
3. Resumen final
4. Autoevaluación
2 de 25
Curso Mentor Apache
Ubuntu:
Introducción a MySQL
MySQL es un Sistema Gestor de Bases de Datos Relacional (SGBDR).
MySQL ha sido desarrollado, distribuido y mantenido por MySQLAB, compañía comercial fundada por los desarrolladores de MySQL que
auna código abierto con negocio.
Un Sistema de Gestión de Bases de Datos (SGBDR) es una aplicación formada por un conjunto de programas que permiten crear y
gestionar bases de datos (BBDD).
Proporciona al usuario de la base de datos las herramientas necesarias para:
Definir las estructuras de los datos.
Manipular los datos: insertar, modificar, borrar y consultar los datos existentes.
Mantener la integridad de la información.
Proporcionar control de la privacidad y seguridad de los datos en la BBDD, permitiendo sólo el acceso a los usuarios autorizados.
En general, un Sistema Gestor de Bases de Datos Relacional puede administrar múltiples BBDD Relacionales. Y la BBDD almacena los
datos en tablas separadas que se pueden relacionar entre sí.
Cada tabla representa una entidad de aquello que intentamos modelar y consiste en una serie de filas (o tuplas) y de columnas (o atributos).
Cada fila de una tabla tiene el mismo número de columnas y representa una instancia de esa entidad. Cada columna representa un atributo o
propiedad de la entidad y es de un tipo determinado.
MySQL es un servidor de bases de datos relacionales multihilo y multiusuario, muy utilizado en entornos GNU/Linux, es software libre y se
distribuye bajo licencia GNU GPL (http://www.gnu.org/).
Tienes disponible gran cantidad de información sobre MySQL en:
La Wikipedia: http://es.wikipedia.org/wiki/MySQL
Manual de MySQL: http://php.net/manual/es/book.mysql.php
Tutorial básico: http://www.mysqlya.com.ar/
3 de 25
Curso Mentor Apache
En primer lugar vamos a instalar los paquetes necesarios de MySQL. La propia instalación nos irá haciendo una serie de preguntas referentes
a la configuración de los paquetes.
Si la instalación la queremos hacer desde Synaptic tendremos que seleccionar el paquete mysql-server-5.1. Hay que fijarse en que no
exista ningún otro paquete de servidor instalado y si lo hubiera hacer una desinstalación completa que incluye archivos de configuración.
#apt-get install mysql-server-5.1
Leyendo lista de paquetes... Hecho
..................................
Se instalarán los siguientes paquetes extras:
libdbd-mysql-perl libdbi-perl libmysqlclient15off libnet-daemon-perl libplrpc-perl
mysql-client-5.0 mysql-common
Paquetes sugeridos:
dbishell libcompress-zlib-perl tinyca
Paquetes recomendados
mailx
Se instalarán los siguientes paquetes NUEVOS:
libdbd-mysql-perl libdbi-perl libmysqlclient15off libnet-daemon-perl
libplrpc-perl mysql-client-5.0 mysql-common mysql-server-5.0
.....................
¿Desea continuar [S/n]?
.......................
Configurando mysql-client-5.0 (5.0.38-0ubuntu1) ...
Configurando mysql-server-5.0 (5.0.38-0ubuntu1) ...
* Stopping MySQL database server mysqld [ OK ]
* Starting MySQL database server mysqld [ OK ]
La propia instalación ya lanza el demonio (proceso servidor) de MySQL que es mysqld. Para comprobar que está funcionando y buscar en
qué puerto está escuchando el servicio:
#netstat -atunp|grep mysql
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2579/mysqld
El proceso de instalación avisa de la necesidad de proteger el servidor asignando una password al usuario que hace de root.
El servidor de bases de datos MySQL dispone en /etc/mysql/ de varios archivos de configuración:
/etc/mysql/debian.cnf archivo de configuración directamente creado por Debian y que no debe modificarse.
/etc/mysql/my.cnf archivo de configuración del servidor de MySQL y que contiene las opciones globales. Los usuarios pueden
disponer de configuraciones personalizadas creando archivos del tipo ~/.my.cnf.
/etc/mysql/conf.d directorio con archivos que configuración que serán incluidos.
4 de 25
Curso Mentor Apache
Configuración de MySQL
Configuración
# > indica que se trata de un comentario
[seccion] > indica que se inicia una sección. Los parámetros incluidos dentro de una sección afectan sólo a ésta. Ejemplo:
[mysqld]
A. Opciones para el servidor: sección [mysqld]
1. opcion = valor
Ejemplo:
2. opcion se trata de parámetros booleanos que se establecen al estar presentes en el archivo de configuración.
Ejemplo:
log-bin si lo escribimos (descomentamos) registramos las actualizaciones realizadas
en todas las tablas
3. set-variable = variable = valor para establecer los valores de las variables.
Ejemplos:
set-variable=write_buffer=2M establecemos en 2MB el búffer de escritura.
Usando el archivo /etc/mysql/my.cnf podemos indicar que los mensajes de error aparezcan en castellano.
[mysqld]
....
language = /usr/share/mysql/spanish
El usuario mysql indicado en el archivo es el root de MySQL, no es el usuario root de nuestro sistema. Este usuario mysql se utilizará para
tareas administrativas y se darán privilegios a otros usuarios para la gestión de las bases de datos.
user=mysql
Por motivos de seguridad el paquete activa la red únicamente para la interfaz de loopback (127.0.0.1) utilizando la entrada 'bind-address' en
/etc/mysql/my.cnf.
Si queremos permitir conexiones desde otra máquina, hay que hacer que el servidor escuche en la interfaz de red. Por ejemplo, si nuestra IP
local es 192.168.1.1 escribiremos
bind-address = 192.168.1.1
El servicio mysql puede ser lanzado, parado o relanzado desde la línea de orden de la forma:
# /etc/init.d/mysql start/stop/restart
5 de 25
Curso Mentor Apache
Inicio de MySQL
Ejecución
Ya tenemos MySQL instalado y con una configuración mínima.
Inicialmente cualquiera puede conectarse al servidor MySQL y crear o modificar las bases de datos. Lo primero que debemos hacer es
asignar al usuario root una contraseña de acceso. Ver en este punto más adelante.
Se puede hacer de varias formas, pero para ejemplificar la forma de conectar al servidor lo hacemos:
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
y aparece el prompt de introducción de comandos. Si no queremos hacer nada para salir, podemos escribir:
mysql> quit
Volvemos a entrar y veremos ejemplos de cómo trabajar en línea de orden con MySQL.
Acciones:
1. Listar las bases de datos que se crean por defecto en el proceso de instalación:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
2 rows in set (0.00 sec
Es importante saber que:
1. En las sentencias no importa que escribamos en mayúsculas o no.
2. Es importante escribir los nombres de los campos, tablas, bases de datos, en su forma original.
3. Las sentencias han de terminar en ;
4. Se mantiene un historial de comandos al que podemos acceder con los cursores.
Es importante también asignar password MySQL al usuario administrador.
2. ¿Cómo se comprobaría que el usuario root de MySQL no tiene password?
En primer lugar averiguamos qué tablas tiene la BBDD mysql, para ello indicamos que vamos a utilizarla:
mysql> use mysql;
Ahora solicitamos ver las tablas de esta B.D.:
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| func |
| help_category |
| help_keyword |
| help_relation |
6 de 25
Curso Mentor Apache
| help_topic |
| host |
| proc |
| procs_priv |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
Vamos a la tabla llamada 'user' que es la que almacena los usuarios. Una vez hecho esto hacemos una selección de la tabla que usaremos.
mysql> select * from user;
que muestra una tabla en la que podemos comprobar que el campo Password para el root está vacío:
Host User Password select_priv
localhost root y
Desde MySQL le asignamos password al usuario root de MySQL:
mysql> set password=password('elvira');
Query OK, 0 rows affected (0.00 sec)
3. Salir del servidor MySQL
mysql> exit
Bye
Si ahora intentamos entrar de nuevo con la misma orden comprobaremos que nos devuelve un error:
#mysql
Password:
ERROR 1045 (28000): Acceso negado para usuario: 'root'@'localhost' (Usando clave:
NO)
Hemos de avisar al servidor MySQL de quien somos (-u root , es decir el usuario root de MySQL) y que vamos a introducir la contraseña (-p
)
#mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
.............................................
mysql>
4. Crear una BBDD
Creamos una base de datos de prueba que llamaremos prueba y trabajar con algunos comandos básicos.
mysql> create database prueba;
Query OK, 1 row affected (0.05 sec)
y comprobemos los cambios:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| prueba |
+--------------------+
7 de 25
Curso Mentor Apache
También se puede crear la B.D. de la forma siguiente:
#mysqladmin -u root -p create prueba
mysql> USE prueba;
Database changed
mysql> create table datos(nombre varchar(20) not null, apellidos varchar(30) not
null);
Query OK, 0 rows affected (0.01 sec)
Comprobemos las tablas creadas con:
mysql> show tables;
+------------------+
| Tables_in_prueba |
+------------------+
| datos |
+------------------+
1 row in set (0.00 sec)
De la misma forma podemos utilizar las opciones:
show status muestra las variables de estado del servidor
show variables lista las variables del servidor
6. Analizar la estructura de la tabla datos, podemos hacerlo con:
mysql> describe datos;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| nombre | varchar(20) | NO | | | |
| apellidos | varchar(30) | NO | | | |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
7. Introducir datos en la tabla
mysql> insert into datos values ("Juan","Sin Miedo"),("
Pepito","Grillo");
Query OK, 2 rows affected (0.00 sec)
Registros: 2 Duplicados: 0 Peligros: 0
8. Mostrar datos por pantalla
mysql> select * from datos;
+--------+-----------------+
| nombre | apellidos |
+--------+-----------------+
| Juan | Sin Miedo |
| Pepito | Grillo |
8 de 25
Curso Mentor Apache
+--------+-----------------+
2 rows in set (0.02 sec)
9. Autorizar otros usuarios
Tal y como está configurada MySQL hasta ahora, sólo el usuario root puede manejar esta BBDD 'prueba'. Si queremos que otro usuario
(usuario1) pueda manejarla hay que autorizarle:
mysql> grant all on prueba.* to usuario1@localhost identified by ’password’;
Query OK, 0 rows affected (0.00 sec)
10. Cambio de contraseña
Para modificar la contraseña de cualquier usuario de MySQL ejecutar:
# mysql -u root -p
................
mysql> update mysql.user set Password=password('nueva_contraseña') where
user='nombre_usuario';
mysql> flush privileges;
11. Comprobación
El usuario usuario1 al que hemos dado permiso puede acceder a esta base de datos. Habrá que conectarse al servidor con:
$ mysql -u usuario1 -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution
..................
mysql>
introduciendo la contraseña asignada.
12. Conexión remota del usuario1
Si hemos permitido accesos vía red y queremos que el usuario usuario1 se pueda conectar de forma remota desde cualquier IP (representado
por el %) hemos de ejecutar la siguiente orden estando conectados como root:
mysql> grant all on prueba.* to usuario1@’%’ identified by ’contraseña’;
Query OK, 0 rows affected (0.00 sec)
13. MySQL escucha en otra IP
Si nuestro servidor de bases de datos está escuchando en la IP 192.168.1.1, para conectar usamos el comando:
$mysql -u usuario1 -h 192.168.1.1 -p
Previamente habría que modificar my.cnf para esa IP.
Usando los comandos GRANT y REVOKE de MySQL se pueden conceder y retirar, respectivamente, derechos a los usuarios.
14. Cierre y apertura de puertos
MySQL abre el puerto 3306. Si se quiere cerrar se puede hacer mediante la siguiente regla de
iptables:
# /sbin/iptables -t filter -A INPUT -p tcp -s 0/0 -d 0/0 --dport 3306 -i eth0 -j
DROP //para TCP
# /sbin/iptables -t filter -A INPUT -p udp -s 0/0 -d 0/0 --dport 3306 -i eth0 -j
DROP //para UDP
9 de 25
Curso Mentor Apache
Si se quiere abrir para dejar que se acceda remotamente habría que escribir las siguientes reglas:
10 de 25
Curso Mentor Apache
PHP es un lenguaje de programación interpretado, de alto nivel, ejecutado en el servidor y usado frecuentemente para la creación de
contenido para webs dinámicas. También permite la creación de aplicaciones con una interfaz gráfica para el usuario (GUI), utilizando
extensiones para las librerías Qt o GTK.
Su código está embebido en el código HTML y al ser ejecutado en el servidor PHP nunca es enviado al cliente. El servidor es el
quien procesa la petición del cliente ejecutando el código PHP y devolviendo el HTML generado.
Su nombre, PHP, es un acrónimo recursivo que significa "PHP Hypertext Pre-processor".
La instalación se puede hacer utilizando la herramienta Synaptic o la línea de orden.
1. Instalación del paquete correspondiente a PHP5
# apt-get install php5
Leyendo lista de paquetes... Hecho
...................................
Se instalarán los siguientes paquetes extras:
apache2-mpm-prefork libapache2-mod-php5 php5-common
Paquetes sugeridos:
php-pear
Los siguientes paquetes se ELIMINARÁN:
apache2-mpm-worker
Se instalarán los siguientes paquetes NUEVOS:
apache2-mpm-prefork libapache2-mod-php5 php5 php5-common
.......................................
¿Desea continuar [S/n]?
2. Soporte de PHP5 para BBDD
Como vamos a trabajar con el módulo php5-mysql que permite a PHP disponer de soporte de base de datos MySQL, lo instalamos:
# apt-get install php5-mysql
...................................
Se instalarán los siguientes paquetes NUEVOS:
php5-mysql
............................................
(Leyendo la base de datos ...
Desempaquetando php5-mysql (de .../php5-mysql_5.2.1-0ubuntu1.4_i386.deb) ...
Configurando php5-mysql (5.2.1-0ubuntu1.4) ...
Nos quedarán por instalar los paquetes libapache2-mod-php5 y phpMyAdmin.
3. Instalación de libapache2-mod-php5
libapache2-mod-php5 es un módulo para Apache2 que permite la autenticación HTTP contra la información almacenada en una base
de datos de MySQL.
# apt-get install libapache2-mod-php5
libapache2-mod-php5 ya está en su versión más reciente.
4. Apache2 funcionando
Comprobar que el servidor Apache2 sigue funcionando correctamente. Para ello abrimos el navegador web y escribimos
http://servidor.apache2.com y debería aparecer la página de inicio que indica que el servidor Apache2 se encuentra instalado y corriendo.
5. Ajuste de configuración
Probablemente al intentar cargar el módulo mod_php5 obtengamos el mensaje de error de que dicho módulo no existe. Tendremos pues
11 de 25
Curso Mentor Apache
que crear a mano los archivos correspondientes de carga y configuración, así como los enlaces simbólicos. Para ello ir a /etc/apache2
/mods-available/ y editar/crear el archivo php5.conf con las líneas:
<IfModule mod_php5.c>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
</IfModule>
Editar/crear el archivo php5.load con la línea:
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
Crear los correspondientes enlaces simbólicos:
#ln -s /etc/apache2/mods-available/php5.load /etc/apache2/mods-enabled/php5.load
#ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf
Reiniciar Apache2:
# /etc/init.d/apache2 restart
6. Comprobación global
Ir al directorio donde están los documentos visibles desde web:
# cd /var/www/
Crear el archivo info.php con el siguiente contenido:
# vi info.php
<?php
phpinfo();
?>
Abrir el navegador web y escribir http://servidor.apache2.com/info.php y aparecerá la información de PHP5.
12 de 25
Curso Mentor Apache
phpMyAdmin es una herramienta escrita en PHP para llevar la administración de MySQL vía web. Permite crear y eliminar BBDD, crear,
eliminar y modificar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves y privilegios, etc. Disponible
bajo la licencia GPL.
Suponemos que Apache2, MySQL y PHP5 están funcionando correctamente en el sistema.
Instalamos ahora phpMyAdmin que es una herramienta para la administración de MySQL sobre la web. Sus funciones son:
crear y borrar bases de datos
crear, copiar, borrar y modificar tablas
eliminar, editar y añadir campos
ejecutar cualquier sentencia SQL
gestión de claves
exportar e importar datos a los valores de CSV
administrar servidores y bases de datos sencillas
comprobar la integridad referencial
Instalación
Instalación de phpMyAdmin:
# apt-get install phpmyadmin
Leyendo lista de paquetes... Hecho
........................................
Paquetes recomendados
php5-mcrypt php4-mcrypt php5-gd php4-gd
Se instalarán los siguientes paquetes NUEVOS:
phpmyadmin
.........................................
Configurando phpmyadmin (2.9.1.1-2ubuntu1)
La instalación crea un enlace simbólico en el directorio /var/www/ apuntando a phpmyadmin, que realmente está instalado en
/usr/share/phpmyadmin.
#ls -l /var/www
lrwxrwxrwx 1 root root 21 2006-05-28 09:09 phpmyadmin -> /usr/share/phpmyadmin
# vi /etc/phpmyadmin/config.inc.php o
# gedit /etc/phpmyadmin/config.inc.php
1. Tipo de autenticación
Puede ser mediante cookies, http o entrar sin pedir contraseña (config). Por defecto la dejamos en cookie. Eliminar los caracteres '//' en la
línea siguiente:
$cfg['Servers'][$i]['auth_type'] = 'cookie';
13 de 25
Curso Mentor Apache
2. Usuario administrador
Indica qué usuario se conectará a las bases de datos. Por defecto viene el usuario root de MySQL. Se recomienda añadir otro usuario con
algunos privilegios de root, y así manejar las bases de datos con él, ya que con root puede ser peligroso. Nosotros hemos utilizado mysql.
$cfg['Servers'][$i]['user'] = 'mysql';
3. Contraseña administrador
Indica la contraseña asignada al usuario especificado en /etc/mysql/my.cnf.
$cfg['Servers'][$i]['password'] = 'contraseña';
4. Reiniciar los servicios de MySQL y Apache2
# /etc/init.d/apache2 restart
# /etc/init.d/mysql restart
5. Abrir phpMyAdmin
Ir al navegador y escribir http://servidor.apache2.com/phpmyadmin. Una vez realizada la validación vemos el interfaz de
phpMyAdmin.
La utilización de la herramienta excede los objetivos del curso de Apache2. En cualquier caso remitimos al alumno a la página oficial de
phpMyAdmin (http://www.phpmyadmin.net/home_page/index.php) donde existe abundante información sobre el uso de esta aplicación web.
14 de 25
Curso Mentor Apache
Windows:
15 de 25
Curso Mentor Apache
Seleccionamos la opción "Custom" y seleccionamos el directorio donde queremos instalarlo. Para ello pulsamos el botón
"Change" y escribimos "C:\MySQL\MySQL Server 5.0\".
Comienza la instalación:
En la última pantalla nos indica si queremos ahora realizar la configuración del servidor MySQL ahora.
Indicamos que queremos hacer la configuración detallada y que nuestra máquina será de desarrollo.
Queremos que MySQL se ejecute como un servicio más de Windows XP e incluimos el directorio bin del MySQL en el
path del sistema:
Pregunta si queremos utilizar MySQL con el usuario root asignándole una contraseña, o si queremos crear un usuario
anónimo, que es menos seguro. Si lo necesitamos marcamos la casilla permitiendo acceso desde el exterior.
16 de 25
Curso Mentor Apache
Termina la configuración.
17 de 25
Curso Mentor Apache
<IfModule mime_module>
....................................
AddType application/x-httpd-php .php
.................................................
Con esta línea estamos diciendo que se interpreten los archivos con extensión .php (tipos mime).
4. El archivo de configuración de PHP se llama php.ini. Al instalar por defecto se crea uno llamado php.ini-dist.
Cambiar el nombre a php.ini dejándolo en el directorio donde está inicialmente.
5. En el archivo de configuración de Apache httpd.conf hemos de indicar donde debe buscar este archivo php.ini.
Añadir la siguiente línea, por ejemplo, después de la linea de LoadModule.
PHPIniDir “C:/PHP”
6. Al acceder a nuestro servidor siempre se muestra el archivo indicado en la directiva DirectoryIndex. La modificamos
para siempre cargue un archivo index.php que nosotros preparamos. La directiva debe quedar así:
<?php phpinfo(); ?>
8. Guardar los cambios del archivo httpd.conf y reiniciar el servidor Apache2. Si aparece la siguiente información es
que PHP ha sido bien instalado y está funcionando enlazado con Apache2.
9. Editar el archivo index.php y cambiar el código por este otro que dejamos como definitivo:
<p>Esta página ha sido creada a las <b>
<?php echo date("h:i:s a", time()); ?>
</b> en un ordenador con PHP5 funcionando.</p>
<html><body><h1>Servidor web</h1></body></html>
18 de 25
Curso Mentor Apache
19 de 25
Curso Mentor Apache
Instalación de phpMyAdmin
Contenido
Hay que extraer el archivo .zip en la carpeta raíz del servidor web C:\Archivos de programa\Apache Software
Foundation\Apache2.2\htdocs.
Para la configuración de phpMyAdmin editamos (WordPad) el archivo config.inc.php. No existe como tal, pero hay
un archivo de ejemplo config.sample.inc que renombramos a config.inc.php. Buscamos las líneas:
$cfg['blowfish_secret'] = 'acegikm';
Le asignamos una cadena de caracteres cualquiera que servirá de semilla para la encriptación de contraseñas al usar
la autenticación con cookies. Salvar los cambios.
Editamos el archivo php.ini y eliminamos el ';' de la línea:
extension=php_mysql.dll
Por último copiamos el archivo libmySQL.dll que se encuentra en la ruta donde se instaló mysql (C:\MySQL\MySQL
Server 5.0\bin) y lo pegamos en C:\WINDOWS\System32.
libmySQL.dll
Reiniciamos Apache2 y MySQL. Probamos que la instalación se hizo bien yendo a http://localhost/phpmyadmin/.
20 de 25
Curso Mentor Apache
Glosario
Glosario Unidad 10
Concepto Definición
CSV Comma Separated Values, Valores Separados por Comas. Es una forma generalizada de estructurar bases de
datos donde se utilizan comas (,) en archivos de texto para indicar cuando acaba una columna y empieza la otra.
GTK+ Es una biblioteca de rutinas para desarrollar interfaces gráficas de usuario (GUI) en entornos gráficos GNOME,
XFCE de sistemas GNU/Linux.
Lenguaje interpretado Lenguaje de programación diseñado para ser ejecutado por medio de un intérprete que traduce el programa a
código fuente. También se llaman lenguajes de script.
PHP PHP es un lenguaje de programación interpretado usado frecuentemente para la creación de contenido para
webs dinámicas. También permite la creación de aplicaciones con una interfaz gráfica para el usuario (GUI),
utilizando extensiones para las librerías Qt o GTK.
Qt Es una biblioteca multiplataforma para desarrollar interfaces gráficas de usuario (GUI) creada por la compañía
noruega Trolltech y utilizada en KDE (entorno gráfico para sistemas GNU/Linux).
Tabla Conjunto de registros (tuplas) que almacenan datos homogéneos.
Otros Glosarios
21 de 25
Curso Mentor Apache
Fuentes de información
Documentos y enlaces de interés
22 de 25
Curso Mentor Apache
Resumen final
Síntesis de la Unidad 10 'Instalación'
Los puntos a destacar de esta unidad son los siguientes:
1. MySQL es un Sistema Gestor de Bases de Datos Relacional (SGBDR).
2. Un Sistema de Gestión de Bases de Datos (SGBDR) es una aplicación formada por un conjunto de programas que permiten crear y
gestionar bases de datos (BBDD).
3. El archivo de configuración de MySQL /etc/mysql/my.cnf está dividido en secciones.
4. PHP es un lenguaje de programación interpretado, de alto nivel, ejecutado en el servidor y usado frecuentemente para la creación de
contenido para webs dinámicas. También permite la creación de aplicaciones con una interfaz gráfica para el usuario (GUI), utilizando
extensiones para las librerías Qt o GTK.
5. phpMyAdmin es una herramienta escrita en PHP para llevar la administración de MySQL vía web. Permite crear y eliminar BBDD,
crear, eliminar y modificar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves y privilegios,
etc. Disponible bajo la licencia GPL.
23 de 25
Curso Mentor Apache
Autoevaluación Unidad 10
Autoevaluación
24 de 25
Curso Mentor Apache
Este artículo está licenciado bajo Creative Commons Attribution Non-commercial 3.0 License
Unidad 10
25 de 25