Como proteger nuestros sitios usando .htpasswd (+Ejemplos)

Tomado de DesdeLinux.net

Por muchos motivos puede resultar muy útil tener controlado el acceso a determinados directorios de un servidor web o simplemente a contenidos de nuestra página o blog mediante un servicio de autenticación basado en usuario y contraseña. Hablo de algo como la típica ventana que nos aparece cuando deseamos entrar en una web con servicios restringidos.

Existen varias formas de generar ventanas con formulario de autenticación pero una solución interesante a nivel de servidor la brinda htpasswd. Es una utilidad que tiene por función almacenar contraseñas de forma cifrada para ser utilizadas por Apache en servicios de autenticación. Su uso nos permitiría mostrar determinados directorios o archivos vía http solo a usuarios identificados y sin que necesariamente estén a libre disposición de todo el mundo.

Entiendo que no es un tema demasiado llamativo pero si que puede ser de utilidad a algunos. Con tal de no matarlos de aburrimiento me ayudaré de imágenes para que sea más didáctico.

Consideraciones previas: Utilizaré Ubuntu Server 12.04.1 y Apache 2.2.22 en un entorno controlado.

Comenzamos.

Como algunos ya deben saber, por defecto los sitios disponibles de Apache se almacenan en el directorio /var/www/ y para este ejemplo crearé un directorio con una plantilla HTML e intentaré blindarlo con .htpasswd.

El directorio a proteger es /var/www/ejemplo/ donde he colocado la siguiente página.

En el servidor

En el navegador

1. Vamos a crear el .htpasswd.

El lugar donde estará ubicado es de relevante importancia y colocarlo fuera de un directorio público puede ser más que recomendable. En mi caso lo ubicaré en mi carpeta de personal (que no es un directorio público de Apache) y con el nombre .htpasswd (a priori tampoco hace falta llamarlo de esa forma, pero el que esté oculto siempre es bueno).

Para los usuarios nuevos en Linux. Para ocultar un directorio o archivo solo es necesario que comience su nombre con un punto (.).

Con el comando siguiente creo el archivo .htpasswd para un usuario web que he denominado como: “Luke”.

# htpasswd -c /home/krel/.htpasswd Luke

Pedirá que le suministremos la contraseña dos veces, en mi caso he puesto “skywalker” (sin comillas). En un entorno no controlados debemos establecer contraseñas más robustas. El cifrado por defecto en Linux es MD5 pero en Unix es una implementación estándar de crypt() y para contraseñas con menos de 8 caracteres puede ser vulnerable. Ahora me surge la duda de si en BSD es igual.

El comando tiene esta estructura:

  • -c → para crear el archivo
  • /home/krel/.htpasswd → ruta absoluta del archivo.
  • Luke → el nombre del usuario (puede ser el que queráis)

De igual forma no obligo a nadie a utilizar la terminal cuando existen servicios en Internet para ello:
http://www.web2generators.com/apache/htpasswd_generator

http://www.htaccesstools.com/htpasswd-generator/

El resultado los copiamos en un archivo de texto y con el nombre .htpasswd si así lo desean. Con respecto a este método no dejen de leer lo que comento en el siguiente párrafo.

En nuestro caso veremos el archivo se ha generado donde los esperábamos /home/krel/.htpasswd. En la imagen he resaltado que con este método el archivo pertenece al grupo y usuario de apache, que en Ubuntu se le llama www-data. Esto es importante porque si hemos generado de alguna otra forma el .htpasswd hemos de cercioramos que tenga permisos 644.

Bien, ahora veremos como son sus tripas:

Como pueden ver, está el usuario (Luke) pero la contraseña está cifrada.

De esta forma ya hemos creado y diseñado .htpasswd para el usuario Luke, al final no es más que un contenedor para la contraseña. “Todo con un comando” sería un buen eslogan.

2. Configurar Apache de forma que lo utilice y permita ese servicio en el sitio.

# nano /etc/apache2/sites-available/default

