Apache: Autenticación básica
Este artículo va a tratar de responder a una pregunta que me hicieron hace poco. Como bien sabéis, estoy dispuesto a responder vuestras preguntas, aunque puedo tardar un poco.
Por eso en esta ocasión veremos un tema un poco anticuado pero igualmente útil: cómo evitar el acceso a un directorio mediante una contraseña.
Hay dos soluciones básicas: la primera, mediante un archivo .htaccess
. La segunda, modificando la forma de acceso.
Autenticación
.htaccess
En el directorio que queráis restringir el acceso, creáis un archivo llamado .htaccess
. Este archivo contendrá algo similar a lo siguiente:
|
|
De esta manera le decimos a apache que debe pedir una contraseña, mostrando el
mensaje indicado en AuthName
, y que el usuario debe coincidir con alguno de
los que se encuentran en el fichero indicado por AuthUserFile
.
Ahora es cuando se crea el archivo indicado por AuthUserFile
, que sería algo así:
|
|
Tened cuidado con la opción -c
, ya que crea el archivo, eliminando lo que hubiera anteriormente. Si queréis añadir más usuarios sólo tenéis que quitar esa opción. El resultado será un fichero como el que sigue:
|
|
htgroups
Es posible que queráis tener un archivo con todas las contraseñas y limitar el
acceso a un directorio sólo para una parte de estos usuarios. Para ello podéis
usar la opción AuthGroupFile
que en el ejemplo puse a /dev/null
.
El formato de este archivo sería el que sigue:
|
|
Y ahora hay que realizar dos pequeñas modificaciones al fichero de configuración:
|
|
Creo que no requiere más explicaciones.
Seguridad
Por cuestiones de seguridad es mejor que los archivos .htpasswd
y .htgroups
(al menos el primero) estén en algún lugar no compartido, es decir, fuera de nuestra web. En teoría, al empezar por un punto no son accesibles, pero si están fuera de nuestra web, seguro que no son accesibles XD
mod_rewrite
mod_rewrite
es un plugin para apache. En este caso tendréis que hacer uso de expresiones regulares, lo que puede complicar el temilla y… fallar. Como dijo Jamie Zawinski:
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
Hay gente que, cuando se enfrenta a un problema, piensa “Ya sé, usaré expresiones regulares”. Ahora tienen dos problemas.
De todas maneras, es una opción a evaluar:
|
|
Si os sentís cómodos con algo así, os invito a que miréis la documentación de rewrite para ver qué significa cada cosa.
He decidido comentar esto porque si usáis nginx , un servidor web que está bastante de moda hoy día, no tendréis el módulo mod_rewrite
y no podréis usar la primera opción. Claro, que la segunda tampoco porque las expresiones regulares son diferentes:
|
|
Y esto es algo que os cuento, pero de lo que no tengo ni idea. Tan sólo lo he copiado para dar una visión más completa del tema. Yo siempre utilizo un archivo .htaccess
Más información
No hay nada que no haya sacado de Google, en concreto de aquí.
La parte del rewrite la he sacado de serverfault.
Espero que os sea de alguna utilidad.