Anda di halaman 1dari 63

ARQUITECTURA , ESTRUCTURA Y CONFIGURACIN BSICA DE TOMCAT 7

Arquitectura
Existen varias versiones de Apache Tomcat. La diferencia entre unas versiones y otras es la versin de Servlets y JSPs que pueden manejar. En este enlace se pueden consultar las diferentes versiones, para qu especificaciones sirven y qu versin de Java es necesaria para su uso. Apache Tomcat utiliza una estructura en la que varios componentes se organizan me manera jerrquica. Estos componentes son Server, Service, Engine, Host, Connector y Context. Se puede consultar la pgina de la documentacin de Tomcat que explica estos conceptos. Entiende muy someramente qu hace cada uno y cul es la relacin entre unos y otros. Cuando hayamos instalado Tomcat podremos ver ejemplos de todos estos elementos. Excepto Context, pueden consultarse todos en el archivo de configuracin /etc/tomcat7/server.xml

La estructura de directorios de Tomcat


Los directorios que se incluyen en una instalacin de Tomcat se ubican generalmente en el directorio donde hemos descomprimido Tomcat. Sin embargo, en esta instalacin estn definidos en dos ubicaciones: /usr/share/tomcat7 y /var/lib/tomcat7. Sin embargo hay otro directorio afectado en la instalacin /etc/tomcat7 Los directorios comunes son:

bin: contiene los binarios y scripts de inicio de Tomcat. conf: la configuracin global de Tomcat. En esta instalacin es un enlace simblico a /etc/tomcat7. Tiene algunos archivos que merece la pena destacar. o catalina.policy: Este archivo contiene la poltica de seguridad relacionada con Java e impide que los Servlets o JSPs la sobrescriban por motivos de seguridad. En esta instalacin se encuentra en policy.d/03catalina.policy o catalina.properties: Contiene los archivos .JAR que no pueden sobrescribirse por motivos de seguridad y otros de uso comn. o context.xml: El archivo de contexto comn a todas las aplicaciones. Se utiliza principalmente para informar de dnde se puede encontrar el archivo web.xml de las propias aplicaciones. Contiene la configuracin que ser comn a todos los elementos Context. o logging.properties: Establece las polticas generales para el registro de actividad del servidor, aplicaciones o paquetes. o server.xml: ya hemos visto que es el fichero principal de configuracin de Tomcat y que tiene mucho que ver con su arquitectura. o tomcat-users.xml: Contiene los usuarios, contraseas y roles usados para el control de acceso. Es el archivo donde se encuentra la informacin de seguridad para las aplicaciones de administracin de Tomcat. Todos los valores son por defecto as que deben cambiarse en caso de descomentar las lneas. o web.xml: Un descriptor de despliegue por defecto con la configuracin compartida por todas las aplicaciones. Es un archivo con directivas de funcionamiento de las aplicaciones. Adems de todos estos archivos, existe un subdirectorio para cada motor con un subdirectorio localhost donde ir otro archivo de contexto especfico para cada aplicacin. Este archivo tiene la forma nombre-de-aplicacin.xml. En este caso el motor es Catalina as que estn en Catalina/localhost. Puedes ver que hay uno por cada paquete adicional que instalamos, documentacin, ejemplos y aplicaciones de administracin.

lib: continen todos los .JAR comunes a todas las aplicaciones. Aqu van archivos de Tomcat, APIs de JSPs, etc y en l podemos ubicar archivos comunes a las diferentes aplicaciones como MySQL JDBC. logs: aqu van los archivos de registro. En esta instalacin es un enlace simblico a /var/log/tomcat7 temp: este directorio es opcional. En esta instalacin no est creado ni activado por defecto. Se usa para los archivos temporales que necesita Tomcat durante su ejecucin. webapps: aqu se ubican las aplicaciones propiamente dichas. Ahora solo hay una que se denomina ROOT. Podra haber ms pero como hemos instalado la documentacin, ejemplos y administradores aparte se encuentran en su propio directorio en /usr/share/tomcat7-admin, tomcat7docs y tomcat7-examples. work: es un directorio para los archivos en uso, cuando se compilan los JSPs, etc.

Un vistazo ms profundo a la arquitectura de Tomcat

El trmino arquitectura de Tomcat tambin se refiere a la estructura XML que sigue su organizacin. Se compone de un conjunto de elementos representados por etiquetas. En la imagen puede verse cmo se relacionan unos con otros. Es interesante entrar a ver su uso en el archivo /etc/tomcat7/server.xml

Server
Es el primer elemento superior y representa una instancia de Tomcat. Es equivalente al servidor en si con un puerto asociado. Pueden existir varios en diferentes puertos y a veces se hace para que si una aplicacin falla arrastrando al servidor esto no afecte a otras aplicaciones. Contiene varios Listeners que escuchan y responden a eventos. Tambin usa GlobalNamingResources que sirven para permitir a clientes software hechos en Java encontrar objetos y datos mediante su nombre. Por ejemplo aqu se podra indicar un recurso global como una base de datos MySQL.

Service
El servicio agrupa un contenedor de tipo Engine con un conjunto de conectores. El motor suele ser Catalina y los conectores por defecto HTTP y AJP.

Connector
Los conectores sirven para comunicar las aplicaciones con clientes (por ejemplo un navegador web u otros servidores). Representan el punto donde se reciben las peticiones y se les asigna un puerto IP en el servidor.

Containers
Tomcat se refiere a Engine, Host, Context, y Cluster como contenedores. El de nivel ms alto es Engine y el ms bajo Context. Algunos componentes como Realm o Valve pueden ubicarse dentro de un contenedor.

Engine
El motor procesa las peticiones y es un componente que representa el motor de Servlets Catalina. Examina las cabeceras (por ejemplo de las tramas HTTP) para determinar a host (o virtual host) o context se le debe pasar cada peticin. Cuando Tomcat se utiliza como servidor autnomo se usa el motor por defecto. Cuando Tomcat se usa dando soporte a un servidor web se sobrescribe porque el servidor web ya ha determinado el destino correcto para las peticiones. Un motor puede contener Hosts que representan un grupo de aplicaciones web o Context que representa a una nica aplicacin. Tomcat se puede configurar con un nico host o mltiples hosts virtuales como Apache.

Host
Define un host por defecto o mltiples hosts virtuales en Tomcat. En Tomcat los hosts virtuales se diferencian por nombres de dominio distintos, por ejemplo www.aplicacion1.es y www.aplicacion2.es. Cada uno soporta varios Context.

Context
Este elemento es equivalente a una aplicacin web. Hay que informar al motor y al host de la localizacin de la carpeta raz de aplicacin. Tambin se puede habilitar la recarga dinmica (dynamic reload) para que al modificar alguna clase de la aplicacin se modifique en la ejecucin. Esta opcin carga mucho el servidor por lo que se recomienda para pruebas pero no en produccin. En un contexto tambin se pueden establecer pginas de error especficas para armonizarlas con la apariencia de la aplicacin.

Cluster
En caso de que tengamos ms de un servidor Tomcat atendiendo las peticiones, este elemento nos permite configurarlo. Es capaz de replicar las sesiones y los parmetros de cada Context. Queda muy por encima del contenido del curso.

Realm
Se puede aplicar al nivel de Engine, Host o Context. Se utiliza para autenticacin y autorizacin de usuarios o grupos. Pueden usarse con archivos de texto, servidores LDAP o bases de datos por ejemplo. Si lo aplicamos a nivel de motor, los usuario o grupos tendrn idnticos permisos en todas las aplicaciones a la hora de acceder a objetos o recursos. Si lo aplicamos en un Host todas las aplicaciones los permisos sern para todas las aplicaciones de dicho entorno mientras que si lo aplicamos en un Context se establecern por cada aplicacin. Sin embargo, aunque un usuario tenga los mismos permisos para todas las aplicaciones debe seguir autenticndose en cada una de ellas por separado. Los permisos se heredan y por eso se da la situacin descrita en el prrafo anterior, pero si los permisos de un usuario o grupo se sobrescriben en un entorno de rango inferior los ltimos sern los que se apliquen. Es similar a lo que veamos con ciertas directivas (por ejemplo de directorios) en Apache.

Valve
Se usa para interceptar peticiones antes de pasrselas a las aplicaciones. Esto nos permite pre-procesar las peticiones para bloquear algunas, registrar accesos, registrar detalles de la conexin (en archivos log), o establecer un nico punto de acceso para todas las aplicaciones de un host o para todos los hosts de un servidor. Afectan al tiempo de respuesta a la peticin. Puede establecerse para cualquier contenedor Engine, Host, and Context, y/o Cluster. Hay un concepto similar en los servlets que se denomina Filtros (Filters).

Configuracin bsica del servidor de aplicaciones


La configuracin de Tomcat se realiza a travs de uno o ms ficheros XML. Hemos visto por encima los ficheros de configuracin en los apartados anteriores. Para este propsito, los principales son: server.xml, context.xml y web.xml. Tomcat busca estos archivos en el directorio especificado por $CATALINA_BASE, en un subdirectorio /conf. Pero si visitamos este directorio veremos que el subdirectorio /conf es un enlace simblico a /etc/tomcat7/ que es donde realmente se encuentran los archivos de configuracin. En el caso de que no se especifique $CATALINA_BASE se usa $CATALINA_HOME que es obligatoria para el arranque de Tomcat. La configuracin de Tomcat incluye infinidad de parmetros y no es el objetivo de esta asignatura ser un experto administrador de l. Vamos a ver por encima los archivos de configuracin principales. La documentacin de Tomcat incluye muchsima ms informacin de todos estos elementos y sus posibles configuraciones.

