Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > sysadmin > Restringiendo accesos web con Apache

Introducción

Los archivos htaccess permiten controlar hasta cierto punto el acceso a zonas de un web ó incluso a todo él, estando incluídos dentro del árbol de directorios de páginas del servidor web. Es por eso por lo que también se les llama archivos de configuración distribuida.

Un archivo htaccess protege el directorio en el que se encuentra y todos los que hay por debajo de él. Para cambiar esta herencia de restricciones se pueden emplear otros archivos htaccess en niveles inferiores.

Puede emplearse para tareas como:

  1. Proteger accesos mediante contraseñas, bien a directorios, bien a archivos concretos.
  2. Desproteger zonas para permitir el acceso (como páginas personalizadas de error)
  3. Habilitar SSI
  4. Denegar acceso por origen de la conexión (dirección IP).
  5. Cambiar la página índice predeterminada
  6. Efectuar redirecciones temporales ó permanentes
  7. Otras acciones más exóticas:
    1. Prevenir el robo de ancho de banda (hotlinking) mediante el enlace directo a imágenes (mod rewrite).
    2. Transformar los URL para corregirlas ó normalizarlas (también mediante mod_rewrite).

Configuración en el servidor

Para poder usar estos archivos en toda su extensión es necesario indicar a Apache que tal posibilidad existe, ya que es posible que el administrador del sitio prefiera tener él todo el control sobre permisos de acceso.

AccessFileName

Esta directiva permite cambiar el nombre del archivo de configuración, cuyo valor predeterminado es .htaccess por otro distinto.

Dada una configuración como esta:

 AccessFileName .acl

cuando se solicita acceso a un archivo como /usr/local/web/index.html (después de traducir URL a ruta física, claro), el servidor web buscará y leerá antes los siguientes archivos:

  1. /.acl
  2. /usr/.acl
  3. /usr/local/.acl
  4. /usr/local/web/.acl

siempre que esta característica no esté deshabilitada por completo con algo como


AllowOverride

Esta directiva es la que se emplea para determinar qué opciones dentro de un archivo .htaccess pueden contradecir a las opciones generales. Sólo puede emplearse (en Apache2) en una sección Directory sin posibilidad de equívocos respecto a la ruta (vamos, que sin expresiones regulares que valgan).

Los posibles parámetros que puede tomar son:

  • None: los archivos .htaccess son ignorados por completo.
  • All: todas las directivas posibles están permitidas.
  • Grupo de directivas, lo que quiere decir que permite según grupo lo siguiente:
    • AuthConfig: directivas autorizativas como AuthName y Require
    • FileInfo: directivas que controlan el tipo de archivos como ErrorDocument, SetHandler, DefaultType and las relacionadas con mod_mime.
    • Indexes: control de indexación de contenidos como DirectoryIndex, AddType y ReadmeName.
    • Limit: control de acceso según nodos de red (Allow, Deny, ...)
    • Options: Características específicas de los directorios entre las que se cuentan:
      • ExecCGI
      • FollowSymLinks
      • Includes
      • SymLinksIfOwnerMatch
      • MultiViews

Mezclando directivas

El contenido de un archivo htaccess puede contradecir las directivas establecidas en la configuración del servidor para el directorio en cuestión ó en un archivo htaccess de un nivel superior, puesto que hemos visto que se leen por orden.

¿ Qué podemos hacer cuando queremos tocar algo pero no todo ? Es posible utilizar modificadores delante de las directivas como caracteres más (+) y menos (-) para habilitar y deshabilitar respectivamente.

En el siguiente ejemplo vemos cómo desactivar la ejecución de programas desde el directorio raíz:

    1 <Directory />
    2 Allowoverride All
    3 </Directory>
    4 
    5 <Location />
    6 Options +IncludesNoExec -ExecCGI
    7 </Location>

Usos concretos de htaccess

Proteger zonas con contraseñas

Es tan fácil como incluir ésto en un archivo .htaccess:

    1 AuthType        Basic
    2 AuthName        "Password Required"
    3 AuthUserFile    /etc/apache/passwd/users
    4 AuthGroupFile   /etc/apache/passwd/groups
    5 Require Group   admins

y en este caso sólo se permite acceso a los usuarios dentro del grupo de administradores. Se incluye el archivo de usuarios porque es la primera comprobación que debe hacer, para proceder después a mirar si ese usuario está dentro del grupo de administradores.

Por supuesto, existe un tutorial completo que explica muchos más casos y desvela todas las incógnitas al respecto ;-)

Pero por si acaso, voy a incluir aquí una referencia de algunas claúsulas que siempre hecho de menos tener a mano:

Require

Esta claúsula indica qué usuarios correctamente identificados pueden acceder al recurso.

Los parámetros son:

  • Require user nombre-de-usuario [nombre-de-usuario ...]
  • Require group nombre-de-grupo [nombre-de-grupo ...]
  • Require valid-user

Satisfy

Para despejar dudas de una vez por todas: esta claúsula efectúa una operación OR ó AND sobre los dos sistemas de control de recursos Allow y Require y no, como se confunde a veces, entre dos ó más claúsulas require.

  • Satisfy All

    Indica que deben cumplirse las condiciones de la claúsula Allow y las de la claúsula Require.

  • Satisfy Any

    Indica que basta con que se cumpla una de las dos.

Problemas

La documentación de Apache a este respecto menciona que

Enlaces