31
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Instalación y configuración de Apache Autores del manual Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com: Carlos Luis Cuenca http://www.helloworldsolutions.com/ (11 capítulos) Miguel Angel Alvarez Director de DesarrolloWeb.com http://www.desarrolloweb.com (2 capítulos) Carlos García Pérez http://www.autentia.es (1 capítulo) Manu Gutierrez http://www.tufuncion.com (1 capítulo) Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 1

Instalar y Configurar Apache

Embed Size (px)

Citation preview

Page 1: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Instalación y configuración de Apache

Autores del manual

Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com: Carlos Luis Cuencahttp://www.helloworldsolutions.com/ (11 capítulos)

Miguel Angel AlvarezDirector de DesarrolloWeb.comhttp://www.desarrolloweb.com (2 capítulos)

Carlos García Pérezhttp://www.autentia.es (1 capítulo)

Manu Gutierrezhttp://www.tufuncion.com (1 capítulo)

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

1

Page 2: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Arquitectura del servidor Apache

El servidor Apache es un software que esta estructurado en módulos. La configuración de cada módulo se hace mediante la configuración de las directivas que están contenidas dentro del módulo. Los módulos del Apache se pueden clasificar en tres categorías:

• Módulos Base: Módulo con las funciones básicas del Apache

• Módulos Multiproceso: son los responsables de la unión con los puertos de la máquina, acepando las peticiones y enviando a los hijos a atender a las peticiones

• Módulos Adicionales: Cualquier otro módulo que le añada una funcionalidad al servidor.

Las funcionalidades más elementales se encuentran en el módulo base, siendo necesario un módulo multiproceso para manejar las peticiones. Se han diseñado varios módulos multiproceso para cada uno de los sistemas operativos sobre los que se ejecuta el Apache, optimizando el rendimiento y rapidez del código. El resto de funcionalidades del servidor se consiguen por medio de módulos adicionales que se pueden cargar. Para añadir un conjunto de utilidades al servidor, simplemente hay que añadirle un módulo, de forma que no es necesario volver a instalar el software.

Módulos Base y Módulos Multiproceso:

core: Funciones básicas del Apache que están siempre disponibles.

mpm_common: Colección de directivas que se implementan en más de un módulo multiproceso.

beos: Módulo de multiproceso optimizado para BeOS.

leader: Variable experimental de MPM.

mpm_netware: Módulo de multiproceso que implementa un servidor web optimizado para Novell NetWare.

mpmt_os2: MPM híbrido, multiproceso y multihilo para OS/2 .

perchild: Módulo multiproceso que permite a los procesos demonio servir las peticiones que se asignan a distintos id de usuario.

prefork: Implementa un servidor sin hilos.

threadpool: Variante experimental del módulo estándar de MPM .

mpm_winnt: Módulo multiproceso optimizado para Windows NT.

worker: Módulo multiproceso que implementa un híbrido multihilos y multiprocesos de servidor Web.

Módulos adicionales:

mod_access: proporciona control de acceso basándose en el nombre del host del cliente, su dirección IP u otras características de la petición del cliente.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

2

Page 3: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

mod_actions: este módulo se utiliza para ejecutar Scripts CGI, basándose en el tipo de medio o el método de petición.

mod_alias: proporcionado para mapear diferentes partes del sistema de ficheros del servidor en el árbol de documentos del servidor, y para redirección de URL's.

mod_asis: envío de ficheros que tienen sus propias cabeceras http.

mod_auth: autentificación de usuario utilizando ficheros de texto.

mod_auth_anon: permite a usuarios anónimos acceder a áreas autentificadas.

mod_auth_dbm: proporciona autentificación utilizando ficheros DBM.

mod_auth_digest: autentificación de usuario utilizando MD5.

mod_auth_ldap: permite la utilización un directorio LDAP para almacenar la base de datos de autentificación.

mod_autoindex: muestra los contenidos de un directorio automáticamente, parecido al comando ls de Unix.

mod_cache: Cache de contenidos indexados por URI's.

mod_cern_meta: Semántica de etiquetas meta del CERN.

mod_cgi: Ejecución de Scritps CGI.

mod_cgid: ejecución de Scripts CGI utilizando un demonio CGI externo.

mod_charset_lite: para la especificación del juego de caracteres de las traducciones.

mod_deflate: comprime el contenido antes de ser enviado al cliente.

mod_dir: Proporcionado para redirecciones y para servir los ficheros de listado de directorios.

mod_disk_cache: Cache para almacenar contenidos identificados por URI.

mod_echo: Un servidor simple de echo para ilustrar los módulos del protocolo.

mod_env: modificación del entorno que se envia a los scripts CGI y las páginas SSI.

mod_expires: Generación de las cabeceras http Expires, de acuerdo de los criterios especificados por el usuario.

mod_ext_filter: pasa el cuerpo de la respuesta a través de un programa antes de enviársela al cliente.

mod_file_cache: cachea una lista estática de ficheros en memoria.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

3

Page 4: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

mod_headers: personalización de las peticiones HTTP y las cabeceras de las respuestas.

mod_imap: proceso de imágenes en el lado del servidor.

mod_include: Documentos HTML generados por el servidor (Server Side Includes).

mod_info: proporciona una visión comprensiva de la configuración del servidor.

mod_isapi: Extensiones ISAPI en Apache para Windows.

mod_ldap: pool de conexiones LDAP y cacheo de resultados para la utilización de otros módulos LDAP.

mod_log_config: registro de las peticiones hechas al servidor.

mod_logio: registro del número de bytes recibidos y enviados en cada respuesta.

mod_mem_cache: Cache de contenidos identificados por URI.

mod_mime: asocia las extensiones de peticiones de los ficheros con el comportamiento del fichero (manejadores y filtros) y contenido (tipos mime, idioma, juego de caracteres y codificación).

mod_mime_magic: determina el tipo MIME de un fichero mirando unos pocos bytes del contenido.

mod_negotiation: se proporciona para la negociación del contenido.

mod_proxy: servidor HTTP/1.1 proxy/gateway.

mod_proxy_connect: extensión de mod_proxy para la gestión de las peticiones CONNECT.

mod_proxy_ftp: soporte FTP para mod_proxy.

mod_proxy_http: soporte HTTP para el módulo mod_proxy.

mod_rewrite: proporciona un motor de reescritura basado en reglas que rescribe las peticiones de URL's al vuelo.

mod_setenvif: permite la configuración de las variables de entorno basándose en las características de la petición.

mod_so: carga del código ejecutable y los módulos en al iniciar o reiniciar el servidor.

mod_speling: intenta corregir las URL mal puestas por los usuarios, ignorando las mayúsculas y permitiendo hasta una falta.

mod_ssl: criptografía avanzada utilizando los protocolos Secure Sockets Layer y Transport Layer Security.

mod_status: proporciona información en la actividad y rendimiento del servidor.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

4

Page 5: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

mod_suexec: permite a los scripts CGI ejecutarse con un nombre y grupo específico.

mod_unique_id: proporciona variables de entorno y un identificador único para cada petición.

mod_userdir: directorios específicos para usuarios.

mod_usertrack: registro de actividad de un usuario en el sitio.

mod_vhost_alias: Proporcionado para configurar muchos servidores virtuales dinámicamente.

Artículo por Carlos Luis Cuenca

Instalación de Apache en Windows

El proceso para instalar Apache en Windows es muy sencillo. En adelante, es posible que la configuración del servidor pueda complicarse un poco, sin embargo, si deseamos utilizarlo con las funciones habituales, no hemos de tener mayores problemas en ningún momento.

Descarga de Apache

El servidor web Apache se puede descargar en la página de la Fundación Apache, en apache.org. En la URL http://httpd.apache.org/ tienen una sección en particular para el servidor HTTP (Protocolo de transmisión utilizado en la web), en la que tendremos que buscar el enlace para descarga.