Si tenéis varios host deberán trabajar sobre cada uno de ellos, en mi caso que solo tengo el que viene por defecto. No olviden que siempre es bueno hacer un backup de ese archivo.

Ese archivo tiene la estructura por defecto:

<VirtualHost *:80>

ServerAdmin webmaster@localhost

………………

………………

</VirtualHost>

Precisamente dentro de las encabezamientos de Virtualhost es donde se especificará la utilización de .htpasswd para acceder a determinado directorio. Lo hacemos tal como aparece la imagen a continuación y adecuada a nuestro ejemplo:

Bien. Explico las líneas:

<Directory “/var/www/ejemplo/”>

Hay que poner el directorio a proteger.

AuthType Basic

Es el tipo de negociado de usuario y contraseña con el navegador, en este caso es Basic, sin cifrar.

Existe otro tipo de negociado: Digest, este si cifra el usuario y la contraseña sin embargo la última palabra la tiene el navegador en cuanto a si soporta dicho servicio. Digest se puede decir que es una implementación un poco más robusta ante sniffers. Les invito a profundizar en esto.

AuthName “Tocar la puerta antes de entrar”.

Es mensaje que le saldrá al usuario en el navegador con el formulario de login y puede ser el que queramos.

AuthUserFile /var/www/.pass/.htpasswd

Ruta el archivo .htpasswd. Por esa razón es que digo que ni siquiera es necesario nombrarlo .htpasswd, simplemente poniendo la ruta funcionaría igual.

Require valid-user

Esa línea está diseñada para múltiples usuarios con contraseñas individualizadas. En caso que sea un único usuario puede resumirse como la siguiente variante.

Require user el_que_sea

En mi mi ejemplo podría ser: Require user Luke

Y finalmente encerramos todo con </Directory>

Reiniciamos apache:

# service apache2 restart

Probemos.

Si no nos autenticamos correctamente nos saldrá un Error 401.

En el lado opuesto, si ponemos el usuario correcto y la contraseña nos dejaría pasar sin mayor inconvenientes.

Tips adicionales.

  • Para añadir más usuarios a un archivo htpasswd ya creado pueden usar este comando

htpasswd -mb /home/krel/.htpasswd Usuario Contraseña

Si tenéis establecido “Require user” y no “Require valid-user” deberéis añadir el nuevo usuario seguido del anterior y separado por un espacio. Ejemplo:

Require user Luke Anakin

  • Utilizar grupos de usuarios

Si en lugar de usuario individuales preferimos o necesitamos trabajar con grupos en la siguiente web lo explican con mucho detalle y es un excelente artículo.
http://www.juanfelipe.net/node/23

  • También podemos fijar otro tipo de cifrado, por ejemplo: SHA

htpasswd -sb /home/krel/.htpasswd Usuario Contraseña

Aquí dejo una imagen de como se reflejaría en el .htpasswd el registro de una contraseña SHA. En ambos era “skywalker”.

Más información.

htpasswd – -help

Si quieren profundizar más en este tema siempre es bueno RTFM!!!
http://httpd.apache.org/docs/2.0/es/howto/auth.html

http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

También me ha resultado curioso este script en PHP de la página de la Universidad de Granada para crear un generador de htaccess y htpasswd. No lo he podido poner en práctica pero les invito a a que “curioseen con la inteligencia”.

http://csirc.ugr.es/informatica/ServiciosCorporativos/PaginaWeb/AccesoRestringido.html

La plantilla HTML la obtuve desde esta página por si alguién le interesa.
http://www.templatemo.com/

Espero que le haya gustado esta presentación de htpasswd.

¿Te resultó interesante? Compártelo ...



elMor3no

Publicado por elMor3no

http://gutl.jovenclub.cu » Forma parte de GUTL desde el 6 diciembre, 2011. Usuario de GNU/Linux desde hace varios años. Coordinador Nacional de GUTL.

Este artículo tiene un comentario

  1. Gracias por postear este contenido, siempre es bueno profundizar en asuntos de seguridad y más en el de las web cuando tanto se utilizan hoy, saludos……

Los comentarios están cerrados.