server.xml
En el archivo de configuracin por defecto podemos ver que se establece un nico servicio y una nica instancia del servidor. El elemento <Server> puede sorprendernos que el puerto de Tomcat sea 8080 y sin embargo est configurado en el puerto 8005. Este puerto es en el que el que se inicia una instancia del servidor (JVM) y en el que escucha por si llegan seales de apagado (shutdown). Esta seal no se puede mandar desde otra mquina por motivos de seguridad, pero evidentemente se puede ejecutar el comando de apagado desde otra mquina y la seal ya llegar desde la misma en la que est el servidor.

<Server>
El elemento <Server> puede contener otros tres: <Service>: Un grupo de conectores asociados con un motor. Es necesario al menos uno. <Listener>: Clases que tienen que escuchan y manejan eventos que tienen que ver con el ciclo de vida del servidor, por ejemplo despus de arrancar, etc. <GlobalNamingResources>: Recursos globales que pueden ser usados en esta instancia del servidor por los componentes que los necesiten, por ejemplo una base de datos.

<Service>
El propsito de un servicio es agrupar un motor que procese las peticiones con uno o ms conectores que gestionen los protocolos de comunicacin. El servicio por defecto es el motor Catalina. Un <Service> contiene al menos un <Connector> y solo un <Engine> que es obligatorio.

<Connector>
Este elemento tiene mucho que ver con los dos modos de funcionamiento de Tomcat: Como servidor nico: En el que Tomcat realiza las funciones de servidor de aplicaciones y de servidor web. Como servidor de aplicaciones: En el que Tomcat colabora con un servidor web que hace de frontend. El servidor web dirige todas peticiones de JSPs y Servlets a Tomcat.

En un entorno con acceso pblico se suele usar la segunda configuracin ya que el servidor web est mucho ms preparado en trminos de seguridad y privacidad. Los dos conectores ms comunes son HTTP y AJP. El segundo es usado para conectar con los servidores en el modo colaborativo (Apache u otros). Ambos pueden funcionar con SSL para mejorar la seguridad. El puerto por defecto para HTTP es 8080. Se puede cambiar y si por ejemplo Tomcat va a estar en produccin como un servidor en solitario podramos modificarlo al puerto estndar de HTTP, 80. Observa que el conector HTTP est habilitado, mientras que el AJP no, y ninguno de los dos usa SSL por defecto.

<Engine>
El motor es quien procesa las peticiones realmente. El nombre es el que le demos a la instancia y defaultHost indica a qu host virtual se le pasar una peticin en caso de que no se especifique ninguno ya que el mismo motor puede procesar peticiones dirigidas a mltiples hosts virtuales de los especificados en este archivo. Un motor contiene uno o ms <Host>, uno o ningn <Context>, uno o ningn <Realm>, multiples <Valve> y <Listener> aunque puede no tener ninguno.

<Realm>
Es un mecanismo de seguridad que sirve para autenticar usuarios y establecer seguridad a nivel de contenedor (recuerda qu elementos consideraba Tomcat contenedores segn vimos en el apartado arquitectura). La configuracin por defecto hace que Tomcat lea los usuarios del archivo tomcatusers.xml pero obviamente sera mejor configurarlo para que se usara una base de datos o servidor LDAP.

<Host>
Este elemento representa un host virtual en Tomcat. La configuracin por defecto solo define localhost. Si tenemos configurado el servidor DNS con un nombre para nuestro servidor usaremos ste. El atributo appBase establece el directorio raz de las aplicaciones. Se establece a partir de <CATALINA_BASE> si no se indica lo contrario. Por defecto la URL de cada aplicacin es la resultante de aadir su directorio raz a la del servidor. En nuestro ejemplo hemos instalado cuatro aplicaciones docs, examples, host-manager y manager. Tambin se establece ROOT que indica la aplicacin por defecto si no aadimos otras cada una en su directorio. El atributo unpackWARs indica si este tipo de archivos debe ser descomprimido o no. En caso de no descomprimirlos, la ejecucin ser un poco ms lenta. autoDeploy indica si el despliegue de una aplicacin que situemos en el directorio debe ser automtico o no. Adems contiene un <Valve> para registrar los accesos.

context.xml
El contexto en Tomcat se puede establecer a mucho niveles y se aplicar el ms especfico en cada aplicacin. Los descriptores de contexto de administracin de cada aplicacin se encuentran en $CATALINA_BASE/conf/nombre_motor/nombre_host En nuestro caso estn en /etc/tomcat/Catalina/localhost. Por ejemplo, mira el de la aplicacin de host-manager, donde el path indica cmo se acceder a la aplicacin en nuestro servidor. El problema para cambiarlo es que habra que modificar todos los archivos xml relacionados para que Tomcat siga encontrando la aplicacin docBase es el directorio de despliegue de la aplicacin. Los descriptores de contexto especficos de cada aplicacin web estn en el directorio de cada aplicacin en /META_INF. De hecho, la misma aplicacin de hostmanager est en /usr/share/tomcat7-admin/host-manager/META-INF Entonces para qu sirve context.xml? contiene los parmetros que vayan a ser comunes a todas las aplicaciones. Si no se sobrescriben en algn contexto ms concreto se aplicarn stos.

web.xml
Cualquier aplicacin web en Java debe tener un descriptor de despliegue. Como suceda con el contexto, puede establecerse varios y se aplicarn las directivas ms concretas. Cada aplicacin tiene su propio descriptor y va en /WEB-INF Por ejemplo /usr/share/tomcat7-admin/host-manager/WEB-INF Existe uno comn a todas las aplicaciones en /etc/tomcat/web.xml

Como el ao pasado vimos xml es muy fcil entender un descriptor de despliegue. Abre el primero y estudia su contenido.

El segundo archivo es muchsimo ms extenso pero no por eso vamos a dejar de echarle un vistazo. Qu tipo de parmetros se incluyen en este archivo? Crees que es adecuada esta divisin?

En el punto de despliegue de aplicaciones veremos algo ms de este tema.

Administrar aplicaciones web

Vamos a administrar las aplicaciones de Tomcat a travs del Web Manager. En las dos instalaciones que hemos hecho incluimos este paquete. En este caso cuando instalamos los paquetes adicionales. Podemos acceder al administrador a travs del enlace de la pgina de inicio o en la direccin http://localhost:8080/manager/html

Es en si misma una aplicacin (con todas las caractersticas que estamos viendo) y de hecho puede administrarse desde la propia aplicacin.

El acceso por defecto est deshabilitado, pero ya vimos cmo modificar el archivo tomcat-users.xml para poder entrar. Existen varios roles en caso de que queramos distribuir el trabajo, pero nos asignamos todos los permisos.

Nada ms entrar en el manager vemos una lista de las aplicaciones desplegadas en este servidor.

Vemos que aparece un enlace a la aplicacin en s, si se ha especificado una versin, el nombre que se mostrar para la aplicacin, si est en ejecucin, el nmero de sesiones que se han establecido (si la aplicacin usa sesiones) y unos botones para arrancar, parar, recargar (la aplicacin en caso de modificaciones) o replegar que lo que hace es eliminarla del servidor (no estar desplegada).

El apartado de las sesiones se ver ms adelante.

Accede al web manager y prueba a parar los ejemplos y la documentacin. Puedes conectarte a ellos?

La parte de desplegar las aplicaciones la veremos en el apartado correspondiente.

Lo siguiente que nos encontramos es

Los diagnsticos sirven para ver si una aplicacin est fallando, por ahora solo en el temas de uso de memoria. Si pinchamos se recarga la pgina y en la parte superior nos indica el resultado de la prueba.

Tambin podemos ver un cuadro resumen con informacin del servidor. Esta informacin puede ampliarse al pinchar en Estado Completo del Servidor en la parte superior de la pgina.

Por supuesto esta administracin puede ser mucho ms profunda a travs de los archivos de configuracin vistos en este tema.

Existen otros dos mtodos de administracin de Tomcat que dejamos como temas de ampliacin por parte del propio alumno en caso de que lo crea conveniente: Ant y administracin mediante peticiones HTTP.

MODO DE FUNCIONAMIENTO DE SERVIDOR WEB APACHE


Un gran cambio que se produjo en Apache 2 es la introduccin de los mdulos multiproceso (Multiprocessing modules o MPMs). Hasta la versin 1.3 Apache funcionaba con un sistema prefork en el que un proceso creaba procesos hijo para atender las peticiones y l simplemente se encargaba de monitorizarlos para crearlos o destruirlos segn fuera necesario en cada momento. Este sistema no funcionaba bien en determinados sistemas operativos (por ejemplo Windows) as que a partir de la versin 2 se us otra solucin: cada mdulo MPM crea hilos (threads) o procesos hijo (mediante prefork) para atender las peticiones. Realmente hay cuatro mdulos prefork MPM, threaded MPM, perchild MPM y winnt MPM. Dependiendo de cul usemos se usarn unas configuraciones u otras. Una forma de saber qu mdulo est usando Apache es usar la opcin V apache2 -V

nos muestra toda la informacin de versin, mdulos y modo de funcionamiento.

SISTEMA DE CONFIGURACIN DE SERVIDOR WEB APACHE


La instalacin m e d i a n t e a p t - g e t lleva asociada una distribucin de las directivas de configuracin en varios archivos. Es mucho ms racional y simplifica la administracin del servidor Apache.

apache2.conf
El fichero de configuracin global en este tipo de instalacin es apache2.conf y se encuentra en /etc/apache2/apache2.conf e incluye las directivas principales del servidor. Al final del archivo y mediante rdenes include se le indica a Apache que debe cargar otros archivos donde se encuentra la configuracin de otros componentes. Debemos echar un vistazo al archivo de configuracin de Apache mencionado.