Una vez en la página de descarga debemos buscar la última versión estable o la versión que recomendada. El servidor está disponible para sistemas Unix o Windows, por lo que nos ofrecerán diversas opciones de descarga, incluso para obtener el código fuente del programa. Si deseamos instalarlo en un sistema Windows, necesitamos obtener el archivo Win-32 Binary, que es un instalador Windows.

Instalación

Una vez descargado, debemos instalarlo en nuestro sistema, ejecutando el archivo obtenido. Daremos paso a un asistente que nos guiará en el proceso de instalación del servidor. Durante el proceso nos preguntará el nombre del dominio y del servidor, que podemos rellenar con "localhost". Nos pedirá también una dirección de correo, que podemos rellenar con cualquiera que deseemos. También nos pregunta si deseamos que el servidor responda en el puerto 80 para todos los usuarios o si deseamos que sólo se active para el usuario actual en el puerto 8080, cuando se inicie manualmente. Lo normal es que lo activemos para todos los usuarios.

Con estos datos queda configurado el Apache inicialmente. En cualquier momento podemos editarlos a nuestro gusto o necesidades. Para ello deberemos editar el fichero httpd.conf, que se encuentra en el directorio de instalación de Apache, que hemos indicado durante el proceso de instalación, más concretamente, en el subdirectorio conf. En adelante en este manual podremos aprender las configuraciones más habituales.

Nota: Debemos ir con cuidado de no tener otro servidor configurado para trabajar en el puerto 80 (por ejemplo el servidor IIS que viene en las versiones profesionales o servidor de Windows). En caso de tener

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

5

Page 6: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

en marcha otro servidor web durante la instalación, puede fallar y mostrarnos un mensaje de error que indique esto precisamente, es decir, que no podemos tener dos servidores a la vez escuchando en el puerto 80.

Para solucionar el problema basta con que paremos el IIS o el otro servidor que esté funcionando. El IIS lo podemos parar accediendo a Panel de control - Herramientas administrativas - Servicios de Internet Information Server. La pantalla que sale es la consola de administración del sistema. Aquí debemos desplegar el árbol de la izquierda, pulsando sobre el signo "+", hasta que encontremos el "Sitio web predeterminado". Nos ponemos encima de él y apretamos el botón de STOP que está situado en la barra de herramientas de la consola de administración. También podemos encontrar una opción para detener el servicio pulsando con el botón derecho en el "Sitio web predeterminado".

Una vez instalado, el Apache se pone en funcionamiento. Para controlar el Apache podemos encontrar en el botón de inicio, sección programas, un nuevo grupo llamado "Apache HTTP Server", con iconos para detener el servidor, ponerlo en marcha, editar el archivo de configuración httpd.conf o para ver los logs de acceso. También podemos ver en la barra de tareas un nuevo icono que indica que el Apache está funcionando y que ofrece opciones para controlarlo si pulsamos sobre él.

Ver si está funcionando

Para comprobar que el servidor está activo y funciona correctamente podemos abrir un explorador y probar a acceder a la URL http://localhost, que es nuestro propio servidor. Si todo ha ido bien observaremos el mensaje de bienvenida del servidor con algo como "Funciono! ¡El servidor Apache ha sido instalado en este equipo!".

Para seguir aprendiendo a configurar Apache es interesante leerse nuestro Manual de instalación y configuración de Apache, que explica dónde debemos cambiar las opciones más comunes del servidor.

Artículo por Miguel Angel Alvarez

Estructura de la instalación de Apache

Una vez instalado el Apache, en el directorio raíz de la instalación, se encontrarán los siguientes directorios:

bin: ficheros ejecutables del Apache.

conf: ficheros de configuración del servidor.

error: ficheros con los mensajes de error del servidor, en varios lenguajes.

htdocs: directorio raíz por defecto del servidor (Se guardan las páginas Web).

icons: directorio donde se encuentran los iconos que utiliza el servidor (entre otras cosas para mostrar estructuras de directorios).

logs: directorio donde se almacenan los registros de acceso y errores del servidor.

manual: directorio donde se encuentra el manual del Apache.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

6

Page 7: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

proxy: Directorio con los ficheros de la cache del servidor.

Básicamente las configuraciones del servidor residen dentro de dos ficheros, el de configuración principal que se encuentra dentro de la carpeta conf, con el nombre httpd.conf, o dentro de un fichero con el nombre .htaccess que se puede encontrar dentro de cualquier directorio que se encuentre mapeado dentro del servidor. Dentro de cada uno de estos ficheros se ubican las directivas de configuración. Muchas de estas directivas de configuración se pueden encontrar tanto dentro del fichero de configuración principal como dentro de un fichero .htaccess. Los valores de las directivas que se encuentran dentro de un fichero .htaccess, prevalecen frente a los valores de configuración especificados dentro del fichero httpd.conf.

Artículo por Carlos Luis Cuenca

El fichero httpd.conf

El fichero httpd.conf es el fichero principal de configuración del Apache, se encuentra dentro del directorio Conf, en el directorio de instalación del Apache.

En primer lugar hay que destacar que el fichero está dividido en tres secciones, que son:

1º Parámetros globales 2º Directivas de Funcionamiento 3º Host Virtuales

En el fichero se encuentran todos los parámetros de funcionamiento del Apache. Algunos parámetros son generales para la instalación y funcionamiento del Apache. Muchos otros de los parámetros se pueden configurar independientes para un conjunto de directorios y/o ficheros . En estos casos los parámetros se encuentran ubicados dentro de secciones donde se indica el ámbito de aplicación del parámetro.

Las secciones más importantes son:

<Directory> : Los parámetros que se encuentran dentro de esta sección, sólo se aplicarán a el directorio especificado y a sus subdirectorios.

<DirectoryMatch>: Igual que Directory, pero acepta en el nombre del directorio expresiones regulares.

<Files>: Los parámetros de configuración proporcionan control de acceso de los ficheros por su nombre.

<FilesMatch>: Igual que Files, pero acepta expresiones regulares en el nombre del fichero.

<Location>: Proporciona un control de acceso de los ficheros por medio de la URL

<LocationMatch>: Igual que Location, pero acepta expresiones regulares en el nombre del fichero.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

7

Page 8: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Algunas veces las directivas de funcionamiento de las secciones anteriores se pueden cruzar en cuyo caso tienen el siguiente orden de preferencia:

1. <Directory> y .htaccess (.htaccess prevalece frente a <Directory>) 2. <DirectoryMatch> y <Directory> 3. <Files> y <FilesMatch> 4. <Location> y <LocationMatch>

También hay que destacar, que el fichero contiene un montón de comentarios para su correcta utilización, las líneas comentadas aparecen con el símbolo #.

Artículo por Carlos Luis Cuenca

Httpd.conf: Parámetros globales

Todos los parámetros que se establecen dentro de esta sección son globales para el funcionamiento del servidor, por lo que no admiten estar dentro de ninguna directiva.

ServerRoot: especifica la ubicación del directorio raíz donde se encuentra instalado el Apache, a partir del cual se crea el árbol de directorios comentado anteriormente. Esta directiva no debería cambiar a no ser que se mueva la carpeta de instalación de apache a otro directorio. Se encuentra disponible a través del módulo Core.

PidFile: ubicación del fichero que contendrá el número de identificación del proceso cuando se encienda el servidor. Se encuentra disponible a través de varios módulos beos, leader, mpm_winnt, mpmt_os2, perchild, prefork, threadpool ó worker

TimeOut: el valor se utiliza para configurar medido en segundos, tres parámetros:

1. El tiempo tal que puede tardar una petición en ser recibida entera 2. La cantidad de tiempo que espera entre recepción de paquetes TCP 3. La cantidad de tiempo entre ACK's en transmisiones TCP

Pasado este tiempo se produce un mensaje de error en el que se indica que se ha consumido el tiempo máximo de espera. Establecer un valor muy pequeño puede dar lugar a que los usuarios reciban este mensaje de error, y establecer un valor muy pequeño dará lugar a una sobrecarga de la máquina. Se encuentra disponible a través del módulo Core.

