Autenticación Digest en Apache

publicado en: Apache, Linux, Seguridad, Servicios de Red | 2
 
 

Índice General

  1. Introducción
  2. Configuración del servidor

 

  1. Introducción (Volver al índice General)
    Apache nos ofrece la posibilidad de limitar el acceso a determinadas páginas mediante la autenticación del usuario al intentar acceder a ellas.

    En este artículo vamos a explicar el método de autenticación: Digest. El método Digest es más seguro sobre todo a nivel de posible captura de tráfico, ya que el intercambio de hashes entre nuestro navegador y el servidor es más complejo. La codificación va en base al timestamp generado por el servidor en el momento de la petición, lo que lo hace más difícil de decodificar y por lo tanto más seguro.

    Podemos hacer aún más seguro el acceso a nuestras páginas sensibles haciendo uso conjunto de HTTPS y el método de autenticación Digest, es decir, que en primer lugar nuestro servidor web utilizará SSL o TLS en las conexiones y sobre la conexión encriptada, usar el método de autenticación Digest.

  2.  

  3. Configuración del servidor (Volver al índice General)

    • Habilitar el módulo auth_digest (Volver al índice General)
      En primer lugar deberemos habilitar el módulo auth_digest para que nuestro Servidor Apache pueda realizar la autenticación mediante el método Digest.

      Una opción sería realizar un link simbólico del .load de la carpeta /etc/apache2/mods-available/ a /etc/apache2/mods-enabled/.

      $ sudo ln -s /etc/apache2/mods-available/auth_digest.load /etc/apache2/mods-enabled/auth_digest.load

      Otra opción, y más rápida, sería mediante la ejecución del comando a2enmod.

      $ sudo a2enmod auth_digest

      En ambos casos habrá que reiniciar Apache.
      Si nuestro sistema utiliza System V como sistema de inicio, utilizaremos el comando:

      $ sudo /etc/init.d/apache2 restart

      Si utilizamos systemd como sistema de inicio, utilizaremos el siguiente comando:

      $ sudo systemctl restart apache2
    •  

    • Crear un fichero de usuarios y passwords para el acceso al sitio (Volver al índice General)
      Debido a la sensibilidad de la información del fichero de passwords, este deberá ubicarse fuera del sitio web aunque las passwords estén encriptadas.

      Creación del archivo:
      En este ejemplo lo crearemos en el directorio /etc/apache2.
      El nombre y extensión del archivo son elegidos por su descripción, aunque podríamos elegir cualquier otro nombre con o sin extensión.

      La orden para la creación del archivo será la siguiente:

      $ sudo htdigest -c /etc/apache2/passwords.digest restringido nombreusuario

      El programa comienza indicándonos que se asignará una password para dicho usuario en el realm denominado restringido.

      Adding password for nombreusuario in realm restringido

      A lo que el programa solicitará una password para el usuario y que volvamos a repetir de nuevo la password como método de comprobación de que no hemos errado al introducir la password.

      New password: clave   
      Re-type new password: clave

      El proceso se repetirá para cada uno de los usuarios que queramos añadir al fichero de passwords, pero quitando el parámetro -c ya que este parámetro solo se utilizará para la creación del archivo.

      Un usuario existirá en el fichero de password tantas veces como pertenencia a distintos realm y podrá tener distintas passwords para cada realm. A cada sitio o directorio de acceso restringido se le asigna un realm que coincide con el valor de AuthName que estableceremos a la hora de configurar el acceso.

      Para anexar nuevos usuarios al fichero de passwords ejecutaremos el siguiente comando:

      $ sudo htdigest /etc/apache2/passwords.digest restringido nombreusuario2
      Adding password for nombreusuario2 in realm restringido
      New password: clave
      Re-type new password: clave

      Permisos, propietario y grupos
      El archivo deberá tener los siguientes propietarios y permisos: Si el servidor está configurado para correr como usuario www-data y como grupo www-data, el usuario root podrá leerlo y escribirlo, el grupo www-data sólo leerlo y prohibido para el resto.

      Para conocer el usuario y grupo asignados a Apache, podremos comprobarlo en el archivo: /etc/apache2/envvars en el que aparecerá algo como sigue:

      export APACHE_RUN_USER=www-data
      export APACHE_RUN_GROUP=www-data

      Para asignar los permisos, ejecutaremos el siguiente comando:

      $ sudo chmod 640 /etc/apache2/passwords.digest

      Para asignar propietario y grupo utilizaremos el siguiente comando:

      $ sudo chown root.www-data /etc/apache2/passwords.digest
    •  

    • Establecer la configuración en Apache para el uso de este fichero (Volver al índice General)
      Una vez creado el fichero de passwords, hay que indicarle a Apache donde se encuentra y de que manera usarlo. Esta configuración se consigue con las siguientes directivas:

      • AuthType: Tipo de autenticación que se usará, en este caso será Digest.
      • AuthName: Nombre identificativo que se le dará a la autenticación. Nos servirá como realm, el reino al que pertenecen los usuarios. Algo así como un grupo.
      • AuthDigestProvider: Indica qué proveedor se utiliza para autenticar a los usuarios para esta ubicación. Por defecto usaremos file. El proveedor predeterminado file se implementa con el módulo authn_file. Habrá que asegurarse de que dicho módulo está habilitado.
      • AuthUserFile: Ruta donde se encuentra el fichero de passwords.
      • Require: El/los requerimiento/s que deben ser satisfechos en orden para garantizar el acceso.

      Estas directrices se incluirán en el fichero .htaccess que crearemos o editaremos dentro del directorio que pretendemos proteger o pueden ir en el fichero principal de configuración del servidor, en una sección <Directory> o ámbito de aplicación de contenedores.

      El ejemplo presentado más abajo define una autenticación llamada «Restringido». El fichero de passwords está ubicado en /etc/apache2/passwords.digest y será usado para verificar la identidad de los usuario. Sólo los usuarios llamados usuario1 y usuario2 tendrán garantizado el acceso y aún así, la password introducida deberá coincidir con la password almacenada en el fichero de passwords para cada usuario y pertenecer al realm «Restringido».

      Alias /restringido /var/www/carpeta_restringida/
      <Directory "/var/www/carpeta_restringida">
          AuthType Digest
          AuthName "Restringido"
          AuthDigestProvider file
          AuthUserFile /etc/apache2/passwords.digest
          Require user usuario1 usuario2
      </Directory>

      En la directiva Require podremos optar por especificar los usuarios que accederán al recurso como en el ejemplo anterior o bien, indicar la opción valid-user como se indica a continuación. Con esta opción le decimos a Apache que podrán acceder todos los usuarios que pertenezcan al realm «Restringido».

          Require valid-user

      La palabra «Restringido» será presentada en la ventana de autenticación donde el usuario tendrá que escribir sus credenciales. Además como indicamos anteriormente indica el realm al que deberá pertenecer el usuario que se autentique.

      auth_digest_ventana1

       

      Si las directivas han sido puestas en el fichero principal de configuración del servidor (por ejemplo /etc/apache2/sites-available/default-ssl), deberás reiniciar el Servidor Apache para que la nueva configuración surta efecto. Si las directivas han sido puestas en un fichero .htaccess surtirán efecto inmediatamente, cada vez que el fichero .htaccess es analizado por el servidor.

      La próxima vez que accedas a un fichero de ese directorio, aparecerá un cuadro de dialogo usuario/password, exigiendo unas credenciales para acceder a dicho fichero.

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
  Configuración de privacidad y de cookies.
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

2 comentarios

  1. es por ayudar

    Hola:
    La página está muy bien, pero creo que para que no haya dudas en nada, tendrías que haber dado el ejemplo escribiendo un ejemplo real para que se vean los pasos más claros (ya se que es más costoso en tiempo pero vale la pena tambien añadirlo con fotos ).
    No te estoy criticando, solo es una critica constructiva.
    Un saludo

    • J. Carlos

      En primer lugar, gracias por tu comentario.
      Cuando redacté el artículo, lo hice pensando en usuarios que se manejaban lo suficiente con los archivos de Apache. Si que es verdad que algunas capturas de pantalla hubiesen ayudado algo más.
      Gracias de nuevo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.