Apache

Teoría sobre Apache

Apache

Ficheros de configuración Apache

Linux (Debian)

El fichero principal de configuración de Apache es /etc/apache2/apache2.conf en él se incluyen los demás archivos de configuración:

  • /etc/apache2/ports.conf Configuración de los puertos de escucha

  • /etc/apache2/sites-available/default Configuración del servidor virtual por defecto

Windows

La configuración del servidor se encuentra en el fichero C:Program FilesApache Software FoundationApache2.2confhttpd.conf

Directivas para Apache

Listen

Esta directiva indica de qué puertos e interfaces IP aceptará peticiones. Por defecto se utiliza el puerto 80 en todas las interfaces.

Para hacer que el servidor acepte conexiones en los puertos 80 y 8080

Listen 80
Listen 8080

Para atender dos direcciones IP distintas, con distintos puertos, se utilizará:

Listen 192.168.255.5:80
Listen 192.168.255.8:8080

ServerRoot

Especifica la ubicación del directorio raíz donde se encuentra instalado Apache. Esta directiva no debería cambiar a no ser que se mueva la carpeta de instalación de apache a otro directorio.

Include

Permite que se incluyan otros archivos de configuración en el tiempo de ejecución.

La ruta a estos archivos de configuración pueden ser absolutas o relativas con respecto al directorio indicado en ServerRoot.

DocumentRoot

Indica el directorio desde el que Apache va a servir los archivos. El servidor añade la ruta indicada en la URL a este directorio.

Por ejemplo para un valor

DocumentRoot /var/www

Si la URL solicitada es http://www.myservidor.com/prueba/index.html Apache servirá el fichero index.html que se encuentra en /var/www/prueba

ErrorLog

Especifica la ubicación del fichero que contiene el registro de errores, por defecto en la carpeta logs.

DirectoryIndex

Especifica el fichero por defecto que buscará en cada directorio, en caso de que no se especifique ninguno. Por defecto es index.html.

Pueden indicarse varios ficheros. El orden con el que se especifica el nombre de fichero determinará la prioridad a la hora de decidir qué fichero es el que se muestra.

DirectoryIndex index.html indice.html index.php

ErrorDocument

Explica qué ha de hacerse en caso de que se produzca un error. Si no se indica nada, se mostrará un mensaje por defecto. Si se indica, podrá mostrarse un texto personalizado o una página web personalizada dentro o fuera de nuestro servidor.

ErrorDocument 404 “Este fichero no está”

ErrorDocument 404 errores/error404.html

ErrorDocument 404 http://www.otroservidor.com/error404externo.html

Alias

Permite la definición de directorios virtuales, un directorio virtual es un directorio que se encuentra en un directorio distinto del que se indica en la URL. El directorio virtual no tiene por qué encontrarse dentro de árbol de directorios que se crea a partir de DocumentRoot, sino que se puede encontrar en cualquier otra ubicación.

Alias nombreFicticio ubicaciónReal

Ejemplo:

Alias /ciclos/daw /home/sapoclay/daw

Redirect

La directiva Redirect permite indicar al cliente que un documento ha sido modificado o actualizado. Tiene preferencia con respecto a la directiva Alias, independientemente del orden en el que se sitúen en el fichero de configuración.

Redirect /service  http://foo2.example.com/service

Options

Controla qué características del servidor están disponibles para un determinado directorio. Las características se hacen disponibles si se listan y no disponibles si se preceden por un signo -.

Indexes

Si se solicita una URL que apunta a un directorio y en dicho directorio no se encuentra ninguno de los ficheros indicados por DirectoryIndex, se mostrará un listado de los archivos contenidos en ese directorio.

Más información sobre Indexes y FollowSymLinks.

Directivas de bloque en Apache

Directory

Las directivas que se encuentren dentro de una etiqueta <Directory> solo se aplican a ese directorio.

<Directory /var/www/ciclos>
#Aquí las directivas
</Directory>

Fuentes consultadas:

Recuerda

Todos los directorios que va a servir Apache deben tener permisos de lectura y ejecución para todos los usuarios y todos los archivos que sirve deben tener permiso de lectura.

Los permisos de archivos y directorios se cambian con el comando chmod.

Módulos en Apache

El diseño de Apache es modular. El núcleo de Apache (core) provee la funcionalidad básica de un servidor web, pero existen muchos módulos adicionales que permiten añadir funciones extra.

Cada módulo tiene un conjunto de directivas específicas que permiten su gestión.

La adición de esas funciones puede realizarse de dos formas:

  1. Estáticamente: en el momento de compilar el ejecutable del servidor, se indican qué funciones adicionales se desean incorporar con el núcleo.

  2. Dinámicamente: en el momento de arrancar el servidor, se cargan junto a él aquellos módulos que implementen la configuración deseada, gestionandose los módulos a cargar en la configuración del servidor. Estos módulos que pueden cargarse dinámicamente se denominan objetos dinámicos compartidos o módulos DSO (Dynamic Shared Object).

Ubuntu

Windows

