Controlando el acceso en apache

Puede suceder que existan partes de nuestro sitio web que no nos interese hacer accesibles; por ejemplo, aquellos directorios donde tengamos scripts de administración de bases de datos, tipo phpmyadmin, o gestores de correo

Apache nos ofrece varios métodos para conseguir un nivel de seguridad de acceso básico. Aquí nos referiremos al control de acceso con la directiva AuthType, que tiene la ventaja de la sencillez, ya que se establece en el archivo general de configuracion del server, httpd.conf. Evidentemente solo podremos utilizar este sistema si tenemos pleno acceso a los archivos de configuración del servidor, lo que normalmente solo sucederá si nosotros somos el ISP, o si se trata de nuestro servidor casero de pruebas..

La directiva Authtype permite determinar el tipo de autentificación de usuario. Admite dos valores, basic y digest. Aqui solo veremos la primera, ya que digest es todavia experimental.

Junto a esta directiva debemos emplear las directivas AuthName y Require, asi como AuthUserFile o AuthGroupFile

Veamos un ejemplo:

<Directory htdocs/miadminsql>
AuthType Basic
AuthName privado
AuthUserFile "C:/Archivos de programa/Apache Group/Apache2/bin/contr"
Require valid-user
</Directory>

Mediante esta instrucción (que debemos incluir en el httpd.conf de apache) indicamos en la primera línea que se trata de un contenedor cuyas reglas se van a aplicar al directorio htdocs/miadminsql (podemos fijar rutas absolutas o relativas)

En la segunda línea indicamos que queremos hacer uso del módulo Authtype, y que el método de control de acceso será basic

AuthName privado sirve sencillamente para indicar el rótulo que aparecerá en la ventana de dialogo donde el usuario ha de introducir su identidad y contraseña. Podemos poner cualquier cosa, pero si contiene espacios, debemos entrecomillar la frase. Puedes ver en la imagen de abajo como aparece.

AuthUserFile "C:/Archivos de programa/Apache Group/Apache2/bin/contr" indica el nombre y la ruta del archivo que contiene la lista de usuarios que pueden acceder al directorio, y sus contraseñas. Sobre como crear este archivo trataremos a continuación

Require valid-user es la directiva que indica el rango de usuarios que pueden acceder al directorio. El valor aqui utilizado, valid-user, indica que podrá acceder cualquier usuario válido, es decir, cualquiera que esté incluido en el AuthUserFile.

Con esto hemos terminado con httpd.conf. Ahora necesitamos generar el archivo que contiene las identidades y contraseñas. Como son datos encriptados, no podemos editarlo directamente; lo generamos con un programa que viene incluido en la distribución apache: htpasswd.exe, que encontraremos en el directorio /bin/ de apache.

Se trata de un programa que debemos usar en linea de comandos. Sus opciones mas interesantes son:

-c Crea un nuevo archivo. Si ya existía con el mismo nombre, lo reescribe.

-b batch mode. Nos permite introducir la contraseña desde la linea de comandos (en lugar de hacer un prompt para que la introduzcamos). La ventaja de usar -b es la comodidad de introducir los datos seguidos; la desventaja, que la contraseña es visible durante su introducción.

nombrearchivo, el nombre del archivo que contiene los datos
nombreusuario la identidad del usuario
passw la contraseña.

Un ejemplo:

C:Archiv...Apache2bin>htpasswd -bc contr admin blah
Automatically using MD5 format.
Adding password for user admin

C:Archiv... Apache2bin>

En la primera linea ejecutamos htpasswd con los modificadores -b y -c, es decir, batch mode, y nuevo archivo; indicamos que el archivo se llamará contr, el usuario admin y la contraseña blah. El resto es la respuesta confirmando del programa.

Otro ejemplo, ahora actualizamos contr añadiendo otro usuario. Como no empleamos modificadores, no se sobreescribe el archivo, sino que se adiciona el nuevo usuario. No introducimos la contraseña, ya que el sistema nos lo pide luego:

C:Archivos de programaApache GroupApache2bin>htpasswd contr admin2
Automatically using MD5 format.
New password: ********
Re-type new password: ********
Adding password for user admin2

C:Archivos de programaApache GroupApache2bin>

Como ves, en el primer paso hemos creado el archivo e introducido un usuario, y en el segundo hemos actualizado el archivo añadiendo un segundo usuario.

Para finalizar un consejo importante de seguridad. El archivo AuthUserFile debes guardarlo fuera de htdocs, es decir, fuera de la carpeta donde se alojan las páginas, para evitar que pueda ser descargado por algun curioso

Si editas este archivo (en este caso, lo encontrariamos en la carpeta /apache2/bin/) verás que contiene una linea por cada usuario. La linea comienza con el nombre de usuario, y el resto está encriptado