Gestión básica de acceso en Apache (Parte 2: Acceso mediante autenticación básica)

  En el servidor web Apache es posible determinar con más precisión el acceso a usuarios gracias a las directivas "AuthName", "AuthType" y "AuthUserFile", que son compatibles con el uso de la directiva "Require", como puede verse en este enlace.
  La autenticación de acceso básica, en una transacción HTTP, es un método diseñado para permitir a un navegador de red, u otro programa cliente, proveer credenciales en la forma de usuario y contraseña cuando se le solicita una página al servidor. Básicamente, un usuario cliente deberá escribir su nombre de usuario y su contraseña para poder acceder a la página que sirve el servidor.
  En esta entrada del blog se verá cómo configurar un servidor de red Apache para que realice las operaciones necesarias que le permitan controlar el acceso a usuarios mediante el tipo de autenticación antes mencionado.

  Para ejemplificar la explicación, se utilizará el Ubuntu Server 16.04 LTS como sistema operativo base, y se crearán los usuarios ficticios Mortadelo, Filemón y Ofelia.
  En primer lugar, desde el terminal, hay que comprobar si el módulo "auth_basic" está habilitado en la ruta "/etc/apache2/mods-enabled" con el comando ls (si no aparece, es que no está habilitado).
  En este caso, aparece el archivo "auth_basic.load", lo que demuestra que el módulo que se necesita está habilitado. Si no fuera así, puede habilitarse con el comando a2enmod auth_basic (con un sudo antes si no se es administrador).
  El uso de la autenticación básica requiere de un archivo (normalmente de texto plano) con los nombres de los usuarios del servidor y sus respectivas contraseñas al que el servidor pueda acceder. Dicho archivo se crea mediante el comando htpasswd, que es usado también para configurar el acceso de otros servidores de red, los detalles de su uso en Apache pueden verse aquí.
  Por ejemplo, se creará al usuario "mortadelo", y, como el fichero todavía no existe, se empleará el parámetro "-c" para que se cree junto al usuario. De este modo, el comando completo será: sudo htpasswd –c /etc/apache2/passwd mortadelo.
  Puede verse que en el comando se incluye la ruta completa del archivo, que ya lo sitúa dentro del directorio del servidor Apache, dándole así un acceso limpio, el nombre del archivo, y que, tras pulsar la tecla "Enter" para ejecutarlo se pide al usuario que ejecuta el comando una contraseña para el usuario del servidor de red en proceso de creación.
  Ahora se creará al usuario del servidor de red "filemon", pero esta vez sin el parámetro "-c", puesto que ya no es necesario.
  El siguiente paso es realizar las configuraciones necesarias en el archivo "000-default.conf" (o en el que se tenga como principal en el servidor de red), que se encuentra en la ruta "/etc/apache2/sites-available/". Para realizar esto se editará dicho archivo como administrador (en este caso se utiliza el editor Mousepad, pero puede ser Gedit, Nano u otro).
  Ahora, dentro del bloque "<Directory>" que nos interesa (en este caso será el mismo que se creó en otra entrada de este blog) se añade un bloque de directiva "<RequireAll>" donde, además de integrar el anterior bloque de directiva "<RequireAny>", se añadirán las directivas necesarias para configurar correctamente la autenticación básica del servidor de red ("AuthName", "AuthType", "AuthUserFile", y una de "Require", en este ejemplo), y  que permitirá el acceso al servidor a los usuarios antes creados. La siguiente imagen ilustra cómo debe quedar la configuración.
  Tras guardar los cambios y cerrar el documento, se reinicia el servidor Apache para que estos tengan efecto.
  Para comprobar si todo está en orden, se abrirá un navegador de red y se escribirá "http://(dirección IP del servidor)/privado" (en este ejemplo), y se intentará acceder con el usuario "mortadelo" escribiendo su contraseña en la ventana de autenticación. Si todo está bien, el usuario del servidor de red accederá al directorio y a la página de su interior.
  Lo mismo sucederá con el usuario del servidor de red "filemon".

GRUPOS DE USUARIOS

 A veces, los usuarios del servidor deben clasificarse en grupos diferentes por diversos motivos, uno de los más importantes es la seguridad interna. Ahora se mostrará cómo crear grupos de usuarios autorizados con este sistema de autenticación. En primer lugar, se creará al usuario "ofelia" con el método antes explicado.
  Para poder autorizar a grupos de usuarios en el servidor de red, el Apache debe tener habilitado el módulo "authz_groupfile" (la comprobación se realiza como se ha explicado más arriba), de no ser así, se habilitará con el comando a2enmod authz_groupfile (con un sudo antes si no se es administrador) y se reiniciará el servidor.
  Al igual que con los usuarios del servidor de red, es necesario crear un archivo (generalmente de texto plano) para determinar los grupos de usuarios de este. El archivo de grupos se alojará en la ruta "/etc/apache2/", lo que permitirá al servidor de red acceder directamente a él cuando lo necesite. En el ejemplo, el archivo se llama "grupos", pero puede tener cualquier nombre representativo. Para crear este archivo se utilizará un editor de texto, y se debe ser administrador. Dentro del archivo, se creará el grupo "profesores", y se introducirá en él a los usuarios "mortadelo" y "ofelia".
  Después, se edita el archivo "000-default.conf" (o el que se tenga como principal en el servidor de red), y se añade la línea "AuthGroupFile /etc/apache2/grupos" dentro del bloque de directiva "<RequireAll>"; también se cambia el valor de la directiva "Require" a "group profesores". Con estos cambios, el servidor de red sólo permitirá el paso, en este ejemplo, a los usuarios de servidor de red de dicho grupo. Al terminar, se guardarán los cambios y se cerrará el archivo.
  Luego, se reinicia el servidor Apache para que los cambios de su configuración tengan efecto.
 
  Y, para comprobar que los cambios funcionan, se vuelve a utilizar el navegador de red con la misma dirección que antes. Si se prueba con el usuario "ofelia"...
 ... puede verse que accede al lugar del servidor de red sin ningún problema. Lo mismo sucedería con el usuario "mortadelo".
  Pero si se intenta acceder con el usuario "filemon", que antes podía acceder al directorio "privado", puede verse que el servidor le niega el acceso con una pantalla de aviso, puesto que no pertenece al grupo adecuado.


AUTORIZACIÓN PARA TODOS LOS USUARIOS

  Cambiando nuevamente el valor de la directiva "Require" se puede permitir el acceso a cualquier usuario válido.
  Se comienza editando nuevamente el achivo "000-default.conf" (o el que se tenga como principal en el servidor de red) con un editor de texto como administrador (comando sudo mousepad 000-default.conf, por ejemplo).
  En el archivo, se cambia el valor de la directiva "Require" por "valid-user". Se guardan los cambios y se cierra el archivo. Luego se reinicia el servidor Apache.
  Pueden comprobarse los efectos de los cambios en la configuración utilizando al usuario "filemon" para acceder al servidor de red (antes no podía acceder al directorio, pero ahora sí). Los otros dos usuarios también accederán sin problemas.

  Espero que esta entrada del blog haya sido útil al lector.

1 comentario:

  1. Cambiando nuevamente el valor de la directiva "Require" se puede permitir el acceso a cualquier usuario válido.
    Se comienza editando nuevamente el achivo "000-default.conf" (o el que se tenga como principal en el servidor de red) con un editor de https://coaching-mastery.com/emulador-3d-para-pc/

    ResponderEliminar

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.