jueves, 1 de diciembre de 2011

Apache, autenticación por maquina, basic y digest



    Empezando la semana de examenes, estoy repasando y que mejor manera de repasar que explicando. Buenos en este caso voy a explicar como restringir el acceso por maquina y por usuario en apache.

Restricciones por maquina.
    Empezaremos con las restricciones por maquina. Yo para probarlo sin tener que reiniciar apache cada vez que se hace un cambio, estoy poniendo las restricciones en el archivo .htacces de la pagina de pruebas. No olviden que para que el fichero .htacces, el cual se encuentra en el directorio donde se encuentra la pagina, funcione, tiene que esta activado en la configuración de la pagina. En mi caso le di todos los permisos “AllowOverride All”.

    La primera opción es la de Order, con la cual se define el orden en el que se miran lo permitido y lo denegado. Después irían Allow, que son las maquinas permitidas y Deny, lo denegado. Voy a poner un par de ejemplos:

    En el primer ejemplo, el Order determina que primero se mira lo permitido y despues lo denegado. En este caso si permites una en el Allow y lueg la dniegas con el Deny, esa ip sera denegada, por el orden de comprobación. En este ejempo no podría entrar nadie, ya que primero se le permite la entrada a la ip “10.0.0.128” y después de le deniega a todo. Si intentamos entrar nos saldra un bonito error “403 Forbidden”
# cat /var/www/prueba/.htaccess
Order Allow,Deny
Allow from 10.0.0.128
Deny from all

    En este ejemplo el Order esta definido al contrario, por lo que solo podremos entrar con la ip “10.0.0.128”.
# cat /var/www/prueba/.htaccess
Order Deny ,Allow
Allow from 10.0.0.128
Deny from all

    Por lo que veis es bastante fácil. Todo depende del orden en el que se miren lo permitido y lo denegado. Por ejemplo si queremos permitirle el acceso a todo el mundo menos a dos o tres direcciones primero se permite y luego se deniega.

    En estos campos se pueden poner ip tanto ipv4 como ipv6 con o sin mascaras. También se pueden poner nombres de dominios. Si queremos poner mas de una ip se separarían por espacios.

Restricciones por usuarios.
    El servidor web Apache tiene muchas maneras de autenticarse: kerberos, pam, radius, mysql, psql... . Yo voy a a explicar las dos mas básicas basic y digest.

Autenticación basic.
    Esta autenticación guarda los usuarios y sus contraseña encriptadas en un archivo. Los usuarios y contraseñas se tienen que ir metiendo uno a uno. Este modulo de apache viene activado por defecto. Para utilizarlo en nuestra pagina añadiremos las siguientes lineas al fichero .htaccess.
# cat /var/www/prueba/.htaccess
AuthType basic
AuthName “Identifiquese”
AuthUserFile “/etc/apache2/auth_basic”
Require valid-user
    Bueno estas opciones quieren decir:
  1. Le especificamos que es autenticación básica.
  2. Este sera el mensaje que nos aparecerá al pedir la contraseña.
  3. Esta es la ubicación del fichero con los usuarios y sus contraseñas.
  4. Le indicamos que requiere un usuario valido. También se podría poner uno o varios usuarios poniendo por ejemplo “Require user juan, jose, maria”.

    Si queremos combinar este tipo de acceso con el que vimos antes podemos añadirle la opción “Satisfy”. Esta puede tener dos valores all/any, para que se tengan que cumplir las dos restricciones utilizaremos “all”, para que con que se cumpla una nos baste “any”.

    Por ultimo, para crear el fichero utilizamos el comando “htpasswd”. La primera vez que lo utilicemos tenemos que ponerle la opción -c, para que cree el archivo. Creariamos el usuario de la siguiente manera:
# htpasswd -c /etc/apache2/auth_basic juanlu
New password:
Re-type new password:

    Como veis nos pedirá la contraseña. Si queremos añadir otro usuario no le pondremos la opción -c.

    Si ahora intentamos acceder a nuestra pagina nos saldrá algo como esto:





 
Autenticación digest.
    La autenticación tipo digest soluciona el problema de la transferencia de contraseñas en claro sin necesidad de usar SSL. El procedimiento, como veréis, es muy similar al tipo básico pero cambiando algunas de las directivas y usando la utilidad “htdigest” en lugar de “htpassword” para crear el fichero de contraseñas. El módulo de autenticación necesario suele venir con Apache pero no habilitado por defecto. Para habilitarlo:
# a2enmod auth_digest
# /etc/init.d/apache2 restart

    En este caso el fichero .htaccess nos quedaría así:
# cat /var/www/prueba/.htaccess
AuthType Digest
AuthName "grupo1"
AuthUserFile "/etc/apache2/auth_digest"
Require valid-user

    En este caso en la primera opción ponemos digest en vez de basic. La directiva AuthName en este caso no especifica el mensaje que nos saldrá, si no el dominio al que pertenecen los usuarios. Este seria mas o menos algo parecido a un grupo. Las otras dos opciones no hace falta que las explique.

    En este caso, como dije antes, no se utiliza el comando “htpasswd”. Esta vez los usuarios y dominios se agregan de la siguiente manera:
# htdigest -c /etc/apache2/auth_digest grupo1 juanlu
Adding password for juanlu in realm grupo1.
New password:
Re-type new password:

    Si intentamos acceder a nuestra pagina nos saldrá un cartel parecido al anterior.

 
    Cuando estéis comprobando tener cuidado con la cache de los navegadores, pueden hacer que te lleves un rato pensando porque no te pide autenticación.

    Por ultimo decir que esto también se puede aplicar a archivos. Si intentamos descargar o ver ese archivo nos pedirá usuario y contraseña. El archivo .htaccess nos quedaría así:
# cat /var/www/prueba/.htaccess
<Files "prueba.txt">
AuthType Digest
AuthName "grupo1"
AuthUserFile "/etc/apache2/auth_digest"
Require valid-user
</Files>


3 comentarios:

  1. Podrías poner tu nombre completo, es interesante este documento y a muchos les gustaría conocer tu nombre, para citarte

    ResponderEliminar
  2. tengo un error, la primera vez que ingreso me pide el us y pass, pero luego ingreso directamente, cual sera el error? ya borre la cache y nada

    ResponderEliminar