Como proteger nuestros sitios usando .htpasswd +Ejemplos

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ยป.

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.


Deja tu comentario

Tu direcciรณn de correo electrรณnico no serรก publicada. Los campos obligatorios estรกn marcados con *

*

*

  1. Responsable de los datos: Miguel รngel Gatรณn
  2. Finalidad de los datos: Controlar el SPAM, gestiรณn de comentarios.
  3. Legitimaciรณn: Tu consentimiento
  4. Comunicaciรณn de los datos: No se comunicarรกn los datos a terceros salvo por obligaciรณn legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu informaciรณn.

      krel dijo

    Ahora leyendo nuevamente el post me he dado cuenta que he cometido un pequeรฑo gazapo. Cuando explico las lineas en la configuraciรณn del sitio, en AuthUserFile puse /var/www/.pass/.htpasswd cuando deberรญa ser:
    /home/krel/.htpasswd.

    En la imagen estรก bien pero ahรญ se me escapรณ, es que tenรญa hecho anteriormente hecho el artรญculo con esa ruta, pero a รบltima hora lo cambiรฉ y al parecer eso se me pasรณ corregirlo.

    Pido disculpas de antemano.

      Fernando dijo

    Alguna alternativa para nautilus??

         krel dijo

      Lo que preguntas creo que va por otro lado pero igual te contesto.
      Creo con Cryptkeeper te valdrรญa para proteger directorios y cosas asรญ.

      Si te soy sincero si algo que odio de gnome es nautilus. Dolphin (KDE) es mucho mรกs potente precisamente para estas cosas de proteger, cifrar con gpg, etc …

      DMoZ dijo

    Krel, gracias por los tutoriales tan completos que traes por acรก y sobre todo por ser temas no tan habituales …

    Saludos !!! …

      JuanCarlos dijo

    Hola todo salio bien pero.. cuando cierro la pestaรฑa del chrome y abro otra, escribo la direcciรณn y no me solicita la clave…

      amiguete dijo

    quien dijo que no era llamativo.
    era justo lo que buscaba, y mejor explicado imposible
    muchas gracias.
    un saludo

      basco7 dijo

    hola, te agradezco mucho por la informaciรณn, sobre todo la parte de aรฑadir multiples usuarios en el .htpasswd.

    Dios te bendiga!

      Mohtadi dijo

    Enhorabuena , es un articulo muy bueno, claro y digerible. Muchas Gracias

      eduardo dijo

    me da un error 500 cuando meto usuario y clave

    AuthType Basic
    AuthName ยซTocc toccยป
    AuthUserFile /var/www/html/.pass/.htpasswd
    Require user Akira

      eduardo dijo

    Que grande eso me pasa por comentar sin mirar los otros comentarios perodna.
    Funciona de maravilla gran post

      Somnus Senior dijo

    Hola, bueno el tutorial, pero hay alguna alternativa a ยซhtpasswdยป? pregunto porque estoy usando linux mint 17.3 y no tengo el comando… tengo que instalarlo?

      Somnus Senior dijo

    Vale, ya me di cuenta… tenรญa que instalarlo con sudo apt-get install apache2-utils

      Fernando Montilla dijo

    Buenas, excelente tutorial, lo hice exactamente como lo indican acรก, lo รบnico es que en vez de ejecutar lo indicado en el punto 2:

    nano /etc/apache2/sites-available/default

    Me funcionรณ con

    nano /etc/apache2/sites-enabled/000-default.conf

      Jorge Rodrigo Torrez Aramayo dijo

    Saludos, no me funciona ๐Ÿ™ mi carpeta no aparece en mi servidor, es decir, protegรญ mi carpeta /var/222/html/content, y cuando entro desde el navegador no aparece la carpeta content. Help