Protegiendo directorios. Autentificación básica de Apache

Seroquel Without Prescription Prednisone No Prescription VPXL For Sale Stromectol Generic Buy Hoodia Online Elavil Without Prescription Synthroid No Prescription Prozac For Sale Toprol XL Generic Buy Cialis Soft Tabs Online

Este artículo describe como funciona la autentificación básica de Apache y como proteger recursos fácilmente usando esta caracterísitica del servidor. Este artículo es la versión revisada y corregida de aquel articulo que escribí hace ya más de uno año y que lo podéis leer aquí.

Antes de empezar indicar que este artículo es la versión revisada y corregida de aquel articulo que escribir hace ya más de uno año y que lo podéis leer aquí.

El servidor Apache permite el uso de los llamados “distributed configuration files”, osea “ficheros de configuración distribuidos”. Estos permiten personalizar el funcionamiento del servidor en un directorio concreto sin necesidad de modificar el fichero de configuración principal de Apache, el “httpd.conf”.

Por defecto, estos “ficheros de configuración distribuidos” deben llamarse “.htaccess”, pero si no te gusta ese nombre lo puedes cambiar facilmente según se explica en este mini artículo.

Cada vez que un cliente le hace una petición al servidor Apache, es decir, cada vez que tú con tu navegador accedes a una página web, Apache busca uno de esos ficheros .htaccess en el mismo directorio de la página que has pedido a Apache. Si encuentra uno de esos .htaccess lo lee y lo interpreta antes de mostrarte la página que le has pedido. De esta forma, si en el .htaccess se indica la necesidad de autentificar a los clientes, Apache lo hará. Y precisamente de esto trata el artículo, de la autentificación de usuarios mediante el módulo mod_auth_basic, el método de autentificación más básico y sencillo de implementar de Apache.

La implementación más básica

A continuación la implementación más básica del método de Autenficación Básica de Apache, donde se limita todo tipo de acceso (GET, POST y HEAD) a un determinado directorio:

AuthType Basic
AuthName "Directorio Protegido"
AuthUserFile /var/www/dir/.htpasswd
require valid-user

La sentencia “AuthType Basic” indica el método de autentificación que deseamos usar. En nuestro caso el método de autentificación básico.

AuthUserFile debe indicar la ubicación completa del fichero que contiene los datos de los usuarios (nombre de usuario y contraseña). No es válido indicar una ubicación relativa.

El fichero que contiene los datos de autentificación de los usuarios, aunque habitualmente se le llame “.htpasswd”, puedes usar cualquier nombre.

En Windows, las contraseñas del fichero “.htpasswd” pueden o no estar encriptadas, en todos los demás sistemas es necesario que estén encriptadas.

En sistemas Unix (Linux, BSD, etc.) este fichero lo debes crear (y actualizar) mediante la herramienta htpasswd de Apache. En sistemas Windows lo puedes hacer manualmente (sin encriptar las contraseñas) o usando htpasswd.

AuthName indica el nombre que deseas darle al recurso. Este nombre aparecerá en la ventanita de autentificación donde el usuario tiene que introducir su nombre de usuario y contraseña, por lo que es recomendable darle un nombre descriptivo.

Suponiendo que aún no dispones del fichero .htpasswd, que deseas crearlo en /var/www/dir y que quieres permitir el acceso al usuario “pepito”, debes ejecutar el siguiente comando en la línea de comandos:

$ htpasswd -c /var/www/dir/.htpasswd pepito

Para añadir un nuevo usuario a un fichero “.htpasswd” ya existente, ejecuta el siguiente comando:

$ htpasswd /var/www/dir/.htpasswd nuevo_usuario

Cada vez que ejecutes cualquiera de los comandos mencionados se te pedirá que introduzcas la contraseña del nuevo usuario.

La sentencia “Require valid-user” indica que se limitará todo acceso ya sea de tipo GET, POST o HEAD y que solo se permitirá el acceso a los usuarios que aparezcan en el fichero “.htpasswd”.

Limitando el acceso dependiendo del método HTTP utilizado

Si solo deseas limitar el acceso POST, de forma que cualquiera pueda ver los contenidos del directorio
/var/www/dir, pero solo los usuarios que aparezcan en “.htpasswd” puedan enviar peticiones de tipo POST usa la siguiente configuración:

AuthType Basic
AuthName “Directorio Protegido"
AuthUserFile /var/www/dir/.htpasswd
<Limit POST>
require valid-user
</Limit>

Esto podría ser útil, si por ejemplo, el el directorio en cuestión tienes algún formulario para subir ficheros al servidor. Usando la configuración sugerida, solos los usuarios autentificados podrían hacerlo.

Autentificación de grupos

Supongamos que disponemos de algunos documentos ultra secretos que solo el grupo de administradores puede ver. Siempre podrías crear un nuevo directorio donde ubicar estos documentos y duplicar el procedimiento descrito anteriormente. Esto supondría la necesidad de mantener varios ficheros “.htpasswd”, lo cual resultaría bastante incomodo. Por esto existe una forma alternativa y mucho más sencilla.

Suponiendo que nuestro nuevo directorio ultra secreto es /var/www/dir/secreto, creamos un .htaccess con el siguiente contenido y lo ubicamos en el nuevo directorio:

AuthType Basic
AuthName “Directorio secreto"
AuthUserFile /var/www/dir/.htpasswd
AuthGroupFile /var/www/dir/secreto/.htgroup
require group administradores

Como puedes ver, en AuthUserFile se indica el mismo fichero .htpasswd, no es necesario crear uno adicional.

AuthGroupFile indica la ubicación completa del fichero que relaciona los grupos y los usuarios pertenecientes a cada grupo.

El fichero AuthGroupFile se edita manualmente, usando tu editor de texto preferido, y su formato es el siguiente:

nombre_del_grupo: usuario1 usuario2 usuario3

Es decir, que suponiendo un grupo “administradores” y que solos los usuarios “pepito” y “jaimito” pertenecen al mismo, nuestro fichero .htgroup tendría el siguiente aspecto:

administradores: pepito jaimito lola juanmi pedrito

La sentencia “require group administradores” permitiría el acceso únicamente a los usuarios que pertenezcan al grupo “administradores” y que se autentifiquen correctamente según los datos del fichero “.htpasswd”.

¿Un único administrador?

Continuando con lo anterior… y ¿si únicamente el usuario pepito fuera administrador? En vez de crear el fichero .htgroup indicando que pepito pertenece al grupo “administradores” e incluir la directiva AuthGroupFile en nuestro fichero “.htaccess”, crearíamos un .htacces con el siguiente contenido:

AuthType Basic
AuthName “Directorio Protegido"
AuthUserFile /var/www/dir/.htpasswd
require user pepito

De esta forma, solo “pepito” podría acceder a nuestro directorio ultra secreto.

Si en algún momento decidiésemos dar acceso al usuario “lola” a nuestro directorio ultra secreto, solo tendríamos que modificar el fichero .htaccess anterior de la siguiente forma:

AuthType Basic
AuthName “Directorio Protegido"
AuthUserFile /var/www/dir/.htpasswd
require user pepito lola

Y esto es todo por ahora…

One Response to “Protegiendo directorios. Autentificación básica de Apache”

  1. Jerry Says:

    Me he fijado que al generar el password, me genera passwords diferentes cada vez que pongo el mismo user y a lo hora deindentificarme no me los da como valido, a qe se debera esto?

Leave a Reply