Cómo proteger una ruta con autenticación básica en Apache 2016-01-16

Tutorial de configuración de Apache Web Server para proteger una ruta en un sitio web con autenticación básica ó Auth Basic.

En este nanotutorial vamos a aprender cómo proteger una ruta dentro de un sitio web con autenticación básica. Esto es muy práctico cuando existes secciones dentro de nuestro sitio web que no queremos que sean públicas y requieran credenciales de usuario y contraseña para acceder a ellas.

Cómo proteger una ruta con autenticación básica en Apache

Apache Web Server trae por defecto múltiples módulos disponibles para su uso. Una de ellas es mod_auth_basic.

A través de este módulo es posible proteger con usuario y contraseña una ruta dentro de nuestro sitio web, por ejemplo: /admin.

El módulo por defecto está habilitado, sin embargo es bueno comprobarlo. Para habilitarlo vamos a utilizar el comando a2enmod.

a2enmod auth_basic

Una vez comprobado que el módulo esta habilitado, vamos a seguir los siguientes pasos:

Crear el archivo .htpasswd

Apache al ser instalado, provee de varias herramientas para su fácil administración. Una de ellas es el comando htpasswd.

Este comando permite administrar dentro de un archivo de texto, una base de datos de usuarios y contraseñas las cuales van a autorizar el acceso a una ruta protegida con autenticación.

Para crear el archivo debemos correr el siguiente comando:

htpasswd -c authorizations.htpasswd admin

Crear el archivo .htpasswd

En el comando anterior se definen dos parámetros.

htpasswd -c <nombre del archivo a crear> <usuario a agregar>

También nos solicita la contraseña y confirmación de la misma para el usuario que hemos agregado.

Si revisamos el contenido del archivo que hemos creado, podemos observar lo siguiente (puede variar para uds. según el usuario y contraseña que hayan provisto):

admin:$apr1$eB4gzhKk$NoijszzlF62cT6PajU24X/

El archivo se compone de <usuario>:<contraseña cifrada>.

Modificar el vhost para agregar la autenticación

Una vez hemos creado el archivo .htpasswd resta solamente habilitar la autenticación dentro de nuestro archivo vhost. Un archivo vhost define la configuración de una página web publicada en nuestro servidor.

Los archivos vhost podemos encontrarlos en el directorio /etc/apache2/available-sites/ y el contenido del archivo luce de esta manera:

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName example.com
  ServerAlias www.exmaple.com
  DocumentRoot /var/www/example.com/public_html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Basándonos en el ejemplo del vhost anterior, podemos observar que el directorio raíz de nuestro sitio web es /var/www/example.com/public_html. La ruta que vamos a proteger debe estar dentro de este directorio.

Ahora vamos a agregar el bloque de autorización. Podemos apoyarnos del editor de linea de comandos nano. Si no conoces de este editor o quieres aprender más de el, te recomiendo el siguiente nanotutorial: Tutorial del Editor de Texto Nano.

<Location /admin>
  AuthType basic
  AuthName "Authentication Required"
  AuthUserFile /var/www/example.com/authorizations.htpasswd
  Require valid-user
</Location>

Una vez agregado este bloque a nuestro vhost, debe lucir de esta forma:

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName example.com
  ServerAlias www.exmaple.com
  DocumentRoot /var/www/example.com/public_html

  <Location /admin>
    AuthType basic
    AuthName "Authentication Required"
    AuthUserFile /var/www/example.com/authorizations.htpasswd
    Require valid-user
  </Location>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Muy importante es que el archivo .htpasswd no se encuentre en la parte pública del sitio web es decir, fuera del DocumentRoot. Apache protege el acceso a los archivos de dicha extensión, pero por motivos de seguridad es recomendable dejarlos fuera del acceso público.

Reiniciar la configuración del servidor

Una vez hemos guardado los cambios en nuestro archivo vhost, debemos recargar la configuración en el servidor. Para hacerlo debemos ejecutar el siguiente comando:

service apache2 reload

Probar la autenticación desde un navegador web

Ahora resta que probemos que nuestra autenticación esta funcionando, para esto basta que visitemos la URL de nuestro sitio web y nos dirijamos a la ruta /admin. Hecho esto, debe aparecer una ventana emergente anunciando el mensaje de "Authentication Required" (el cual configuramos en el bloque Location) y además solicitando las credenciales para ingresar.

Accediendo a la ruta protegida

Authentication Required

Si las credenciales proporcionadas no son las correctas o se cancela esta ventana, al visitante le aparecerá el siguiente mensaje.

Administrar usuarios en el archivo .htpasswd

Si queremos más adelante agregar nuevos usuarios, cambiar contraseñas y/o eliminar un usuario podemos utilizar los siguientes comandos:

Agregar un usuario

htpasswd <archivo htpasswd> <usuario>

Eliminar un usuario

htpasswd <archivo htpasswd> <usuario existente>

Modificar la contraseña de un usuario

htpasswd -D <archivo htpasswd> <usuario existente>

Acerca del autor

Hugo Gilmar Erazo Full Stack Web Developer

Soy un desarrollador web con más de 10 años de experiencia. Me considero fanático de GNU/Linux, lo cual me ha permitido complementar mis conocimientos en el desarrollo web con la administración de servidores.

Aunque manejo todo lo relacionado al Front-End, me inclino más por el desarrollo Back-End. También desarrollo aplicaciones móviles híbridas. Me gusta lo que hago.

Compartir este artículo