Consultar módulos estáticossudo apache2ctl -lhttpd -l
“C:Program Files (x86)Apache Software FoundationApache2.2binhttpd.exe” -l
Consultar módulos dinámicosListar los contenidos del directorio
/etc/apache2/mods-enabled
Consultando las directivas LoadModule del fichero de configuración de Apache (C:Program Files (x86)Apache Software FoundationApache2.2confhttpd.conf)
Consultar módulos dinámicos disponiblesYa instalados: Listar el directorio /usr/lib/apache2/modules
No instalados: sudo apt-cache search libapache2-mod (se instalan como cualquier otro paquete en Ubuntu)
Consultar el directorio C:Program Files (x86)Apache Software FoundationApache2.2modules
Habilitar módulo dinámicamentesudo a2enmod usedirEn el fichero httpd.conf, eliminar el comentario de las directivas LoadModule e Include correspondientes a ese módulo
Deshabilitar módulo dinámicamente sudo a2dismod usedir En el fichero httpd.conf, comentar las directivas LoadModule e Include correspondientes a ese módulo
Inserción de directivas correspondientes al móduloEn el fichero de extensión .conf correspondiente al módulo y que está en el directorio /etc/apache2/mods-available
Dentro de las etiquetas <IfModule></IfModule>
En el fichero de extensión .conf correspondiente al módulo que se encuentra en el directorio C:Program Files(x86)Apache Software FoundationApache2.2confextra

Módulo userdir

Userdir es un modulo de Apache que hace posible que todos los usuarios con acceso a un servidor tengan una carpeta propia en la cual puedan alojar sus páginas y archivos.

Ubuntu

Windows

Fichero de configuración/etc/apache2/mods-available/userdir.confC:Program Files(x86)Apache Software FoundationApache2.2confextrahttpd-userdir.conf
Carpeta por defecto/home/usuario/public_htmlC:UsersusuarioMy DocumentsMy Website (ojo, en la máquina virtual de Windows Server 2008, no es My Documents, sino Documents por lo que hay que cambiarlo en el fichero de configuración)

Para acceder a estas páginas desde el cliente, ha de añadirse a la IP o URL ~usuario. Por ejemplo:

http://192.168.0.4/~marta

Fuentes consultadas

Control de acceso por IP

Apache utiliza las directivas Allow y Deny para permitir o denegar el contro de acceso. Además, la directiva Order también es importante a la hora de indicar el orden en el que se evalúan estas directivas.

Directiva Order

Controla el orden en el que son evaluadas las directivas Allow y Deny.

Ejemplo:

Order Allow,Deny

Indica que primero se evaluarán las directivas Allow y luego las Deny.

OJO: El argumento de la directiva Order NO LLEVA ESPACIOS

Directiva Allow

Controla qué máquinas pueden acceder a un área determinada del servidor. Sus valores pueden ser all (todos), una dirección IP o un rango de ellas, un dominio o subdominio u otros parámetros controlados a través de una variable de entorno.

Ejemplo:

Allow from all

Allow from 192.168.0.15

Directiva Deny

Controla qué máquinas no pueden acceder a un área determinada del servidor. Sus valores pueden ser all (todos), una dirección IP o un rango de ellas, un dominio o subdominio u otros parámetros controlados a través de una variable de entorno.

Ejemplo:

Deny from all

Deny from 192.168.0.15

Ejemplos de combinación de directivas

Acceso para todas las máquinas salvo aquella cuya IP es 192.168.0.15

Order Allow,Deny

Allow from all

Deny from 192.168.0.15

Únicamente puede acceder la máquina cuya IP es 192.168.0.15

Order Deny,Allow

Deny from all

Allow from 192.168.0.15

Únicamente puede acceder las máquinas cuyas IP son 192.168.1.104 y 192.168.1.205

Order Deny,Allow

Deny from all

Allow from 192.168.1.104 192.168.1.205

Únicamente pueden acceder las IP pertenecientes a la red 10.1.0.0/16

Order Deny,Allow

Deny from all

Allow from 10.1

Lo mismo pero con otra notación

Order Deny,Allow

Deny from all

Allow from 10.1.0.0/255.255.0.0

Lo mismo pero con otra notación

Order Deny,Allow

Deny from all

Allow from 10.1.0.0/16

Únicamente pueden acceder las IP pertenecientes a las redes 10.0.0.0/8, 172.20.0.0/16 o 192.168.2.0/24

Order Deny,Allow

Deny from all

Allow from 10 172.20 192.168.2

Control de acceso por usuarios y grupos

Para configurar el servidor Apache para que sea capaz de autenticar 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

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.

El control de acceso puede hacerse para todos los ficheros del sitio web o para algunos ficheros (mediante la directiva <Files>) o directorios (mediante la directiva <Directory>).

Autenticación Basic y Digest

La diferencia entre ambas es que en el modo de autenticación Basic, las contraseñas se envían en claro, mientras que en Digest las contraseñas se envían cifradas.

Creación de usuarios