ports.conf
En este fichero se establecen las direcciones IP y los puertos que va a usar el servidor. En la instalacin que hemos llevado a cabo se establece que se escuche en el puerto 80 (http por defecto) y en caso de que activemos el protocolo SSL se usara el puerto 443.

envvars
Se utiliza para configurar las variables de entorno del servidor.

httpd.conf
Debemos recordar que este es el fichero de configuracin principal en las instalaciones de apache manuales. Aqu se mantiene por compatibilidad y se recomienda que el administrador del servidor introduzca en l las configuraciones adicionales en lugar de incluirlas en apache2.conf.

/etc/apache2/conf.d/
En este directorio se incluyen configuraciones adicionales y algunas aplicaciones web ubican aqu sus archivos de configuracin. Tambin incluye algunos archivos de configuracin en nuestra instalacin por defecto.

PARMETROS DE CONFIGURACIN GLOBALES DE SERVIDOR WEB APACHE (apache2.conf)


Slo algunas de las directivas aparecen aqu, podis profundizar ms en este enlace http://httpd.apache.org/docs/2.2/mod/quickreference.html y de forma exhaustiva en este otro http://httpd.apache.org/docs/2.2/mod/directives.html ServerRoot
ServerRoot "/www"
Que indica el directorio raz de la instalacin de Apache. No se refiere al directorio donde colocaremos las pginas web. Esta directiva solo se modificara en caso de mover el servidor Apache a otra ubicacin en la estructura de directorios y como iremos viendo habra que cambiar ms. Lo mejor es elegir bien desde el principio dnde instalaremos Apache. En el caso que estamos viendo, no aparece ninguna otra ruta, pero para configurar rutas relativas al directorio de instalacin de Apache, una vez especificado con la directiva anterior, podramos usar %ServerRoot% en lugar de la ruta completa.

PidFile
PidFile establece la ruta al archivo en el que el servidor graba su ID de proceso (pid). Por defecto, el PID se coloca en %ServerRoot%/logs PidFile logs/httpd.pid No se recomienda cambiar la ruta si no se sabe muy bien lo que se est haciendo.

Timeout
Son los segundos que se esperan las respuestas durante la comunicacin. Por defecto es 300 segundos y se recomienda no cambiarlo. Timeout 300

KeepAlive, MaxKeepAliveRequests y KeepAliveTimeout


Determina si el servidor va a permitir que cada conexin haga ms de una peticin. El problema de activarlo es que un nico cliente puede consumir demasiados recursos y saturar el servidor por lo que en caso de establecerlo a on se recomienda configurar cuidadosamente KeepAliveTimeout,

generalmente a un nivel bajo. KeepAlive Off MaxKeepAliveRequests determina el nmero de peticiones que podr realizar cada conexin. Evidentemente solo tiene sentido si KeepAlive est activada. MaxKeepAliveRequests 100

KeepAliveTimeout determina el tiempo que el servidor esperar antes de atender una nueva peticin del mismo cliente en la misma conexin. KeepAliveTimeout 15

Estas directivas son un buen ejemplo de elementos que pueden hacer que nuestro servidor no funcione como esperamos una vez en produccin. Si no probamos con un nmero de peticiones superior al mximo no podremos comprobar si el funcionamiento es el esperado.

IfModule
Es un contenedor que permite establecer determinadas opciones solo si se ha cargado un mdulo determinado. Si se escribe ! (cierre de exclamacin) antes del nombre del mdulo se ejecutan las opciones si no se ha cargado el mdulo. <IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule>

StartServers, MaxClients y MaxRequestsPerChild


Apache crea y destruye servidores automticamente segn el trfico que tenga que atender en cada momento. Apache es muy eficiente en esto por lo que no deberamos preocuparnos demasiado de este y de los siguientes parmetros. Adems deberan ir dentro de un IfModule segn al que queramos aplicarlo.

Esta directriz establece cuantos servidores se crearn al arrancar. StartServers 5 MaxClients establece el nmero mximo de cliente que podr atender Apache a la vez. MaxClients 150 MaxRequestsPerChild indica cuantas peticiones podr atender cada cliente antes de ser matado. MaxRequestsPerChild 30

Dependiendo de si usamos hilos o prefork tendremos que configurar otros elementos: MinSpareThreads, MaxSpareThreads, ThreadsPerChild MinSpareServers, MaxSpareServers

Port
Nos permite cambiar el puerto en el que el servidor espera la perticiones estndar. Port 7000

Listen
Este elemento indica al servidor en qu direccin y puerto debe escuchar las peticiones http que lleguen adems de los de por defecto. El puerto por estndar que un servidor web reciba peticiones http es el 80 por lo que la lnea que nos encontramos es Listen 80

LoadModule
Cuando instalamos Apache, habilitamos la opcin de Dynamic Shared Object (DSO) que permite aadir mdulos dinmicamente sin necesidad de recompilar el servidor. La directiva LoadModule indica qu mdulos dinmicos cargar. No es necesario incluir los mdulos que se compilaron con el servidor.

User y Group
Estas dos directivas indican con qu usuario y grupo se lanzarn los procesos hijos que genere Apache. Estos procesos hijo no deben lanzarse con el usuario root por razones de seguridad ya que crearan una brecha perfecta para los hackers. Si no arrancamos el servidor con el usuario root, los procesos hijo que se lanzarn con ese mismo usuario ya que solo root puede cambiar el usuario y el grupo de un proceso por lo que estas directivas se ignorarn. En Linux por defecto el usuario nobody y el grupo nogroup tienen muy pocos privilegios por lo que son buenos candidatos para lanzar los procesos hijo. Si queremos usar el nmero del grupo o del usuario en lugar del nombre debemos aadir # justo antes del nmero. User nobody Group #-1 En nuestro archivo aparecen estas dos directivas dentro de dos IF anidados que indican que se cargarn los procesos con ese usuario y grupo si se cumplen las condiciones. Si lo ponemos fuera de los IF se usarn para todos los procesos hijo. Las condiciones en este caso son los mdulos que se estn usando.

Files
Es un contenedor que sirve para establecer directivas para tipos de archivo. Por lo menos es necesario aadir un grupo que impida el acceso a los archivos que empiezan por .ht por motivos de seguridad. <FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch>

Otro ejemplo ms sencillo es

<Files .htaccess> Order allow,deny Deny from all </Files> Se puede usar para otros tipos de archivo segn creamos conveniente.

AccessFileName
Indica el nombre del archivo en el que se deben buscar las directivas de acceso determinadas en cada directorio. Por defecto es .htaccess y no se recomienda cambiarlo en absoluto. AccessFileName .htaccess

UseCanonicalName
Indica a Apache que cada vez que tenga que construir direcciones que hagan referencia a si mismo lo haga con el nombre cannico (el indicado en la directriz ServerName) y el puerto en lugar del nombre de la mquina (hostname) y el puerto. UseCanonicalName On

DefaultType
Establece el tipo MIME para todos aquellos archivos a los que no se les pueda asignar uno mediante su extensin, etc. Si tenemos un servidor donde la mayora del contenido son pginas HTML, XML, etc es buena idea usar el valor por defecto, pero si la mayora del contenido son archivos binarios (fotografas, programas, etc) sera conveniente establecer application/octet-stream. DefaultType text/plain Se puede especificar ms: DefaultType text/html

HostnameLookups
Indica al servidor si debe hacer una consulta DNS para cada peticin. Esto consume mucho tiempo por lo que por defecto est deshabilitada.

HostnameLookups off

ErrorLog
Esta directiva es muy importante ya que indica dnde ubicar el archivo de registro de los errores que se produzcan en el servidor. El lugar por defecto es %ServerRoot%/logs/error_log. Muchos administradores crean una particin exclusivamente para situar este tipo de archivos y as tener ms probabilidades de poder consultarlos en caso de un error fatal.

ErrorLog logs/error_log

LogLevel
Establece cunta informacin se guardar en el archivo de registro de errores. El nivel por defecto es suficiente para empezar pero cuanto mayor sea el servidor y ms importante su funcin ms informacin necesitaremos. Los valores posibles incluyen: debug, info, notice, warn, error, crit, alert, emerg. LogLevel warn

LogFormat
Establece qu y en qu formato se registrar. No vamos a entrar en ms detalles en este curso.

CustomLog
Establece la ruta al archivo de que registra las visitas a nuestro sitio web. #CustomLog logs/access_log combined Combined indica el uso de un nico archivo para guardar toda la informacin ya que es posible dividir este registro en varios.

PARMETROS DE CONFIGURACIN SEPARADOS DEL FICHERO DE CONFIGURACIN PRINCIPAL


Hay toda una serie de parmetros derivados al archivo de configuracin de cada sitio web. La mayor parte de ellos, aparecen en el archivo default del directorio /etc/apache2/sites-available. Esto es as porque la instalacin que usamos nosotros viene preparada por defecto para funcionar con sitios virtuales, se considera el sitio web actual como uno ms y se configuran sus parmetros. Algunos de los que vamos a tratar pueden estar en otros ficheros a modo de ejemplo, se indicar en cada caso.

ServerAdmin
Esta opcin permite configurar la direccin del administrador del servidor web que se mostrar si el servidor genera una pgina de error. Evidentemente debe ser una direccin real y generalmente es del mismo domino que el propio servidor web. Nosotros no disponemos de un nombre de dominio, pero podemos configurar una direccin de correo real. ServerAdmin prueba@noexiste.es

ServerName
Indica el nombre del servidor. Debe cumplir con las especificaciones DNS y estar en nuestro poder. ServerName www.ejemplo.es:80

DocumentRoot
Con esta opcin indicamos el directorio raz donde colocaremos las pginas web. Podemos crear subdirectorios dentro de ste y accederemos a los documentos que pongamos en el subdirectorio con una ruta relativa. DocumentRoot "/www/docweb"