KeepAlive: especifica si se utilizarán conexiones persistentes, es decir, que todas las peticiones de un usuario se atenderán con la misma conexión. Se encuentra disponible a través del módulo Core.

MaxKeepAliveRequests: número máximo de conexiones persistentes. (número máximo de usuarios concurrentes si KeepAlive esta en ON). Para establecer este parámetro, hay que tener en cuenta el ancho de banda de salida de nuestro servidor, por el cual deberá ser enviada toda la información, si se establece un valor muy grande respecto al ancho de banda, el tiempo de respuesta se verá incrementado para cada usuario. Se encuentra disponible a través del módulo Core.

KeepAliveTimeout: tiempo que espera en segundos entre peticiones de un usuario, antes de

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

8

Page 9: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

considerar que este ha terminado, y cerrar su conexión.

Si el valor es muy pequeño provocará que algunos usuarios no puedan visualizar la página debido a que el número máximo de conexiones persistentes se ha superado, mientras que si se establece un valor muy grande se estarán utilizando muchos recursos de la máquina. Se encuentra disponible a través del módulo Core.

Listen: esta directiva permite especificar que puerto se utilizará para antender las peticiones. Por defecto se utiliza el puerto 80 (www), también permite especificar que direcciones IP atenderá, por defecto todas. Para atender dos direcciones IP distintas, con distintos puerto, se utilizaría:

Listen 192.168.255.5:80 Listen 192.168.255.8:8080

Se encuentra disponible a través de varios módulos beos, leader, mpm_winnt, mpmt_os2, perchild, prefork, threadpool ó worker

LoadModule: Directiva que sirve para cargar módulos que incluyen distintas funcionalidades. La sintaxis es:

LoadModule nombreModulo ubicacionFichero

Se encuentra disponible a través del módulo mod_so.

Artículo por Carlos Luis Cuenca

Httpd.conf: directivas de funcionamiento (1)

Esta es la sección principal de configuración del servidor, en ella podemos encontrar las siguientes opciones:

ServerAdmin: especifica la dirección de correo electrónico del administrador, esta dirección aparece en los mensajes de error, para permitir al usuario notificar un error al administrador. No puede estar dentro de ninguna sección. Se encuentra disponible a través del módulo Core.

ServerName: especifica el nombre y el puerto que el servidor utiliza para identificarse, normalmente se determina automáticamente, pero es recomendable especificarlo explícitamente para que no haya problemas al iniciar el servidor. Si el servidor no tiene un nombre registrado en las DNS, se recomienda poner su número IP. No puede estar dentro de ninguna sección.

La sintaxis es:

ServerName direccionIP:Puerto p.e. ServerName localhost:80

Se encuentra disponible a través del módulo Core.

DocumentRoot: la carpeta raíz que se ubica en el servidor, desde la que se servirán los

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

9

Page 10: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

documentos. Por defecto, todas las peticiones, tendrán como raíz esta carpeta, a no ser que se utilicen alias (directorios virutales en IIS)

Por defecto, la carpeta raíz es la carpeta Htdocs, que se encuentra en la carpeta de instalación del Apache. No puede estar dentro de ninguna sección.

Si se cambia este directorio por otro, es muy importante que se ponga el nuevo valor, no solo en esta línea, sino también en la sección <Directory> en la que se establecen los parámetros de configuración de este directorio.

Esta línea empieza por " <Directory " seguido de la carpeta raíz que originalmente hay en DocumentRoot.

Se encuentra disponible a través del módulo Core.

DirectoryIndex: especifica el fichero por defecto que buscará en cada directorio, en caso de que no se especifique ninguno. Por defecto es index.html. Es decir, que si por ejemplo se pone en el navegador: www.desarrolloweb.com el servidor por defecto servirá www.desarrolloweb.com/index.html

En esta directiva se pueden especificar más de un fichero, la sintaxis es la siguiente:

DirectoryIndex fichero1 fichero2 fichero3

El orden con el que se especifica el nombre de fichero determinará la prioridad a la hora de decidir que fichero es el que se muestra.

La directiva se puede encontrar fuera de cualquier sección, dentro de una sección o dentro de un fichero .htaccess.

Se encuentra disponible a través del módulo mod_dir.

AccessFileName: es el nombre del fichero de configuración que se buscará en cada una de los directorios del servidor para conocer la configuración del mismo. Este fichero 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. No puede estar dentro de ninguna sección.

El nombre de fichero que se especifica por defecto es el del fichero ".htaccess".

Como medida de seguridad, la configuración del Apache establece que no se muestre la existencia de este fichero a ningún usuario, aunque este establecida la opción de listado de directorios. Si se decide cambiar al nombre, habrá que redefinir la seguridad para que no se muestre el contenido del nuevo fichero. Esto se hace en el fichero httpd.conf en una sección File como la que se presenta a continuación en la que se establece que todos los ficheros que comiencen por .ht no se mostrarán.

<Files ~ "^\.ht"> Order allow,deny Deny from all </Files>

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

10

Page 11: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Se encuentra disponible a través del módulo Core.

Artículo por Carlos Luis Cuenca

Httpd.conf: directivas de funcionamiento (2)

TypesConfig: especifica el nombre del fichero que contiene la lista de tipos mime que conoce el servidor, y que determinará dependiendo de las extensiones para generar las cabeceras http. No puede estar dentro de ninguna sección.

Se encuentra disponible a través del módulo mod_mime.

DefaultType: tipo mime que se servirá por defecto en caso de no conocer la extensión del fichero que se está sirviendo. Por defecto, se indicará que se sirve texto plano, con el valor text/plain. La directiva se puede encontrar fuera de cualquier sección, dentro de una sección o dentro de un fichero .htaccess.

Sintaxis: DefaultType tipoMime

Se encuentra disponible a través del módulo Core.

HostnameLookups: se utiliza en los ficheros de registro. Por defecto cuando se produce un acceso, se guarda simplemente su número IP, si esta directiva se encuentra en On, el servidor buscará la correspondencia de ese número IP con su nombre, y almacenará el nombre. Establecer esta configuración en ON provocará que por lo menos se tenga que hacer una petición al servidor de nombres por cada una de las peticiones de usuario, por lo que el rendimiento de la máquina se puede ver decrementado. Esta directiva se puede encontrar dentro de una sección o fuera de cualquier otra.

Se encuentra disponible a través del módulo Core.

ErrorLog: especifica la ubiación del fichero que contiene el registro de errores, por defecto en la carpeta logs. Esta directiva sólo se puede encontrar fuera de cualquier sección.

Se encuentra disponible a través del módulo Core.

LogLevel: especifica el tipo de mensajes que se guardaran en el fichero de registro de errores, dependiendo de los valores especificados, se guardarán mas o menos. Esta directiva sólo se puede encontrar fuera de cualquier sección.

Valor de más a menos son: debug, info, notice, warn, error, crit, alert, emerg

Se encuentra disponible a través del módulo Core.

LogFormat: la directiva permite definir el formato que se utilizará para almacenar los registros. A cada formato se le puede asignar un nombre, utilizándolo luego para crear distintos tipos de ficheros de registro. Pueden existir varios logFormat distintos.

Sintaxis:

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

11

Page 12: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

LogFormat "configuraciónError" nombre

Esta directiva se encuentra fuera de cualquier sección.

Se encuentra disponible a través del módulo mod_log_config.

CustomLog: la directiva se utiliza para especificar la ubicación y el tipo de formato que se utilizará en un fichero de registro. Pueden existir varios ficheros de registro distintos con configuraciones distintas. Para hacer esto, simplemente hay que poner varias líneas customlog

Sintaxis: CustomLog fichero formato

Esta directiva se encuentra fuera de cualquier sección.

Se encuentra disponible a través del módulo mod_log_config.

ServerTokens: Esta directiva establece la información que se devuelve dentro de la cabecera http que envía el servidor. Posibles valores de menor a mayor información son:-Pord-Min -Os -Full

