Contenido

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.

Apache HTTP Server

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:

1
2
3
4
5
AuthUserFile /home/magmax/.htpasswd
AuthGroupFile /dev/null
AuthName MagMax page
AuthType Basic
require valid-user

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í:

1
2
3
4
5
$ htpasswd -c /home/magmax/.htpasswd magmax
New password:
Re-type new password:
Adding password for user magmax
$

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:

1
2
$ cat file
magmax:$apr1$lqzJHMvm$XPYqylsRK7q2gmThL..gy1

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:

1
amigos: magmax tiouron pollo

Y ahora hay que realizar dos pequeñas modificaciones al fichero de configuración:

1
2
3
4
5
AuthUserFile /home/magmax/.htpasswd
AuthGroupFile /home/magmax/.htgroups
AuthName MagMax page
AuthType Basic
require group amigos

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:

1
RewriteRule ^[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 [QSA,L,NC]

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:

1
rewrite ^/[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 last;

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.