El problema es que no basta con cambiar esta ruta, es necesario cambiar tambin otra de la directiva Directory que veremos luego.

<Directory "/www/docweb"> Si queremos comprobar que funciona lo mejor es modificar el archivo index.html del nuevo directorio o aadir un archivo nuevo y cargar ese.

Directory
Esta directiva tambin ha sido derivada al archivo de configuracin del sitio por defecto, para que no se aplique a todos los sitios del servidor ya que no permite sobrescritura de las directivas de seguridad. Si se pusiera en el servidor afectara a todos los sitio que utilizaran el directorio especificado. Esta opcin se usa para configurar cmo se comportar y qu se permitir en cada directorio al que tiene acceso el servidor Apache. Esta configuracin se aplica a un directorio y los subdirectorios que contiene si no se sobreescribe en otra definicin sobre un directorio ms concreto. Nos encontramos dos veces esta etiqueta. La primera hace referencia al directorio raz y se configura siempre con opciones muy restrictivas.

<Directory />
Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory>

El contenido lo vemos a continuacin. Primero vamos a mostrar tambin la otra vez que aparece, haciendo referencia al directorio DocumentRoot

<Directory "/www/docweb"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>

Aunque ambos casos estn configurados igual, esto no es necesario. Pueden aadirse directivas para otros directorios segn lo vayamos necesitando. La primera lnea permite a Apache seguir enlaces simblicos ( y e n e l c a s o d e I n d e x e s , l i s t a e l c o n t e n i d o d e l a c a r p e t a s i l a U R L t e r m i n a e n / ) y la segunda que las opciones de acceso de cada directorio (archivo .htaccess del que hablaremos en la directiva AccessFileName) no priman sobre stas (es decir, si queremos que se pueda usar un archivo .htaccess, la segunda lnea deber ponerse a AllowOverride AuthConfig). La tercera lnea indica si las rdenes para permitir o para denegar irn primero; en este caso se ejecutan primero las permisivas y luego las restrictivas. Allow (y su antnimo Deny) especifican quin puede acceder y quin no a un directorio determinado. El solicitante puede ser all, una direccin IP, un par Red/mscara de red, etc.

UserDir
Esta directiva se puede encontrar separada en el fichero de configuracin mods-available/userdir.conf , pero no est activada por defecto, est en los mdulos disponibles. Indica si se debe permitir que cada usuario de nuestro sistema tenga su propia carpeta personal en el servidor web y establece cul ser la ruta desde el servidor para acceder a dicha carpeta. Esto tiene sentido por ejemplo si se monta un servidor Apache en un instituto y cada profesor tiene su propio usuario. Para que cada uno tenga su propia web personal se puede activar esta opcin. UserDir public_html Es la opcin ms frecuente ya que creara en nuestro servidor rutas para cada usuario. Si por ejemplo hay un usuario Sergio y otro Maria tendramos las

rutas: www.servidordeprueba.es/~Sergio www.servidordeprueba.es/~Maria

Y cada usuario tendra en su carpeta personal un subdirectorio public_html para publicar lo que quisiera. Como se puede ver el argumento detrs de UserDir indica cmo se llamar ese subdirectorio. UserDir disable

Es la opcin por defecto y hace que los usuarios no tengan su propio espacio. En caso de activar los directorios de usuarios se recomienda deshabilitar el de root Userdir disabled root