Para crear el fichero utilizamos el comando htpasswd (si la autenticación es Basic) o htdigest (si la autenticación es Digest). La primera vez que lo utilicemos tenemos que ponerle la opción -c, para que cree el archivo. Creariamos el usuario de la siguiente manera:

htpasswd -c /etc/apache2/contr_basic sapoclay

New password:

Re-type new password:

Para htdigest tenemos que indicar, además, el dominio al que pertenece el usuario:

htdigest -c /etc/apache2/contr_digest profes sapoclay

New password:

Re-type new password:

Creación de grupos

Se crea un fichero con un grupo por línea con la siguiente sintaxis:

nombreGrupo: usuario1 usuario2 usuario3 …

Directivas de restricción de acceso

Directiva AuthType

Indicaremos el tipo de autenticación Basic o Digest

Directiva AuthName

Indica el área de influencia de la autenticación. La cadena indicada en esta directiva es la que aparecerá en el cuadro de diálogo que se muestra al usuario. En autenticación Digest, indica el dominio al que ha de pertenecer el usuario.

Directiva AuthUserFile

Indica la ruta al fichero en el que se almacenan los usuarios y contraseñas.

Directiva AuthGroupFile

Indica la ruta al fichero en el que se almacenan los grupos.

Directiva Require

Indica qué usuarios o grupos tienen acceso al área. Si se indica valid-user significa que se permitirá el acceso a cualquiera de los usuarios que aparezcan en el fichero.

Require user profesor1 profesor2

Require group profes

Ejemplo

AuthType basic
AuthName “Zona privada entreunosyceros”
AuthUserFile “/etc/apache2/auth_basic”
Require valid-user

Directiva Satisfy

Si se utilizan para el control de acceso tanto las directivas Allow como Require, la directiva Satisfy nos indica si han de cumplirse todas las condiciones (All) o con una es suficiente (Any).

Por ejemplo, si queremos que desde nuestra aula el acceso a nuestro sitio web sea libre, pero para fuera de ella sea necesario un usuario válido, podremos escribir:

Require valid-user

Order deny,allow

Deny from all

Allow from 192.168.4

Satisfy Any

Otros factores de autenticación

A partir de la versión 2.4 de Apache la funcionalidad de la directiva Require se ha ampliado, entre otras cosas, permite especificar rangos de IPs autorizadas que antes se implementaban mediante la directiva Allow:

Require ip 192.168.205

Por otra parte, se han definido las directivas RequireAll y RequireAny para componer requisitos de acceso.

Fuentes consultadas

Los ficheros .htaccess son ficheros de configuración distribuida. Su utilidad es incluir directivas que afecten únicamente al directorio en el que están situados y, por extensión, a sus subdirectorios.

Se recomienda evitar el uso de estos ficheros siempre que sea posible, ya que la búsqueda de los mismos a través de los directorios ralentiza mucho el servidor Apache y puede constituir un agujero de seguridad. Es decir, siempre que la persona que va a configurar dicho directorio tenga acceso a los ficheros de configuración globales, debe situar en estos las directivas relativas a ese directorio (dentro de un bloque Directory).

Hay situaciones, por ejemplo aquellas en las que varios usuarios utilizan un mismo servidor Apache para sus sitios web, en las que dichos usuarios no tienen acceso a los ficheros globales de configuración, siendo la única solución el uso de ficheros .htaccess.

Directiva AccessFileName

Se utiliza para modificar el nombre de los ficheros de configuración distribuidos (por defecto, .htaccess). Ejemplo:

AccessFileName .config

Esto haría que la configuración de un directorio se situase en ficheros llamados .config

Directiva AllowOverride

Indica qué directivas declaradas en los ficheros .htaccess deben sobreescribir a las declaradas en los ficheros de configuración globales. Sus valores pueden ser:

  • None: Los ficheros .htaccess son ignorados completamente

  • All: Todas las directivas declaradas en los .htaccess sobreescriben a las declaradas en los ficheros globales

  • AuthConfig: Permite el uso de directivas de autorización

  • Indexes: Permite el uso de directivas que controlan la indexación de directorios

  • Limit: Permite el uso de directivas de control de acceso

  • Options: Permite directivas controlando características específicas del directorio

  • FileInfo: Permite el uso de directivas que controlan los tipos de documentos

Más información en la documentación oficial.

Contenedores de secciones de configuración

En todos ellos pueden utilizarse comodines (el ? se corresponde como mucho con un carácter y el * con cero, uno o varios) o expresiones regulares, para lo que se precisa el uso del carácter ~ antes de la expresión. Para expresiones regulares, sin embargo, se prefiere el uso de las directivas DirectoryMatch, FilesMatch y LocationMatch.

Directory

Limita el ámbito de aplicación de las directivas a un directorio o directorios.

Files

Limita el ámbito de aplicación de las directivas a un fichero o ficheros. Pueden ser usados dentro de los ficheros .htaccess.

<Files .ht*>
Order deny,allow
Deny from all
</Files>

Pueden aparecer dentro de las secciones Directory.

Location

Limita el ámbito de aplicación de las directivas a una o varias URL.

Apuntes gracias a Marta

Deja un comentario