Esta directiva se encuentra fuera de cualquier sección.

Se encuentra disponible a través del módulo Core.

IndexOptions: Esta directiva controla la apariencia de la página que se mostrará a un usuario cuando se pide la lista de ficheros de un directorio.

Sintaxis:

IndexOptions [+|-]opcion [[+|-]opcion] ... (Apache 1.3.3 en adelante)

Entre las opciones que se pueden poner, destaca:

FancyIndexing: que muestra los nombres de los ficheros, con iconos etc..

Se encuentra disponible a través del módulo mod_autoindex.

FoldersFirst: Hace que primero se muestren los directorios. Esta opción sólo se puede establecer en el caso de que FancyIndexing este activa.

Esta directiva se puede encontrar dentro del fichero .htaccess, dentro de una sección <Directory> y fuera de cualquier otra.

Se encuentra disponible a través del módulo mod_autoindex.

Artículo por Carlos Luis Cuenca

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

12

Page 13: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Httpd.conf: directivas de funcionamiento (3)

AddIconByEncoding: Esta directiva permite asociar un icono a un tipo mime, de forma que cuando la directiva fancyIndexing este activada, se mostrará al lado del fichero el icono correspondiente.

Sintaxis:

AddIconByEncoding icon MIME-encoding…

Ejemplo:

AddIconByEncoding/icons/compressed.gif x-compress

Esta directiva se puede encontrar dentro del fichero .htaccess, dentro de una sección <Directory> y fuera de cualquier otra.

Se encuentra disponible a través del módulo mod_autoindex.

AddIconByType: Esta directiva asocia un icono a un fichero dependiendo del un tipo mime, de forma que cuando la directiva fancyIndexing este activada, se mostrará al lado del fichero el icono correspondiente.

Sintaxis:

AddIconByType icon MIME-encoding…

Ejemplo:

AddIconByType /icons/text.gif text/*

La diferencia entre AddIconByType y AddIconByEncoding reside en que mientras que en la primera se determina el tipo mime mediante basándose en la codificación del fichero, mientras que AddIconByType determina el tipo mime basándose en el nombre del fichero.

Ambas directivas se pueden encontrar dentro de el fichero .htaccess, dentro de una sección <Directory> o fuera de cualquier otra.

Se encuentra disponible a través del módulo mod_autoindex.

AddDescription: Esta directiva permite asociar una descripción a un tipo de fichero, que se mostrará al listar un directorio. Esta directiva se puede encontrar dentro de el fichero .htaccess, dentro de una sección <Directory> o fuera de cualquier otra.

Sintaxis:

AddDescripcion cadena , fichero

Se encuentra disponible a través del módulo mod_autoindex.

AddDefaultCharset: Esta directiva define la codificación de caracteres que se utilizará de forma predeterminada para los documentos. Por defecto viene establecido el valor ISO-8859-

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

13

Page 14: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

1. Esta directiva se puede encontrar dentro de cualquier sección y en los ficheros .htaccess.

Se encuentra disponible a través del módulo Core.

ErrorDocument: Esta directiva establece el la configuración del servidor para cuando se produce un error. Se pueden establecer cuatro configuraciones distintas:

1. Sacar un texto de error2. Redirigir a un fichero en el mismo directorio3. Redirigir a un fichero en nuestro servidor4. Redirigir a un fichero fuera de nuestro servidor

Hay que tener en cuenta que si el texto de error se envia a Internet Explorer, este tendrá que tener al menos 512 Bytes, porque sino Internet Explorer mostrará su propia página de error.

Sintaxis:

ErrorDocument NúmeroError Acción

Esta directiva se puede encontrar tanto dentro del fichero .htaccess, dentro de la sección <Directory> o fuera de cualquier otra sección.

Ejemplo:

ErrorDocument 404 /error404.html.

En caso de no encontrarse un fichero, se mostrará el fichero error404.html

Se encuentra disponible a través del módulo Core.

CacheRoot: establece el directorio donde se encontrarán los ficheros de la cache del Apache.

Se encuentra disponible a través del módulo mod_disk_cache

CacheSize: Tamaño de la cache en Kilobytes.

Se encuentra disponible a través del módulo mod_disk_cache

CacheGcInterval: Establece cada cuantas horas se verificará el tamaño de los ficheros de la cache para comprobar si se corresponden con el tamaño establecido dentro de CacheSize. El valor acepta números flotantes, por lo que se pueden establecer los intervalos en minutos. Cuanto mayor sea el valor de esta directiva, más posibilidades existirán de que se sobrepase el valor establecido en CacheSize.

Se encuentra disponible a través del módulo mod_disk_cache

CacheMaxExpire: máximo número de horas que los ficheros permanecerán dentro de la cache.

Se encuentra disponible a través del módulo mod_cache

CacheLastModifiedFactor: Sirve para calcular la caducidad de un fichero en la cache, que

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

14

Page 15: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

será el de la hora de la última modificación, multiplicado por este valor.

Se encuentra disponible a través del módulo mod_cache

CacheDefaultExpire: Número de horas por defecto a partir de las cuales un fichero caduca. Se aplica en aquellos casos en los que no se puede determinar la hora de creación del fichero.

Todas las directivas de la caché, deben encontrarse fuera de cualquier sección. Esta directiva no se puede encontrar dentro de ninguna sección.

Se encuentra disponible a través del módulo mod_cache

Artículo por Carlos Luis Cuenca

Creación de directorios virtuales en Apache

Esta directiva sólo se encuentra dentro del fichero de configuración httpd.conf, y se trata aparte en este capítulo debido a su importancia.

Alias

Permite la definición de directorios virtuales, un directorio virtual es un directorio que se encuentra en un directorio distinto del que se mapea en la URL. El directorio virtual no se tiene porqué encontrar dentro de árbol de directorios que se crea a partir de DocumentRoot, sino que se puede encontrar en cualquier otra ubicación, incluso se podría encontrar en otro servidor distinto.

Por ejemplo, cuando se escribe www.desarrolloweb.com/manual/php la carpeta php no se tiene que encontrar necesariamente dentro de la carpeta manual, que a su vez esta dentro de la carpeta raíz Desarrolloweb, sino que puede estar en una ubicación distinta, y fuera del árbol de subdirectorios de la directiva DocumentRoot

Sintaxis: Alias nombreFicticio ubicacionReal

Ejemplo: Alias /manual/php "c:\php"

- el directorio php no se encuentra dentro del directorio manual dentro de la carpeta documentRoot, sino en la carpeta c:\php.

Por defecto vienen creados dos redirecciones con Alias. - Icons: para establecer la carpeta donde se encuentran los iconos que utilizará el Apache para mostrar el contenido de los directorios, y - Manual: que apunta a la carpeta donde está instalado el manual del Apache en caso de que se hubiera elegido la opción durante la instalación.

AliasMatch

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

15

Page 16: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

La utilidad de esta directiva es idéntica a la de la directiva Alias, la única diferencia es que mientras Alias utiliza expresiones estándar regulares para especificar la URL que se va mapear.

Sintaxis: AliasMatch Expresión regular ubicación

Artículo por Carlos Luis Cuenca

Seguridad en Apache I

Cuando un servidor apache recibe una petición de una página web, antes de devolver el resultado, lleva a cabo varias acciones para verificar que la petición esta autorizada.

Las distintas acciones que lleva a cabo para verificar la validez de la aplicación, se pueden agrupar en tres tipos: Autentificación, Autorización y Control de Acceso.

La autentificación es el proceso por el cual se verifica la identidad de una persona. De una forma simple, este proceso se puede llevar a cabo mediante un nombre de usuario y una contraseña, pero se pueden llegar a utilizar otros métodos para validar la identidad de una persona, como mediante el uso de certificados, tarjetas etc…

En apache la autentificación puede estar gestionada por distintos módulos, dependiendo de la forma de implementación. Si decide llevarla a cabo gestionando ficheros con listas de usuarios y contraseñas (encriptadas), deberá utilizar el módulo mod_auth. Sin embargo, si decide llevarla a cabo mediante base de datos, deberá utilizar los módulos mod_auth_dbm.

La autorización es el proceso por el cual se verifica que un usuario con una identidad conocida, tiene acceso al recurso solicitado. Para llevar a cabo esta acción, se suelen utilizar listas de permisos en las cuales se enumeran cada una de las acciones que puede realizar un usuario, o las que no puede hacer. Normalmente, para simplificar la gestión de estos ficheros, los usuarios se suelen unir en grupos proporcionando los permisos al grupo.

En apache la autorización a recursos es gestionada o bien mediante la directiva <directory> en el fichero principal de configuración, o bien mediante la configuración de la carpeta a través de ficheros .htaccess.

El control de acceso es el proceso por el cual se verifica que la máquina desde la que se ha hecho la petición, tiene acceso al recurso. Los controles de acceso se utilizan para limitar y controlar las máquinas que tienen acceso a un recurso independientemente del usuario que accede, ya que estos controles se llevan a cabo antes de que se realice el proceso de autentificación.

En apache, el control de acceso se puede llevar a cabo mediante las directivas <directory><files>y <location>, o a través del fichero de configuración .htaccess para controlar una carpeta especifica.

En todo caso y para poder llevar a cabo la configuración de las tres características aquí enumeradas, autentificación, autorización y control de acceso, es necesario tener la directiva

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

16

Page 17: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

AllowOverride con el valor AuthConfig, para así permitir el uso de las distintas directivas de autentificación.

Autentificación y autorización de usuarios en Apache. Mod_auth

Para configurar el servidor apache para que sea capaz de autentificar a los usuarios y verificar la autorización del mismo al recurso solicitado, es necesario realizar las siguientes acciones:

1. Crear un fichero con usuarios 2. Crear un fichero con grupos (si es necesario) 3. Definir las directivas en el fichero de configuración o mediante un fichero .htaccess

En los ficheros de usuarios de apache, en cada línea se especifica un usuario, escribiendo el nombre de usuario separado de dos puntos, seguido de la contraseña encriptada con MD5.

En los ficheros de grupos de apache, en cada línea se especifica un grupo escribiendo el nombre del grupo seguido de dos puntos, y a continuación separado por espacios, los nombres de los usuarios.

Es recomendable que tanto los ficheros de usuarios como los de grupos, se encuentren almacenados fuera de los directorios publicados, para que de esta forma nadie pueda descargarlos. Asimismo, solo el usuario root debería estar autorizado a escribir en él, mientras que solo el usuario que ejecuta el servicio web, debería estar autorizado para leerlo.

El fichero de grupos se puede crear manualmente, pero el fichero con los usuarios es recomendable crearlo mediante la utilidad htpasswd, que se encuentra en la carpeta con los binarios de apache.

Para crear un fichero de usuario se utilizará la siguiente sintaxis:

htpasswd -c ruta/passwords usuario

El flag -c se utiliza para crear un fichero nuevo, por lo que sólo se deberá poner la primera vez que se crea el fichero, sino lo borrará.

Los módulos que intervienen en la autentificación y autorización son los de core y mod_auth.

Las directivas de mod_auth necesarias para configurar la autenticación y autorización son las siguientes:

• AuthUserFile: siver para especificar la ruta donde se almacenará el fichero de usuarios. • AuthGroupFile: sirve para especificar la ruta donde se almacenará el fichero de grupos.

Las directivas de core necesarias para complementar la configuración del módulo son:

• AuthType: selecciona el tipo de autentificación de usuarios que se utilizará para autentificar a un usuario. Puede variar por directorio. Los valores posibles son Basic y Digest. Con Basic, la transferencia de las claves se hará sin cifrar, y con digest se harán cifradas.

• AuthName: especifica un nombre del dominio para el cual se solicita el acceso, este nombre figurará en la pantalla donde se pide la clave, y a su vez servirá para que el cliente identifique la contraseña que debe utilizar al enviar una petición a un área determinada.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

17

Page 18: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

• Require: selecciona los usuarios que pueden acceder a un área determinada, los usuarios se pueden determinar a través de nombres o grupos.

Artículo por Carlos Luis Cuenca

Proteger carpetas mediante usuarios en Apache

1º. Crear un fichero de claves fuera de la parte pública:

-htpasswd -c /ruta/passwords Carlos

Al hacerlo, pedirá que se introduzca la clave, y esta será codificada, escribiendo el fichero.

2º Crear un nuevo fichero, en la misma ubicación que "ruta", que se llamará "groups" en la que se almacenarán los grupos, por ahora uno, para ello escribir la siguiente línea y guardar el fichero:

usuariosAutenticados: Carlos

De esta forma, debería tener un fichero que se llame passwords, y que contenga una línea con los datos del usuario Carlos, y un fichero, con nombre groups, que contiene una línea definiendo un grupo llamado usuariosAutenticados, del que sólo el usuario Carlos forma parte.

3º Crear un fichero con el nombre .htaccess en la carpeta que se quiere proteger, y escribir las siguientes líneas y guardar el fichero:

AuthType Basic AuthName "ServidorPruebasCarlos" AuthUserFile /ruta/passwords AuthGroupFile /ruta/groups Require group usuariosAutenticados

La explicación del contenido del fichero es la siguiente:

• Con "AuthType Basic" se estará protegiendo la carpeta con autentificación básica, es decir que la clave que el usuario introduzca, se transmitirá sin cifrar por la web.

• Con "AuthName "ServidorPruebasCarlos" se asociará esta carpeta con el dominio "ServidorPruebasCarlos", nombre con el que lo identificará el cliente.

• Con "AuthUserFile /ruta/passwords" y "AuthGroupFile /ruta/groups" Se definirá la ubicación tanto de los ficheros de usuarios como los ficheros de grupos y se almacenarán en la carpeta /ruta, con nombres passwords y groups respectivamente.

• Con "Require group usuariosAutenticados" se autorizará el acceso al contenido de esta carpeta a todos los usuarios que forman parte del grupo de "usuariosAutenticados", por lo que en la práctica se autorizará el acceso al contenido al usuario Carlos.

En vez de realizar las autorizaciones a grupos completos, se puede autorizar a un usuario determinado cambiando la última línea por "Require user Carlos", de esta forma sólo se autorizará al usuario Carlos.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

18

Page 19: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Se puede permitir el acceso a todos los usuarios identificados mediante la introducción de la siguiente directiva "Require valid-user". El hecho de que esta directiva este incluida en el fichero, hace que las demás no tengan efecto.

Autentificación y autorización de usuarios con Mysql y Apache. mod_auth_mysql.

En capítulos anteriores hemos explicado como controlar la autentificación y la autorización de usuarios con el mod_auth. Este módulo tiene como característica el que almacena los nombres de usuario, las contraseñas y los grupos en ficheros de texto que deben ser escritos y gestionados por el administrador del sistema. Esta solución es obviamente poco escalable, ya que en cuanto el número de usuarios y de grupos es elevado, el gestionarlos y controlarlos puede ser un problema.

Por este motivo existe el mod_auth_mysql, este módulo permite gestionar la autentificación y autorización, almacenando los usuarios y los grupos en tablas de Mysql, de forma que incluso se pueden gestionar mediante un panel de control escrito en php.

Para configurar el módulo en Linux, será necesario extraerlo y ejecutar:

./configure --with-mysql=/usr/local/mysql --with-apache=/usr/local/apache

sustituyendo el lugar donde se encuentra la instalación de mysql y de apache.

Para utilizar el módulo es necesario disponer de al menos una tabla donde se almacenen los usuarios y otra donde se almacenen los grupos. Para ello se puede crear una tabla usuarios con los campos, nombre y password, y otra tabla llamada grupos con los campos grupo, usuario, almacenando una entrada por cada usuario que tenga un grupo.

La configuración es la siguiente:

En primer lugar será necesario establecer el servidor, el usuario y la contraseña de la conexión con la base de datos, esto se hará escribiendo la siguiente línea en el fichero httpd.conf, y reemplazando los valores por los correctos:

Auth_MySQL_Info <host> <user> <password>

Para configurar el módulo será necesario establecer los valores de las siguientes directivas del módulo:

Auth_MySQL_DB: nombre de la base de datos Auth_MySQL_Password_Table: nombre de la base de datos que contiene los nombres de usuario y las contraseñas. Auth_MySQL_Username_Field: nombre del campo de la tabla que contiene al usuario. Auth_MySQL_Password_Field: nombre del campo de la tabla que contiene la contraseña del usuario. Auth_MySQL_Group_Table: nombre de la tabla que contiene los usuarios y los grupos a los que pertenecen. Auth_MySQL_Group_Field: nombre del campo de la tabla que contiene el nombre del grupo Auth_MySQL_Empty_Passwords on/off para determinar si se aceptan usuarios con contraseñas vacias. Auth_MySQL_Encryption_Types para especificar el tipo de encriptación que se utilizará para almacenar la clave del usuario dentro de la base de datos.

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

19

Page 20: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Auth_MySQL_Non_Persistent on/off para especificar si se desean utilizar conexiones persistentes.

Además será necesario establecer las siguiente directivas de core para su correcto funcionamiento:

AuthName: con el nombre del dominio AuthType: establecido a Basic

Una vez puesto en marcha, el funcionamiento es análogo al módulo mod_auth.

Artículo por Carlos Luis Cuenca

Control de acceso en Apache. Mod_access.

Las directivas que proporciona este módulo se pueden utilizar dentro de los elementos , y del fichero de configuración httpd.conf, o bien dentro de ficheros .htaccess ubicados dentro de las carpetas.

Las directivas con las que cuenta el módulo para permitir o denegar el acceso son:

• Allow: controla los servidores que tendrán acceso al contenido, por ejemplo: Allow from desarrolloweb.com Permite el acceso desde desarrolloweb.com

Allow from 192.168.0.1 Permite el acceso desde 192.168.0.1

Allow from 192.168 Permite el acceso desde todas las direcciones Ip que comienzan por 192.168

Allow from all Permitir todas

• Deny: controla los servidores a los que se denegará el acceso, por ejemplo: Deny from desarrolloweb.com Deniega el acceso desde desarrolloweb.com

Deny from 192.168.0.1 Deniega el acceso desde 192.168.0.1

Deny from 192.168 Deniega el acceso desde todas las direcciones Ip que comienzan por 192.168

Deny from all Denegar todas

• Order: determina el orden en el que se leerán los permisos, por ejemplo para leer primero los permitidos y luego los no permitidos se pondrá "Allow,Deny" en este caso si un servidor esta en la lista de permitidos, y en la de denegados, el acceso al mismo será denegado, ya que la entrada dentro de la opción Deny sobrescribirá la de la entrada Allow.

Hay que tener en cuenta que el uso de order junto con Allow from all ó Deny from all, permite especificar configuraciones como, permitir desde una máquina x y denegar del resto, de una forma muy sencilla.

Adicionalmente, mediante la directiva SetEnvIf del módulo mod_setenvif, se pueden establecer variables de entorno que determinen el funcionamiento de Allow o Deny de la misma forma

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

20

Page 21: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

que se utilizan números IP ó nombres de máquinas. Por ejemplo, utilizando Allow from env=entrada permitirá el acceso a todas las peticiones que tengan definida la variable de entorno "entrada".

Controlar acceso dependiendo del navegador con Apache

Mediante el uso conjunto de las directivas Allow, Deny, Order y SetEnvIf se puede restringir el acceso a un sitio dependiendo del tipo de navegador. Para realizarlo simplemente basta con crear una variable de entorno dependiendo del tipo del navegador, y permitir el acceso a las peticiones que cuenten con esta variable de entorno denegándoselo al resto. Para ello la configuración necesaria es la siguiente:

SetEnvId User-Agent googlebot entrar Order Deny, Allow Deny from all Allow from env=entrar

En la primera línea se especifica que se creará una variable de entorno llamada entrar cuando el navegador sea el motor de indexación de google.

En la segunda línea se especifica el orden en el que se utilizará la lista de servidores, primero los denegados y luego los permitidos. En la cuarta línea se especifica que se deniega el acceso a cualquier petición En la quinta línea se especifica que se permite el acceso a las peticiones que tienen definida la variable de entorno entrar.

En el caso de que entre el motor de indexación de google, primero se leerá la línea en que se deniegan todas las peticiones, para a continuación leer la línea en la línea en la que se permite el acceso desde las peticiones que tienen definida la variable entrar, como el navegador que lo hace es el googlebot, esta variable estará definida y entrará. En el caso en que la petición sea realizada por cualquier otro navegador, primero se leerá la línea en la que se deniegan las peticiones, y como no satisface la línea en que lo permite, no entrará

Artículo por Carlos Luis Cuenca

Apache Commons Configuration

Yo trabajo en Autentia, y en mi trayectoria profesional ligada a la informática he visto como los programadores invertían grandes cantidades de tiempo en reinventar la rueda por desconocimiento de determinadas APIs.

¿ Alguna vez has implementado clases que gestionaran directamente datos de configuración ? Si la respuesta es afirmativa, seguramente hayas reinventado la rueda.

Existen en varias formas estándar de gestionar los datos configuración de nuestros componentes y aplicaciones:

• Mediante la clase java.util.Properties • A través de las clases del paquete java.util.prefs. (API muy potente que permite

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

21

Page 22: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

gestionar datos de configuración de modo herárquico al estilo del "Registro de Windows" que recomiendo leerse si el lector la desconoce)

En este pequeño tutorial, voy a nombrar un API que a mi personalmente me parece de una enorme utilidad y potencia para la gestión de datos de configuración. Se trata de Apache Jakarta Commons Configuration.

Apache Jakarta Commons Configuration es un subproyecto de la serie de proyectos Apache Jakarta Commons.

Commons Configuration es un conjunto de proyectos que intentan estandarizar las tareas comunes que casi todas las aplicaciones y componentes realizan normalmente. Una tarea muy común en cualquier aplicación es la gestión de datos de configuración. Es aquí en donde entra en juego Apache Jakarta Commons Configuration. Podemos obtener todo lo necesario desde la siguiente dirección: http://jakarta.apache.org/commons/configuration/

Básicamente Apache Commons Configuration nos permite:

1. Gestión de los datos de configuración independientemente del lugar en el que esten almacenados. (Ficheros de propiedades, documentos XML, JNDI, Base de datos, etc.).

2. Un potente motor de consultas para realizar búsquedas del valor que tienen determinadas propiedades de configuración.

3. Recarga automática de los datos de configuración en caso de que sean modificados en su lugar físico de origen (Fichero de texto plano, fichero xml, etc)

4. Posibilidad de almacenar los datos de configuración automáticamente en su lugar físico (fichero de texto plano, fichero xml, etc).

Algunos ejemplos

Antes de nada, deseo resaltar que este tutorial es sólo una introducción al API, y que debe documentarse en la Web oficial del API para ver todas las posibilidades que nos proporciona este API.

Ejemplo 1

Supongamos que tenemos el siguiente fichero de propiedades, en el que se definen datos de configuración relaccionada con el interfaz gráfico de la aplicación:

app.windows.properties:

mainmdi.title=Título de mi aplicación de prueba mainmdi.width=800 mainmdi.height=600 mainmdi.state=maximized

userform.title=Gestión de usuarios userform.width=320 userform.height=200 userform.state=normal

# También sería válido: language=Castellano,English,French language=Castellano language=English language=French

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

22

Page 23: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Pues a través de Commons Configuration, podríamos acceder a las propiedades de la siguiente forma:

try { // Leemos los datos de configuración. El fichero debe estar en el mismo directorio que la aplicación. PropertiesConfiguration config = new PropertiesConfiguration("app.windows.properties");

// La siguiente sentencia imprimirá: 800 System.out.println(config.getInt("main.mdi.width"));

// La siguiente sentencia imprimirá: Mi aplicación de pruena System.out.println(config.getString("main.mdi.title"));

// La siguiente sentencia imprimirá: Castellano System.out.println(config.getStringArray("language")[0]);

// La siguiente sentencia configura el objeto para que salve las propiedades // automáticamente en su origen (En este caso un fichero) cuando se actualizen // o cuando se agregen nuevas propiedades config.setAutoSave(true);

// Añadimos un par de propiedades config.addProperty("version", "1.0"); config.addProperty("author", "Carlos García Pérez");

// No hace falta gracias a que está establecida la propiedad autoSave // config.save();

} catch (ConfigurationException ex){ System.out.println(ex); }

Ejemplo 2

Ahora vamos a ver las posibilidades de este API para tratar con propiedades Jerárquicas en formato xml.

app.windows.properties.xml

<?xml version="1.0" encoding="ISO-8859-1"?> <gui> <mainmdi> <title>Mi aplicación de prueba</title>

<dimension> <width>800</width> <height>600</height> </dimension> <state>maximized</state> </mainmdi>

<userform> <title>Gestión de Usuarios</title>

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

23

Page 24: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

<dimension> <width>800</width> <height>600</height> </dimension> <state>normal</state> </userform>

<printer.form> <dimension> <width>320</width> <height>200</height> </dimension> </printer.form>

<languages default="Castellano"> <language>Castellano</language> <language>English</language> <language>French</language> </languages> </gui>

Ahora podemos acceder a los datos de la siguiente forma. El ejemplo es autodescriptivo y está comentado.

try { // Leemos los datos de configuración. El fichero debe estar en el mismo directorio que la aplicación. XMLConfiguration config = new XMLConfiguration("app.windows.properties.xml");

// La siguiente sentencia imprimirá: 800 System.out.println(config.getInt("mainmdi.dimension.width"));

// La siguiente sentencia imprimirá: Mi aplicación de prueba System.out.println(config.getString("mainmdi.title"));

// La siguiente sentencia imprimirá: Castellano System.out.println(config.getString("languages[@default]"));

// La siguiente sentencia imprimirá: 3 System.out.println(((java.util.List) config.getProperty("languages.language")).size());

// La siguiente sentencia imprimirá: French System.out.println(config.getString("languages.language(2)"));

// La siguiente sentencia imprimirá: 320 // Observe que debido a que el elemento contiene un punto en su nombre // debemos acceder a el escapando el punto mediante .. System.out.println(config.getInt("printer..form.dimension.width"));

// La siguiente sentencia configura el objeto para que salve las propiedades // automáticamente en su origen (En este caso un fichero) cuando se actualizen // o cuando se agregen nuevas propiedades config.setAutoSave(true);

// Cambiamos el juego de caracteres, pues usaremos propiedades // que precisan de tildes. config.setEncoding("ISO-8859-1");

// Añadimos un par de propiedades // Añadimos la propiedad 1.0 que desciende de la raiz config.addProperty("version", "1.0");

// Añadimos la propiedad Carlos García Pérez que desciende de la raiz config.addProperty("author", "Carlos García Pérez");

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

24

Page 25: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

// No hace falta gracias a que está establecida la propiedad autoSave establecida // config.save(); } catch (ConfigurationException ex){ System.out.println(ex); }

Otras Características interesantes

Este API también nos da la posibilidad de que se recargen automáticamente los datos de configuración sobre el objeto Configuration en caso de que estos hayan sido modificados.

Para habilitar esta característica deberá indicarlo mediante la siguiente línea de código:

config.setReloadingStrategy(new FileChangedReloadingStrategy());

Conclusiones

A mi juició este API es más completo, potente y flexible que el resto de APIS o métodos para gestionar datos de configuración.

Aunque java.util.prefs proporciona una funcionalidad y potencia similar a Commons Configurations, los datos de configuración en java.util.prefs sólo pueden ser modificados desde aplicaciones y no manualmente, pues entre otras cosas no se sabe donde guarda realmente este API los datos de configuración.

Cuando utilizamos objetos Properties para gestionar las propiedades, debemos realizar conversiones de tipos de datos, con este API nos ahorramos ese trabajo.

Por comentar algo negativo, este API depende de otros subprojectos de Jakarta, por lo que debemos incluir sus JARs asociados si queremos usarlo. Por ejemplo, para usar las funciones básicas, el API depende de:

• Apache Jakarta Commons Lang • Apache Jakarta Commons Collections • Apache Jakarta Commons Loggin

Puede encontrar más información acerca de las dependencias en la siguiente dirección http://jakarta.apache.org/commons/configuration/dependencies.html

Artículo por Carlos García Pérez

20 trucos de seguridad para Apache

Del mismo modo debes tener en cuenta que algunas de estas recomendaciones pueden disminuir el rendimiento de tu servidor dependiendo de tu configuración y de las especificaciones del sistema.

Primero, cerciorate de tener instalado los últimos parches de seguridad

No tiene sentido poner una cerradura mas resistente a tu puerta si dejas la ventana

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

25

Page 26: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

abierta.Del mismo modo si no tenemos los ultimos parches de seguridad instalado no tendría sentido continuar con la optimización de seguridad.

Restringir acceso por IP

Si tienes un recurso al que deba solamente tener acceso alguna red, o IP en concreto puedes configurarlo en Apache. Por ejemplo si deseas restringir el acceso a tu Intranet para permitir solamente la red 176.16:

Order Deny,Allow Deny from all Allow from 176.16.0.0/16

o por IP:

Order Deny,Allow Deny from all Allow from 127.0.0.1

Oculta la versión y otra información delicada

Por defecto muchas instalaciones de Apache muestran el número de versión que está funcionando, el sistema operativo y un informe de módulos de Apache están instalados en el servidor. Los usuario maliciosos pueden utilizar esta información para atacar tu servidor.

Hay dos directivas que necesitas agregar, o corregir en tu archivo de httpd.conf:

ServerSignature Off ServerTokens Prod

El ServerSignature aparece en la parte inferior de las páginas generadas por apache tales como los famosos errores 404.

La directiva ServerTokens se utiliza para determinarse lo que pondrá Apache en la cabecera de la respuesta HTTP del servidor.

Apache debe funcionar bajo su propia cuenta y grupo de usuario

Algunas versiones de Apache corren bajo el usuario nobody, esto compromete mucho su seguridad por lo tanto haz lo siguiente:

User apache Group apache

Utiliza el mod_security

El mod_security es un módulo estupendo de Apache escrito por Ivan Ristic, el autor de Apache Security de O'Reilly.

Esta es una lista de cosas que puedes hacer con mod_security:

• Filtración simple • Filtración basada en expresiónes regular

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

26

Page 27: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

• Validación de codificación de la URL • Validación de codificación Unicode • Auditing • Prevención del ataque NULL Byte • Límitar la memoria de subida • Enmascarar la identidad del servidor • Y más

Deshabilitar cualquier módulo innecesario

Apache viene por defecto instalado con un serie de módulos.Debes echarle un vistazo a la documentación de Apache y ver para que sirve cada uno de ellos, y de esta manera te darás cuenta de que hay algunos que no son útiles en tu servidor.

Busca en httpd.conf las lineas que contengan LoadModule. Para deshabilitar el módulo debes agregar un # al principio de la línea, para que de esta forma pase a ser un comentario. Para buscar los módulos prueba con:

grep LoadModule httpd.conf

Aquí están algunos módulos que se instalan por defecto pero a menudo no son necesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

Asegurarte de que los archivos a los que se accede son los deseados

No deseamos que se pueda acceder a los directorios que no tengan permisos para ello, supongamos que el directorio raiz para nuestras webs es /web, la configuración óptima debera ser la siguiente:

Order Deny,Allow Deny from all Options None AllowOverride None

Order Allow,Deny Allow from all

Desactiva las opciones para explorar directorios

Esto lo puedes hacer con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o indexes.

Options -Indexes

Desactiva los includes del lado servidor

Esto también se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o include.

Options -Includes

Desactiva la ejecución de CGI

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

27

Page 28: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Si no necesitas la ejecución de CGI por algún motivo en concreto desacrivalos se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o ExecCGI.

Options -ExecCGI

No permitir que apache siga enlaces simbólicos

De nuevo se configura con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o FollowSymLinks.

Options -FollowSymLinks

Desactivar todas las opciones

Si deseas desactivar el uso de todas las opciones simplemente:

Options None

Si solamente deseas desactivar algunas en concreto, separalas con un espacio en las opciones de directiva:

Options -ExecCGI -FollowSymLinks -Indexes

Desactivar la ayuda para los archivos .htaccess

Esto esta ya hecho pero con la directiva AllowOverride. Cámbialo a none.

AllowOverride None

Otra opción interesante sería bloquear la descarga de todos los archivos que comienzen con .ht por ejemplo, se haría de la siguiente manera:

AccessFileName .httpdoverride

Order allow,deny Deny from all Satisfy All

Disminuye el valor máximo de tiempo de espera

Por el defecto el tiempo de espera es de 300 segundos. Puedes disminuirlo por seguridad para prevenir ataques de esta manera:

Timeout 45

Limitar el tamaño maximo de peticiones

Apache tiene varias directivas que permiten que limites el tamaño de una petición, esto puede ser muy útil.

Una buena manera de comenzar es con la directiva LimitRequestBody. Esta directiva esta

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

28

Page 29: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

fijada a ilimitado por defecto. Si estás permitiendo uploads de archivos que no sean mayores a 1MB, podrías fijar este ajuste a algo parecido a esto:

LimitRequestBody 1048576

Si no estás permitiendo uploads de archivos puedes fijarlo incluso a un tamaño más pequeño.

Algunos otras directivas a mirar son LimitRequestFields, LimitRequestFieldSize y LimitRequestLine.

Conclusión

Espero que estas recomendaciones os hayan sido útiles y recuerda que el uso que le tienes que dar depende en gran medida de los recursos que necesitas y de las caracteristicas de tu servidor, antes de hacer cualquier cambio si no estas seguro documéntate y utiliza este artículo unicamente como una referencía que te lleve a la solución más idonea.

Fuente en ingles: www.petefreitag.com

Artículo por Manu Gutierrez

Problema del open_basedir en servidores con Plesk

Estamos utilizando un nuevo servidor que tiene soporte para PHP 5. (Hasta el momento estábamos trabajando con PHP 4, pero ya era hora de cambiar). Como siempre, migrar a un nuevo servidor trae sus problemillas, pero afortunadamente con la ayuda del soporte técnico y con la documentación que se encuentra por Internet, se van arreglando.

En este artículo quiero explicar un error que hemos encontrado a la hora de configurar el dominio, que luego he visto que es común a muchas personas que tienen el panel de control Plesk como gestor de los recursos del servidor. Así pues voy a intentar expresar el problema y la solución que hemos encontrado.

El problema con open_basedir

Plesk tiene una configuración propia de la directiva de PHP open_basedir (que se define en el php.ini). Por la configuración de Plesk de open_basedir, sólo se pueden incluir archivos que cuelguen del directorio de publicación del dominio, es decir el directorio httpdocs del dominio.

El estado de open_basedir configurado por Plesk de manera predeterminada es el siguiente:

open_basedir = "/var/www/vhosts/eldominiotuyo.com/httpdocs:/tmp"

Por esa directiva no se pueden incluir archivos (con la función include o require de PHP) que estén en otras carpetas o subcarpetas que cuelguen de las marcadas en el open_basedir.

Nosotros tenemos algunas carpetas que contienen códigos fuera del directorio de publicación y no se estaban pudiendo incluir. Por eso nos estaba saliendo un error PHP como este:

open_basedir restriction in effect. File(./../directorio-fuera-httpdocs/archivo.php) is not within the allowed path(s):

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

29

Page 30: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

(/var/www/vhosts/midominio.com/httpdocs:/tmp)

Luego he visto que este problema lo tienen también usuarios que tengan códigos incluidos en frameworks para PHP como PEAR.

Solución al problema: configurar Plesk

La primera aproximación a la solución fue, como se pensará, modificar el archivo PHP.ini. De hecho, es lo que pensaba que lo arreglaría. Para cambiar la directiva open_basedir del php.ini. Pero los cambios, no surtieron efecto. También probé cambiando la directiva include_path, pero tampoco arregló nada.

Una vez consultado con el servicio técnico de nuestro proveedor, nos aconsejaron mover todas las carpetas al directorio de publicación, pero eso no es posible, por diversas razones. Pero nos dieron la pista que el problema estaba relacionado con Plesk.

Finalmente buscando por Pear y Pesk en Google apareció un artículo muy interesante en una página en ingles: HOWTO: Enable PEAR/Set open_basedir

En ese artículo está expresado paso a paso lo que se tiene que hacer, que voy a resumir en español, para los lectores de desarrolloweb.com a los que les pase lo mismo.

Existe un archivo que Plesk utiliza para configurar cada dominio, de modo que no conviene tocar el php.ini, porque eso afectaría a todo el servidor (y no siempre, porque algunas directivas, como open_basedir, luego las sobreescribe Plesk en otros archivos aparte y por mucho que se toquen en el php.ini no tendrá ningún efecto).

Hay un sitio donde se deben configurar los cambios del php.ini, específicos para cada dominio alojado. En mi caso ese archivo de configuración no estaba creado, por lo que he tenido que crearlo. El archivo de configuración específico para cada dominio está en el directorio

/var/www/vhosts/midominio.com/conf

Y el archivo que hay que crear allí, o modificar si es que ya existe es:

vhost.conf

Para que funcione, el contenido del archivo que he colocado es el siguiente:

<Directory "/var/www/vhosts/midominio.com/httpdocs">php_admin_value open_basedir "/var/www/vhosts/midominio.com/httpdocs:/tmp:/var/www/vhosts/midominio.com/directorio_includesphp_admin_value display_errors On</Directory>

Se trata simplemente de definir el open_basedir marcando todos los directorios donde hay archivos que se pretenden incluir desde PHP. (Con incluir un directorio te permite incluir archivos de todos los subdirectorios que haya dentro)

En el código anterior puedes ver que hemos modificado otro parámetro del PHP:

display_errors On (Esto es para poder ver los errores directamente en la página, en vez del log de errores, que es más cómodo por lo menos durante las pruebas y hasta migrar definitivamente el dominio)

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

30

Page 31: Instalar y Configurar Apache

Tu mejor ayuda para aprender a hacer webswww.desarrolloweb.com

Ahora bien, ya sabemos donde tocar para configurar directivas PHP del php.ini específicas para un dominio alojado. Podremos definir todas las directivas que se necesiten. Por ejemplo, otra cosa que se puede necesitar cambiar es anular el safe_mode para un dominio en concreto y eso se puede hacer desde este mismo archivo con la línea:

php_admin_value safe_mode Off

Para que los cambios tengan efecto aun tenemos que realizar un par de pasos.

Se trata primero de decirle a Plesk que actualice la configuración de un dominio. Esto se hace con el comando:

/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=midominio.com

Ahora también tendremos que reiniciar el apache, que se puede hacer con el comando:

/etc/init.d/httpd restart

O bien con el comando:

service httpd restart

Esto es todo, ahora debería funcionar. Esperamos que los lectores de DesarrolloWeb.com tengan la misma suerte. A nosotros nos ha ido bien!

Artículo por Miguel Angel Alvarez

Instalación y configuración de Apache: http://www.desarrolloweb.com/manuales/41/ © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.

31