DirectoryIndex
Especifica la pgina por defecto que se buscar al acceder a un directorio de la jerarqua de nuestro sitio. Acceder a un directorio es usar una direccin web que acaba con una barra /. El directorio raz est incluido en esa jerarqua por lo que cuando accedemos a nuestro sitio web (en nuestros casos http://localhost) carga el archivo index.html que es el valor por defecto de DirectoryIndex.

DirectoryIndex index.html

Puede establecerse una sucesin de archivos y el servidor mostrar la primera que encuentre del orden establecido en la directiva. DirectoryIndex index.html, index.htm, inicio.html, inicio.htm

Si accedemos a un directorio que no contiene ninguno de los archivos especificados, Apache crea dinmicamente un archivo que lista los contenidos.

TypesConfig
Indica dnde estar el archive que describe los tipos MIME (mime.types) o su equivalente si lo hemos cambiado. No hay muchas razones para ello, por lo que deberamos dejar el valor por defecto. Suele estar en el archivo de definicin de tipos MIME mods-enabled/mime.conf

ServerSignature
Indica si al mostrarse una pgina generada automticamente por el servidor (no las generadas mediante lenguajes a partir de algo establecido por el usuario sino las pginas de error, listado de directorios FTP, etc) debe mostrarse el nombre y la versin del servidor. Esto puede ser usado maliciosamente as que si no ests conforme establcelo a off. Suele estar en los archivos de configuracin de seguridad como conf.d/security ServerSignature On

Hay otra opcin (EMail) que aade la direccin del administrador de la web a la informacin mostrada.

Alias
Permite crear alias para archivos o directorios. Se pueden aadir los que queramos pero el ms habitual es el de la carpeta de iconos que usa Apache. Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons"> Options Indexes MultiViews AllowOverride None


Order allow,deny Allow from all </Directory>

La directiva es solo la primera lnea. Lo dems es la directiva de configuracin del directorio, que no siendo obligatoria, es una buena prctica ponerla de forma conjunta al Alias. ScriptAlias
Indica dnde se ubicar la carpeta de scripts CGI. El funcionamiento es similar al anterior pero solo debemos incluirlos si vamos a usar scripts CGI.

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>

Redirect
Finalmente, esta otra directiva de la familia Alias, permite redirecciones al exterior, muy til si determinadas zonas de n uestra pgina web se dividen en host virtuales diferentes, o incluso se migran a servidores diferentes. En este caso no se necesitara la directiva Directory. Por ejemplo: Redirect /videos http://www.paginaexternadevideos.com Redirect /serviciotecnico http://www.paginadeserviciotecnico.com

AddEncoding
Especifica un tipo particular de codificacin para determinadas extensiones de archivos, normalmente incluida en la configuracin MIME. Tambin se puede usar AddEncoding para indicar a los navegadores que descompriman ciertos archivos mientras los descargan:

AddEncoding x-compress Z AddEncoding x-gzip gz

AddLanguage
Sirve para asociar extensiones a idiomas determinados para el contenido. Esta directriz es til para la negociacin de contenidos entre el servidor y el navegador web del cliente ya que Apache puede devolver contenidos en diferentes idiomas dependiendo de la configuracin del idioma del navegador Web. Es til sobre todo en los casos en los que tenemos el sitio escrito en varios idiomas ya que permitir que Apache sirva la adecuada en cada caso en funcin de la configuracin del navegador del cliente. Esto se realiza de forma transparente para el usuario final, normalmente en la configuracin MIME Los cdigos de idiomas se definen en la especificacin ISO 639. Ms concretamente en la ISO 639-1 los cdigos de dos letras y en la ISO 639-2 los de tres letras que incluyen ms idiomas.

# Dans (da) - Holands (nl) - Ingls (en) - Estonio (et) # Francs (fr) - Alemn (de) Griego Moderno (el) # Italiano (it) - Noruego (no) - Koreano (kr) # Portugus (pt) - Luxemburgus(ltz) # Espaol (es) - Sueco (sv) - Checo(cz) # Polaco (pl) - Portugus de Brasil (pt-br) - Japons (ja) # Ruso (ru) - Croata (hr) # AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage AddLanguage es da nl en et fr de el it ja .es .dk .nl .en .et .fr .de .el .it .ja

Ten en cuenta que el indicador del idioma no tiene por qu ser idntico al sufijo como se ve en varios de los ejemplos.

LanguagePriority
Permite establecer una prioridad de los idiomas en caso de que no se especifique uno o haya un empate en la negociacin por diferentes motivos. Por defecto viene en ingls, pero en la mayora de los casos nosotros querremos establecerlo en espaol.

LanguagePriority es en fr de

AddCharset
Es igual que AddLanguage pero para aadir nuevos juegos de caracteres. AddCharset ISO-8859-1 .iso8859-1 .latin1 AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen

AddDefaultCharset
Debera establecerse al juego de caracteres que mejor se ajuste a la zona en la que se sita el servidor y al idioma del contenido. En caso de no estar seguros es mejor dejarlo como est. AddDefaultCharset ISO-8859-1

BrowserMatch
Sirve para modificar la respuesta dependiendo de la configuracin del cliente en cuanto a navegador y plugins. Esto suele usarse para evitar problemas con navegadores que no siguen algn estndar o evitar agujeros de seguridad. Las siguientes lneas son muy comunes porque incluyen configuraciones con problemas de sobra conocidos. Esta es una opcin de entorno definida normalmente en el fichero mods-enabled/setenvif.conf BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0

MDULOS EN SERVIDOR WEB APACHE2


Apache es un servidor multipropsito muy avanzado, por lo que tiene una gran cantidad de mdulos para una eficaz divisin del trabajo, diagnstico en caso de haber problemas y uso de las caractersticas realmente necesarias. El ncleo de Apache incluye la funcionalidad necesaria para establecer un servidor web pero existen muchos mdulos adicionales que permiten aadir funciones extra. El uso de mdulos como objetos compartidos dinmicos -DSO- tiene unas ventajas evidentes y la nica desventaja es una pequea disminucin del rendimiento del servidor por lo que se recomienda su utilizacin excepto en casos en los que el rendimiento sea crtico. Cada mdulo tiene un conjunto de directivas especficas que permiten su gestin. Nosotros ahora nos centraremos en ver qu mdulos hay. Puedes consultar los mdulos que estn instalados en cada servidor mediante el comando apache2 l

Puedes consultar todos los mdulos en http://httpd.apache.org/docs/2.2/mod/. Si pinchas en el nombre de alguno te llevar a una explicacin ms completa y con ejemplos. Vamos a presentar algunos de los diferentes mdulos en grupos con funciones similares.

Mdulos relacionados con el entorno


Estos mdulos nos permiten controlar qu parte del entorno del servidor estar disponible para otros mdulos o programas. Al decir entorno nos referimos al conjunto de variables dinmicas de entorno de Apache que modifican el comportamiento del servidor.

mod_env
Este mdulo se compila por defecto con Apache as que est disponible en nuestras instalaciones. Permite pasar el valor de variables de entorno a programas de script CGI, perl, PHP, etc.

mod_setenvif
Tambin se compila por defecto por lo que est disponible en nuestras instalaciones. Este mdulo nos posibilita la creacin de variables de entorno a partir de datos que nos enva en cliente con el protocolo HTTP. La directiva BrowserMatch vista anteriormente pertenece a este mdulo.

mod_unique_id
Este mdulo sin directivas se encarga de establecer un identificador nico para cada peticin que llega a la mquina con el servidor Apache en caso de que lo necesitemos. Realmente puede crear un identificador nico para cada peticin que llegue a un conjunto de mquinas configuradas correctamente para funcionar como un cluster.

Mdulos de autenticacin y control de acceso


Apache implementa varios mdulos para realizar autenticacin y control de acceso lo que se suele aplicar al filtrado de usuarios que pueden visitar un directorio de nuestro web basndose en la direccin IP o el nombre de usuario. El mayor problema que presentan estos mdulos es que utilizan el protocolo HTTP que transmite texto plano por lo que las contraseas se envan sin cifrar creando un agujero de seguridad muy preocupante.

mod_auth, mod_auth_dbm y mod_auth_db


Es el mdulo bsico de autenticacin de Apache. Usa el protocolo HTTP para ello. mod_auth_dbm y mod_auth_db son similares pero utilizan archivos DBM y Berkley DB en lugar de archivos de texto para mejorar la eficiencia del servidor.

mod_auth_anon
Este mdulo permite a los usuarios conectarse de manera annima. Para ello deben usar anonymous como nombre de usuario y es posible pedirles una direccin de correo como contrasea. Esta direccin puede usarse para controlar qu usuarios se conectan o para crear listas de correo de posibles clientes de nuestro servidor.

mod_auth_digest
Este mdulo gestiona la autenticacin mediante Message Digest 5 (MD5)

mod_access
Permite activar la autenticacin mediante direccin IP o nombre de la mquina cliente.

Mdulos de generacin dinmica de contenidos


Estos mdulos permiten delegar la atencin de determinadas peticiones a diferentes scripts o programas externos.

mod_cgi
Sirve para ejecutar scripts de tipo CGI (Common Gateway Interface)

mod_include
Permite usar filtros SSI (Server-Side Includes)

mod_actions
Dependiendo del tipo MIME o en el mtodo de la peticin HTTP, permite usar diferentes scripts para procesar dichas peticiones.

mod_ext_filter
Permite filtrar una respuesta mediante un programa externo antes de envirsela al cliente.

Mdulos de configuracin del tipo de contenido


Este conjunto de mdulos permiten al servidor detectar o negociar el tipo de contenido ms adecuado para el cliente, entendiendo como cliente la mquina y el navegador que recibirn la respuesta HTTP.

mod_mime
Permite que Apache determine el tipo MIME a partir de la extensin del archivo. Se compila por defecto y nos permite activar un Handler para gestionar tipos de archivo. Varias de las directivas que vimos de tipos de codificacin y de idiomas del contenido estn relacionadas con este mdulo.

mod_mime_magic
Este mdulo permite a Apache determinar el tipo MIME a partir de un patrn de bytes que se almacena en un archivo y se compara con la peticin. Slo se activa si el mdulo anterior no es capaz de determinar el tipo MIME.

mod_negotiation
La negociacin de contenido entre cliente y servidor tpica consiste en que el cliente le enva al servidor qu tipos de contenido (idioma, codificacin, etc) puede manejar y el servidor busca el ms adecuado para responderle. Este mdulo se compila por defecto.

Mdulos para el listado de directorios


Cuando un cliente hace una peticin a nuestro servidor con una direccin web que indica un directorio el servidor intenta servir primero el archivo o archivos establecidos para ello (con la directiva DirectoryIndex). En caso de no encontrar ninguno en ese directorio muestra una lista de los archivos contenidos. Estos mdulos nos permiten configurar cmo sern esos listados.

mod_dir
Mdulo bsico de manejo de directorios que se incluye en la compilacin estndar de Apache. Por defecto realiza dos funciones bsicas: aade una barra / al final de cada direccin que no termina en un nombre de archivo (redirige www.misitio.es/undirectorio a www.misitio.es/undirectorio/ ) y busca un archivo por defecto para cargar en los casos en los que se intenta acceder a un directorio. Si no definimos nada con la directiva DirectoryIndex se busca index.html por defecto.

mod_autoindex
Este mdulo tambin se incluye en la configuracin de Apache por defecto. En caso de que al acceder a un directorio no se encuentre ninguno de los archivos especificados mod_autoindex se encarga de generar el listado. Adems podemos configurar cmo se generar dicho listado. Configurar este mdulo es til en caso de que tengamos un servidor de archivos (por ejemplo en una intranet) al que accedan muchos usuarios. No hay que confundir este tipo de acceso con el que proporciona un servidor FTP como veremos en el tema 4.

Mdulos para la gestin de las cabeceras HTTP de las respuestas


Las cabeceras en el protocolo HTTP incluyen mucha informacin importante para la comunicacin. ste conjunto de mdulos nos permite modificar dichas cabeceras. El uso de estos mdulos requiere conocimientos avanzados del funcionamiento del protocolo HTTP por lo que solo los listaremos: mod_asis, mod_headers, mod_expires y mod_cern_meta son los mdulos que se incluyen en este grupo. Solo el primero se incluye en la compilacin por defecto.

Mdulos de informacin del servidor y de registro de la actividad

Estos mdulos proporcionan informacin sobre el estado del servidor y permiten configurar el registro de la actividad.

mod_log_config
Permite configurar el registro del acceso de usuarios al servidor.

mod_status
Muestra informacin sobre el estado del servidor.

mod_info
Muestra informacin de configuracin del servidor.

mod_usertrack
Permite identificar usuarios y registrarlos de manera individual usando HTTP Cookies. El identificar usuarios de forma individual nos permite tratar a cada usuario de forma nica o servirle informacin personalizada por ejemplo.

Mdulos de mapeo de URLs


Con este conjunto de mdulos podemos manejar y modificar las URLs de nuestro sitio: a partir del nombre de domino hacia adelante. Nos permitir crear alias, nos ayudar a tener varios sitios web en el mismo servidor y podremos rescribir las direcciones para que lleven a diferentes lugares de la estructura de archivos y directorios de nuestro servidor.

mod_userdir
Ya comentamos al revisar el archive de configuracin de Apache cmo podamos crear sitios personales para cada usuario usando la directiva Userdir. ste mdulo es el que nos permite hacerlo.

mod_alias
Si queremos establecer alias o enlaces simblicos entre dos rutas de la estructura de archivos. Incluso permite crear redirecciones de un archivo o directorio a otro. Este mdulo se compila por defecto con Apache.

mod_rewrite
Con este mdulo podemos modificar la URL de la peticin que hace el cliente para que sea una que configuremos nosotros. Para ello, se establece un patrn con el que se compara la URL y si coincide se cambia por otra segn otro patrn que se establece. Esto permite entre otras muchas cosas modificar la estructura de archivos y directorios de nuestro navegador web y que las URLs de la estructura antigua sigan funcionando. Es ms potente que los alias creados en el mdulo anterior porque un patrn puede englobar muchas URLs (todas las que cumplan con el patrn establecido).

mod_speling
Este mdulo corrige posibles pequeos errores en las URLs de peticiones por parte de los clientes. Tiene dos tipos de correccin: en la primera permite un error como la introduccin de un carcter de ms, la omisin de un carcter o el cabio de un carcter por otro (solo uno) mientras que la segunda funcionalidad busca errores provocados por el incorrecto uso de maysculas y minsculas. El mdulo compara la peticin con los directorios y archivos que encuentra en la estructura. Si hay una coincidencia se realiza una peticin de redireccin al cliente y si hay varias se le enva al cliente la lista de coincidencias. El gran problema que tiene la activacin de este mdulo es el tremendo impacto negativo que puede llegar a tener en el rendimiento del servidor por lo que hay que estar muy seguros de la necesidad de activarlo.

mod_vhost_alias
Este mdulo est relacionado con el uso de hosts virtuales que veremos ms adelante. Bsicamente sirven para tener varios sitios web en el mismo servidor Apache. Sin embargo este mdulo no se usa muy habitualmente porque lo que permite es la creacin de hosts virtuales de forma dinmica y slo se recomienda cuando se van a crear muchsimos y la configuracin manual vaya a ser demasiado lenta. Por ejemplo si un proveedor de servicios de Internet (ISP) decide crear sitios web para todos los clientes que lo soliciten.

Otros mdulos
En este grupo vamos a hablar de varios mdulos que no encajan en ninguno de los grupos anteriores pero que merece la pena tener en cuenta.

mod_so

Este es el mdulo que nos permite aadir otros sin la necesidad de recompilarlos. Es el mdulo que nos permite el uso de DSO (Dynamic Shared Object) y todos los dems mdulos de Apache se pueden usar de esta manera menos este. Recuerdo que cuando compilamos Apache aadimos este mdulo para poder usar otros sin necesidad de recompilar el servidor cada vez que quisiramos aadir o eliminar algn mdulo de nuestro servidor web.

mod_imap
Con ste mdulo que se compila por defecto con Apache, se incluye el soporte para mapas de imgenes el archivos HTML.

mod_proxy
Este mdulo nos permite convertir Apache en un servidor proxy. Un servidor proxy se sita entre el cliente y el servidor y bsicamente acta como el servidor para el cliente y como un cliente para el servidor. Los motivos para usar un servidor proxy pueden ser muy variados, pero incluyen dar acceso a determinados recursos de Internet a ordenadores sin direcciones viables, hacer la funcin de cach para los usuarios de una red o control, registrar y/o restringir el uso de determinados recursos de Internet.

mod_file_cache
Si usamos este mdulo permitimos que Apache ponga en cach determinados archivos estticos y no cambien frecuentemente. El problema con el uso de esta tcnica es que si el archivo cambia puede tardar bastante en enviarse el archivo modificado a los clientes debido a la copia que tenemos en cach.

mod_dav
Si queremos usar WebDAV tendremos que activar este mdulo.

mod_example
Es un mdulo de vital importancia para todo aquel que quiera o necesita aprender a programar un mdulo de Apache, pero para nadie ms. Hay que tener conocimientos del lenguaje de programacin C para poder comprenderlo.

HABILITACION / DESHABILITACIN DE MODULOS EN APACHE2


En Linux Ubuntu se utiliza una forma no estndar de activar los mdulos, distinta al uso de LoadModule si bien puede seguir usndose esta ltima-. Ntese que tenemos dos directorios /etc/apache2/mods-available y /etc/apache2/mods-enabled. En el primero estn todos los mdulos que vienen incluidos en esta versin de Apache mientras que en el segundo estn los que tenemos activos en nuestro servidor mediante enlaces simblicos a los mdulos en el directorio anterior. Para activar un mdulo usamos el comando a2enmod con el nombre del mdulo. sudo a2enmod speling

que nos informa de lo que est sucediendo y de que es necesario reiniciar el servidor Enabling module speling. To activate the new configuration, you need to run: service apache2 restart y para desactivarlo se hace igual pero con el comando a2dismod. sudo a2dismod speling

despus de cada activacin o desactivacin es necesario reiniciar el servidor. Cada mdulo en Apache 2 tiene un uso y configuracin diferentes. Para saber cmo usar cada mdulo lo mejor es consultar la documentacin de la pgina oficial. Desde la lista de mse puede hacer click en cada uno para ver sus directivas y uso. Un ejemplo p u e d e s e r el mdulo mod_speling. Podemos ver que solo tiene dos directivas que podemos usar: CheckSpelling y CheckCaseOnly.

La primera activa o desactiva el mdulo y la segunda hace que solo se corrijan los errores de maysculas/minsculas. Para activarlo la correccin completa debemos aadir al archivo de configuracin la siguiente lnea: CheckSpelling on

Despus de cada cambio en la configuracin es necesario reiniciar la mquina para que la modificacin surta efecto. apachectl restart

Para probar si todo funciona correctamente podemos intentar cargar la pgina web http://localhost/insdex.html antes de los cambios en el servidor. Nos devuelve una pgina de error generada automticamente con Apache con el siguiente texto: Not Found

The requested URL /insdex.html was not found on this server. Apache/2.2.22 (Ubuntu) Server at localhost Port 80

Si despus de los cambios intentamos acceder a la misma pgina web veremos que corrige la direccin a http://localhost/index.html y carga la pgina de inicio de Apache.

Archivos de configuracin asociados a cada mdulo


En el directorio /etc/apache2/mods-enabled podemos ver que hay dos archivos asociados a cada mdulo activo. Los archivos .load incluyen la directiva para que se cargue el mdulo en cuestin mientras que los archivos .conf incluyen directivas de configuracin que nicamente se aplicarn si se carga un mdulo determinado. Esto se consigue con la directiva IfModule que funciona como un if de programacin. Realmente lo que encontramos en el directorio son enlaces simblicos a los archivos en /etc/apache2/mods-available

mod_status y mod_info
Estos dos mdulos nos permiten obtener informacin muy til sobre nuestro servidor. mod_status est activado por defecto en nuestra distribucin de Apache, pero se activa y desactiva como cualquier otro mdulo. Podemos ver y modificar su configuracin en /etc/apache2/mods-available/ nano status.conf

Directorios personales de usuarios


En determinadas circunstancias (por ejemplo una institucin educativa como un instituto o una universidad) es til que cada usuario tenga un directorio en el que pueda crear su propio conjunto de pginas web. Si el nmero de usuarios es grande, esto puede cargar innecesariamente de trabajo al administrador del servidor. Apache ofrece una alternativa automatizada para esta situacin mediante el mdulo mod_userdir. Si activamos el mdulo (por defecto no viene activo) cada usuario tendr un espacio al que se acceder mediante la URL http://sitioejemplo.com/~nombreusuario donde nombreusuario ser el nombre que tiene en el servidor Linux. Cada usuario puede crear ahora en su carpeta personal un directorio public_html donde ubicar sus pginas. Aqu se explica http://httpd.apache.org/docs/2.2/howto/public_html.html con ms detalle cmo se utiliza la carpeta personal, teniendo en cuenta que no se activa esta opcin para el usuario root. En la documentacin del mdulo puedes observar que el directorio en el que cada usuario podr crear sus pginas es altamente configurable.

HOSTS VIRTUALES EN SERVIDOR WEB APACHE2


Apache puede servir varios sitios web desde un nico servidor web. El cliente nunca diferenciar si son sitios en servidores diferentes o en la misma mquina. Apache es un servidor muy potente para la utilizacin de esta opcin. Si por ejemplo somos los gestores de dos dominios DNS (www.laempresa.es y www.mipagina.es) podemos alojar ambos sitios en el mismo servidor Apache. Uno de estos dominios se considerar el sitio principal y todos los dems sern los hosts virtuales. Ventajas: 1. Aprovechar el hardware existente. 2. Aprovechar las direcciones IP pblicas disponibles. Una gran ventaja en el uso de hosts virtuales en Apache es que permite heredar la configuracin del sitio principal por lo que no habr que reconfigurar todas las directivas, solo las que cambien. Al igual que pasaba con los mdulos, existen dos directorios para contener los sitios virtuales, uno para los disponibles y otro para los activos: /etc/apache2/sites-available y /etc/apache2/sites-enabled respectivamente. El segundo contiene enlaces simblicos a los sitios del primero que estn activos.

Sitio por defecto


La configuracin del servidor virtual por defecto se puede consultar nano /etc/apache2/sites-available/default

lo que nos mostrar algo como esto:

<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> 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 ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined 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>

Podemos comprobar que en el directorio de sitios activos se encuentra un archivo 000-default que es el enlace simblico al sitio por defecto. En el archivo podemos observar que el directorio raz es /var/www/ y la configuracin que tiene el directorio. Ten en cuenta que es necesario reiniciar Apache para que los cambios en la configuracin surtan efecto. Un directorio hereda las directivas del superior si no se sobrescriben. Por ello, todos los directorios que creemos dentro de /var/www/ tendrn la misma configuracin que el raz excepto en aquellas directivas que especifiquemos en la configuracin propia del directorio. Por ejemplo, para deshabilitar el listado de los contenidos de una carpeta del servidor, si no se especifica pgina web, host virtual o directorio se usa Options Indexes

Si quieres activarlo para un servidor, directorio o host virtual se utiliza Options Indexes FollowSymLinks

La opcin de seguir los enlaces no es obligatoria pero se suele aadir. Ten en cuenta que hay que mirar que la configuracin no est sobrescrita en la configuracin del host virtual por defecto o de algn directorio en particular. Lo que debe hacerse en estos casos es una comprobacin de la directiva de lo particular a lo general: directorios, host virtual y servidor.

Modificando los mensajes de error


La directiva ErrorDocument sirve para establecer mensajes de error personalizados para diferentes situaciones. Los cdigos de error que pueden utilizarse son los definidos por la organizacin w3 para el protocolo http en este caso la versin 1.1 y se pueden consultar de forma comprensible en

http://www.askapache.com/htaccess/apache-status-code-headers-errordocument.html Ten en cuenta que el cdigo es solo el ltimo nmero de cada apartado y tiene tres cifras. Esta directiva se usar tantas veces como se crea necesario. Se establece de manera independiente para cada sitio virtual y se suele escribir debajo de CustomLog. En el apartado anterior hemos visto que se usa una variable de entorno llamada APACHE_LOG_DIR para determinar el directorio donde se ubicarn los archivos de log. En esta instalacin es /var/log/apache2/ pero si no podemos buscar los archivos en la estructura de directorios o consultar el valor de la variable de entorno.

Alias a otros directorios


Por defecto la estructura de un sitio web ser la que demos a los directorios desde el punto de montaje del directorio raz del sitio, sin embargo es posible incluir otros directorios del rbol de nuestro servidor y hacer que parezcan parte del sitio como cualquier otra carpeta que est contenida fsicamente dentro. Es algo similar a tener un enlace simblico a archivos o carpetas en otro directorio. En el archivo de configuracin del sitio principal visto antes ya existe un alias a un directorio que se encuentra fuera de la carpeta definida para el sitio. Para realizar esta operacin se utiliza la directiva Alias y justo debajo (no es obligatorio pero s una buena prctica) se configura con la directiva Directory como cualquier otro directorio. En la gua rpida de directivas, se pueden aplicar a directorios todas las que llevan d en la tercera columna.

Redirecciones
Algunas veces es til poder redirigir las llamadas a una direccin web para que se procesen en otro punto. Por ejemplo si hemos cambiado la estructura de nuestro sitio y hemos reubicado la pgina de contacto podemos querer que los usuarios que accedan mediante la antigua direccin sean redirigidos automticamente a la nueva. Tambin puede ser til si hemos dividido nuestro sitio para facilitar la gestin o el mantenimiento. Para ello se usa la directiva Redirect que nos permite asociar una direccin absoluta o relativa a otra.

Creacin de hosts virtuales


Existen tres formas diferentes de crear hosts virtuales en Apache:

1.

Basados en nombres: Este tipo es la opcin ms comn. Se configura todo para que mltiples dominios DNS apunten a una nica mquina con Apache. Requiere configuracin del servidor DNS para que funcione. Este mtodo hace muy fcil migrar nuestro servidor a otra direccin IP. Es el nico mtodo que vamos a estudiar.

2. Basados en IP: En este mtodo se necesita configurar las direcciones IP de cada sitio en Apache. El servidor fsico tendr varias direcciones IP, una para cada sitio. 3. Basados en puertos. Cada sitio se atender en la misma IP o nombre pero en distintos puertos. Es una extensin de cualquiera de las alternativas anteriores.

El uso de estas alternativas no es excluyente. Pueden combinarse varias o todas en el mismo servidor Apache. Para aprender cmo configurar hosts virtuales, es mejor ir a los ejemplos de la documentacin oficial, que van totalmente al grano: http://httpd.apache.org/docs/2.2/es/vhosts/examples.html Con cualquiera de las tres alternativas es necesario activar primero el mdulo de hosts virtuales. sudo a2enmod vhost_alias

lo que activa el mdulo Enabling module vhost_alias. To activate the new configuration, you need to run: service apache2 restart

Para usar estos mtodos es necesario poder hacer que todos los nombres de dominio asociados a los hosts virtuales que vamos a crear apunten a la

direccin IP o las direcciones IP de nuestro servidor web. Si hemos contratado un nombre de dominio con un proveedor ste nos proporcionar la manera de hacerlo. En caso de que tengamos o queramos publicar nuestros propios sitios debemos configurar un servidor DNS, como se ha hecho en prcticas anteriores. De manera sencilla podemos ir al fichero de hosts nano /etc/hosts

y en l aadir los alias necesarios. Los sitios virtuales utilizan una estructura de directorios similar a la que hemos visto para los mdulos. En /etc/apache2/sites-available/ encontramos los sitios disponibles, que al ser activados crean un alias en

/etc/apache2/sites-enabled/

Hosts virtuales basados en nombres


Este mtodo es el ms recomendado ya que requiere una nica direccin IP para poder alojar mltiples sitios. Podemos comprobar que en el archivo /etc/apache2/ports.conf se encuentra la directiva NameVirtualHost *:80

Esta directiva es la necesaria para poder usar los hosts virtuales vasados en nombres. Al activarse deshabilita el servidor principal (el que habamos usado en la instalacin manual) y por ello en este tipo de instalacin el servidor virtual es realmente un sitio virtual por defecto.

El primer paso es crear los registros DNS para que el nombre de dominio apunte a nuestra mquina o aadirlos en el fichero hosts. Debemos crear un directorio para cada sitio y as tener los documentos separados. Adems habra que crear un archivo index.html en el directorio para que lo cargue al consultar el sitio. mkdir /var/www/ejemplo2.es

En este punto podemos acceder a los datos de ejemplo2 mediante la direccin http://localhost/ejemplo2.es/ pero nuestro objetivo es poder hacerlo escribiendo http://ejemplo2.es/ Lo tercero que deberamos hacer es escribir los datos del nuevo host virtual en la configuracin de Apache. Recuerdo que hemos visto dos casos diferentes de dnde se encontraba la configuracin de Apache, pero con la opcin que estamos usando actualmente la configuracin principal estaba en el archivo /etc/apache2/apache2.conf y desde l se importaban otros muchos. Podemos ver que se importa una carpeta completa de la que coge la configuracin de los hosts virtuales. # Include the virtual host configurations: Include sites-enabled/

Sin embargo, antes de hacer esto debemos crear el host virtual en la carpeta de hosts disponibles y lo activaremos cuando est terminado. La carpeta en la que podemos aadir los datos de nuestros hosts virtuales es /etc/apache2/sites-available Si vamos a la carpeta que nos indican podemos consultar el archivo de la configuracin de un host virtual, el sitio por defecto. Esto puede servirnos ejemplo y gua para crear otros.

Creamos el archivo de configuracin sudo nano /etc/apache2/sites-available/ejemplo2.es

y escribimos lo siguiente

NameVirtualHost ipelastica:80
<VirtualHost ipelastica:80> ServerName ejemplo2.es ServerAlias www.ejemplo2.es ServerAdmin alguien@ejemplo2.es DocumentRoot /var/www/ejemplo2.es # Aqui pueden ir otras directivas. # Por defecto hereda las del archivo principal. </VirtualHost>

Entre todas las directivas que se pueden incluir son especialmente tiles las referentes a directorios ya que si el sitio consta de varios (lo ms habitual) puede interesarnos tener configuraciones diferentes para cada uno. Tambin es habitual configurar registros de error independientes para cada sitio mediante la directiva adecuada. Esto se hace dentro de la configuracin de cada sitio virtual dejando el principal para el servidor en si. Ya vimos que en el sitio por defecto se incluan.

ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Pero por supuesto debemos dar otros nombres a nuestros registros para que no se usen los mismos. Es buena idea revisar la configuracin del sitio principal para hacernos una idea de qu configurar ya que en el ejemplo anterior he reducido las directivas al mnimo. Si en lugar de la direccin ipelastica escribimos * se realizar para todas las IP que tenga la mquina. En los dos casos en los que hemos escrito la direccin IP y el puerto podramos haber puesto un asterisco (*) en lugar de la direccin pero se estaramos indicando a Apache que escuche todas las peticiones lo que podra generar conflictos. Siempre es preferible concretar los datos. Ahora ya hemos configurado el nuevo host as que podemos activarlo. sudo a2ensite ejemplo2.es y recargar los sitios de Apache service apache2 reload si al hacerlo nos da el error * Reloading web server config apache2

apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

Debemos abrir el archivo httpd.conf y aadir

ServerName LocalHost

O el nombre completo de nuestro servidor. Ya podemos acceder a nuestro documento mediante www.ejemplo2.es Para desactivar un sitio virtual se hace con (por ejemplo para desactivar el sitio por defecto). sudo a2dissite default

CONTROL DE ACCESO, AUTENTICACIN Y AUTORIZACIN EN SERVIDOR WEB APACHE2


En este punto comenzamos con varios aspectos relacionados con la seguridad de nuestro servidor web. Con este primer apartado vamos a considerar los aspectos que nos van a permitir filtrar el acceso a determinados recursos. El control de acceso se refiere a cualquier mtodo que nos permita filtrar el acceso a algn recurso determinado. Hay tres mdulos implicados en el control de acceso en Apache: mod_authz_host, mod_setenvif y mod_rewrite. Tambin existen tres mtodos para gestionar el control de acceso relacionados con estos mdulos.

Control de acceso basado en la direccin


Este tipo de control se basa en el uso del mdulo mod_authz_host y en las direcciones IP de las mquinas que quieran acceder a nuestro servidor. Podemos comprobar que est mdulo ya est activo en nuestra instalacin y de hecho ya hemos usado anteriormente este tipo de control de acceso para permitir acceder a partes de nuestro servidor desde la mquina anfitrin en las prcticas. Las directivas que se utilizan para este caso son Allow y Deny. Generalmente van asociadas con otra, Order. El uso de estas directivas es Allow from direccin

En lugar de una direccin IP se puede utilizar el nombre de la mquina a la que queremos permitir o denegar el acceso. Si queremos evitar que desde una direccin IP determinada se acceda a nuestra mquina (o a un recurso determinado, recuerda que nosotros ya lo hemos usado dentro de configuracin de directorios especficos) escribiramos Deny from 23.43.234.22

Tambin podemos filtrar por un nombre de dominio (DNS) Allow from ejemplo.instituto.es

La directiva Order es casi ms importante que stas que hemos visto. Indica si se aplicarn primero las clausulas Deny o las Allow, pero adems indica que se har para lo que no est especificado. Si usamos Order Allow, Deny

Primero se procesan todas las directivas Allow y si no ninguna encaja, la peticin se rechaza. Luego se procesan todas las directivas Deny, si encaja con alguna se rechaza la peticin. Si encaja con una directiva Allow y una Deny se aplica la ltima por lo tanto se rechaza. Todas las peticiones que no coincidan con ninguna directiva se rechazan. Si usamos

Order Deny, Allow

Primero se intenta que encajar la peticin con todas las directivas Deny y si coincide se rechaza la peticin. Luego se procesan las directivas Allow y si encaja con alguna se permite el acceso. Si alguna peticin encaja con una directiva Deny pero tambin con una Allow, se permite. Todas las peticiones que no coincidan con ninguna directiva se permiten.

Control de acceso por variable de entorno


Este tipo de control de acceso se realiza mediante el uso de los mdulos mod_authz_host y mod_setenvif. Se basa en permitir el acceso segn la configuracin de alguna variable de entorno de la mquina del usuario y por ello no es muy recomendable.

Control de acceso con el mdulo rewrite


Mediante el uso del mdulo mod_rewrite podemos controlar el acceso segn criterios arbitrarios. Por ejemplo si queremos denegar el acceso durante el periodo de las ocho de la tarde a las 6 de la maana, escribiremos RewriteEngine On RewriteCond %{TIME_HOUR} >20 [OR] RewriteCond %{TIME_HOUR} <07 RewriteRule ^/fridge - [F]

El uso de este mtodo se basa en las directivas RewriteCond y RewriteRule pero queda fuera del alcance de este curso y se indica solo como introduccin a las posibilidades que permite. Por ejemplo, se utiliza ampliamente para temas de SEO posicionamiento en buscadores- como indica este enlace: http://moz.com/ugc/using-mod-rewrite-to-convert-dynamic-urls-to-seo-friendly-urls

En concreto, el portal de gestin de contenidos tipo blog "wordpress lo usa de forma sistemtica en sus enlaces permanentes optimizados para SEO: http://codex.wordpress.org/Using_Permalinks

Autenticacin y autorizacin
Estos dos trminos van ligados pero no son lo mismo a pesar de que mucha gente los confunde. La autenticacin consiste en comprobar que alguien es quien dice ser mientras que la autorizacin es comprobar que alguien tiene permiso para acceder a un lugar o recurso determinado. En informtica, la autenticacin puede darnos acceso a diferentes recursos para los que estemos autorizados, e incluso estas autorizaciones pueden variar dependiendo de diferentes circunstancias. Por ejemplo, podemos tener permiso para acceder a determinado recurso en una franja horaria determinada o desde la oficina de trabajo pero no desde casa. El proceso de autorizacin suele implicar la autenticacin. Por ejemplo si un cliente quiere acceder a determinado recurso el servidor le pide que se autentique (mediante un mensaje de estado 401: Authoritation Required) por ejemplo con una solicitud de usuario y contrasea. Si esta autenticacin es positiva se permitir el acceso y si no se responder con otro mensaje 401. Un problema de esta forma de autenticacin es que la contrasea ni se encripta ni se oculta, por lo que ms adelante hablaremos del protocolo https. Cualquiera con un sniffer podra interceptar los nombres de usuario y contraseas.

El mdulo mod_auth
Este mdulo nos permite realizar autorizacin de una manera bastante bsica. Nos va a permitir establecer acceso mediante usuario y contrasea a secciones de nuestro sitio. Por ejemplo podemos establecer un directorio al que haya que acceder con contrasea. Podemos elegir cualquier directorio siempre que el usuario que lanza apache (directiva User) tenga acceso a l. No es necesario que el directorio est en la estructura bsica de nuestro sitio, pero si no est tendremos que establecer un Alias.

mkdir /var/www/privado

mkdir /var/secreto

Obsrvese que la carpeta secreto se crea fuera de la carpeta de servidor web. Ahora aadimos al sitio en el que queramos gestionar la autenticacin nano /etc/apache2/sites-available/default

la configuracin para el directorio <Directory "/var/www/privado"> AuthName Acceso privado: Introduzca su usuario y contrasea AuthType Basic AuthUserFile /var/secreto/.miembros Require valid-user </Directory>

AuthName le indica al usuario qu hacer. Es un mensaje para el usuario. AuthType es el tipo de autenticacin que usaremos; http solo admite Basic. La otra opcin que existe es Digest que a diferencia de la opcin Basic no transmite los nombres de usuario y contrasea como texto plano (y por lo tanto es una opcin de seguridad mejor) pero que no est disponible para todos los navegadores Web como opcin out-of-the-box. El cifrado que usa la opcin Digest es bastante dbil por y aunque su uso no es idntico al de la opcin Basic es bastante similar, por lo que no lo veremos.

AuthUserFile es el archivo que se utilizar para guardar las contraseas. Indica la ruta y se llamar .miembros. require especifica que ser necesario acceder con un usuario vlido.

Ahora necesitamos crear el archivo de contraseas. /usr/bin/htpasswd -c /var/secreto/.miembros srsergio Donde debers especificar la ruta a los ejecutables de apache si no es la misma, -c es la opcin para crear el archivo as que si vas a aadir otro miembro debes quitarla. La ruta al archivo de contraseas debe ser la misma especificada para la configuracin del sitio y srsergio ser el nombre de usuario que queremos crear. Nos pedir que creemos una contrasea. Podemos asegurarnos de que se ha creado el usuario abriendo el archivo. Date cuenta de que la contrasea est codificada. cat /var/secreto/.miembros

Reinicia apache como se hace habitualmente Ahora ya tienes una seccin para acceso solo con usuario y contrasea. Ten en cuenta que la debilidad de http en la transmisin de la informacin hace que este mtodo no sea seguro pero se puede solucionar usando https como veremos ms adelante.

Los ficheros .htaccess


Las soluciones vista hasta ahora no son muy adecuadas si queremos poder delegar la creacin y control de zonas privadas para miembros determinados. Esto puede ser muy til si por ejemplo hemos montado una web para una empresa que tiene su propio administrador de sistemas ya que evitar que tengamos que gestionar todo nosotros. Tambin nos facilitar el trabajo si hay muchos cambios en las zonas privadas o miembros que se conecten a ellas. Para permitir el uso de ficheros .htaccess en nuestro servidor o sitio virtual (la directiva se puede usar en ambos entornos) lo primero que debemos

hacer es modificar el archivo de configuracin. En mi caso voy a hacerlo en el sitio virtual por defecto. Debemos modificar la directiva AllowOverride None Y cambiarla a AllowOverride AuthConfig El lugar en el que modificar la directiva depende de lo que necesitemos. Ten en cuenta que las directivas se heredan si no se encuentra otra ms especfica, por ello, en nuestro archivo de configuracin del sitio virtual por defecto debera ir en el directorio /var/www por lo menos ya que si lo ponemos en el raz pero no en el primero, se mantendra la configuracin anterior. <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride AuthConfig Order allow,deny allow from all </Directory>

Lo que permite que modifiquemos las directivas de autorizacin mediante un fichero .htaccess. En muchos sitios indican que hay que permitir la sobre escritura de todas las directivas mediante AllowOverride All pero es evidente que es peor opcin. Luego reiniciamos el servidor Apache. Ahora podramos crear ficheros directorios y configurar su control de acceso en cada uno de ellos.

mkdir /var/www/ficheros/ cd /var/www/ficheros/

En cada directorio que queremos gestionar as debemos crear un fichero .htaccess y darle un contenido similar al siguiente. AuthName Seccin Privada: Prueba de .htaccess AuthType Basic AuthUserFile /var/secreto/.miembros Require valid-user

Ten en cuenta que: Lo que hemos hecho ha sido sacar la configuracin del control de acceso del archivo de configuracin del servidor/sitio virtual a un archivo independiente. He usado el mismo archivo de usuarios y contraseas que en el punto anterior para darle coherencia a los ejemplos, pero esto no es necesario. Los usuarios y sus contraseas se crearan igual que en el apartado anterior. La creacin o modificacin de un fichero de este tipo no implica reiniciar el servidor. Se debe mejorar la seguridad cambiando los permisos de acceso al fichero .htaccess. Por lo menos el usuario de Apache debe tener acceso.

Agrupando usuarios para el control de acceso


Si queremos refinar ms el control de acceso tenemos varias alternativas. Por ejemplo podemos permitir el acceso a solo algunos usuarios especificando sus nombres en la clusula Require en cualquier sitio que la usemos. require user sergio maria Otra alternativa es crear archivos de usuarios diferentes para distintos directorios de nuestro sitio.

<Directory "/var/www/ventas"> AuthName Acceso privado: Introduzca su usuario y contrasea AuthType Basic AuthUserFile /var/secreto/.miembros-ventas Require valid-user </Directory>

<Directory "/var/www/finanzas"> AuthName Acceso privado: Introduzca su usuario y contrasea AuthType Basic AuthUserFile /var/secreto/.miembros-finanzas Require valid-user </Directory>

La ltima opcin pasar por usar la directiva AuthGroupFile. As podremos tener todos los usuarios en el mismo fichero y luego asignarles grupos en otro archivo.

<Directory "/var/www/ventas"> AuthName Acceso privado: Introduzca su usuario y contrasea AuthType Basic AuthUserFile /var/secreto/.miembros AuthGroupFile /var/secreto/.grupos Require group ventas

</Directory>

Ten en cuenta que: Se usa el mismo archivo de miembros para todos los directorios. Hay que aadir la directiva y el fichero de grupos. En la clusula Requiere se indica el grupo que puede acceder.

El archivo .grupos ser un fichero de texto con algo como ventas: sergio maria finanzas: carlos roberto

Utilizando usuarios autenticados del sistema de forma integrada para autenticacin


Finalmente, una buena opcin podra ser requerir usuarios propios del sistema para acceder, de manera que se establezcan los permisos y ACLs sobre archivos y carpetas de forma separada, reutilizando los usuarios del sistema. El problema es que Apache suele poner muchas pegas para este tipo de autenticacin, por temas de seguridad. El primer paso sera instalar y habilitar dos mdulos que no vienen por defecto, junto con un software aadido a Apache pwauth:

sudo apt-get install libapache2-mod-authnz-external pwauth sudo apt-get install libapache2-mod-authz-unixgroup sudo a2enmod authnz_external authz_unixgroup Luego, en nuestra configuracin de apache general en httpd.conf, o bien slo en los hosts virtuales que queramos, deberemos incluir esto: <IfModule mod_authnz_external.c> AddExternalAuth pwauth /usr/sbin/pwauth SetExternalAuthMethod pwauth pipe </IfModule> Y reiniciamos el apache. De esta manera, ya podemos colocar un contenido sencillo parecido a este en .htaccess de la carpeta que se quiera restringir o en nuestra configuracin de virtualhost en la directiva Directory. Por ejemplo, para un usuario pepe: AuthType Basic AuthName "Area privada de pepe" AuthBasicProvider external AuthExternal pwauth Require user pepe Si se quiere hacer lo mismo con grupos, simplemente se especifica (por ejemplo para el grupo ventas): AuthType Basic AuthName "Area privada de pepe" AuthBasicProvider external AuthExternal pwauth GroupExternal unixgroup Require group ventas

Anda mungkin juga menyukai