domingo, 28 de abril de 2013

Apache - Directorio web protegido

8 Autenticación y control de acceso

Respecto al proceso de Autenticación de usuarios en Apache 2 existen dos métodos:
  • Básico o Simple: el usuario en el navegador web introduce su login o nombre de usuario y contraseña y se envían al servidor sin cifrar.
  • Digest: el usuario en el navegador web introduce su login y contraseña y se envían al servidor cifrados.
Estos dos métodos sólo autentican al usuario cuando intenta acceder a un recurso. Pero en ninguno de los dos métodos los datos que a continuación se envían del navegador web al servidor o viceversa van cifrados. Son métodos que controlan el acceso a los recursos, pero no protegen la información intercambiada en la comunicación cliente-servidor una vez se ha comprobado que el acceso es válido.

8.1 Autenticación básica

El módulo que controla este método de autenticación es mod_auth_basic y tiene la ventaja de que está soportado por todos los navegadores web. Por el contrario, tiene el inconveniente de que el login y la contraseña no van cifradas del navegador web al servidor.
En el archivo /etc/apache2/sites-available/default, o en el archivo relativo al host virtual correspondiente, habrá que añadir un bloque <Directory>...</Directory> por cada directorio que se quiera proteger:

<Directory "/var/www/privado">
AuthType Basic
AuthName "Directorio privado"
AuthUserFile /etc/apache2/passwd/.htpasswd
Require valid-user
</Directory> 

Donde:
  • AuthName: nombre del dominio de autenticación. Define el conjunto de recursos que estarán sujetos a los mismos requisitos de autenticación. También es el texto que aparecerá en la ventana que pide el usuario y la clave.
  • AuthType: tipo de autenticación.
      Basic: la contraseña se negocia sin encriptar
      Digest: la contraseña se negocia encriptada
  • AuthUserFile: ubicación del archivo de texto que contendrá los nombres de usuario y contraseñas usadas en la autenticación HTTP básica. Se suele llamar .htpasswd. Previamente hay que crear el directorio /etc/apache2/passwd/.
  • Require: usuarios que tienen acceso a los recursos especificados. Opciones disponibles:
  •  
    • valid-user: cualquier usuario incluido en el archivo de contraseñas .htpasswd.
    • user <lista de usuarios>: lista de usuarios de .htpasswd, separados por espacios, que pueden acceder.
  • Satisfy: al utilizar esta directiva determina si se deben cumplir todos los requisitos (All) o cualquiera (Any).
Para crear usuarios para el método de autenticación Básico se utiliza la orden htpasswd.
#htpasswd -c /etc/apache2/passwd/.htpasswd nombre_usuario
La opción -c permite crear el archivo .htpasswd con el primer usuario dado de alta, que además no tiene porque ser un usuario existente en el sistema.
Los permisos del archivo .htpasswd deben ser 644, es decir lectura y escritura para el dueño, que es root y lectura para el grupo y los otros.
Para seguir dando de alta usuarios no hay que poner el argumento -c de lo contrario creará siempre de nuevo el archivo con sólo el último usuario incorporado.
Los usuarios creados para Apache2 no tienen porque estar dados de alta en el sistema, y si existen no tienen porque tener la misma contraseña.
Al ir a la URL http://servidor.dominio.com/privado/ aparece la ventana:


8.2 Autenticación HTTP Digest

El módulo que controla este método de autenticación es mod_auth_digest. Tiene la ventaja de que el login y la contraseña van cifradas del navegador web al servidor. Por el contrario, tiene el inconveniente de que no está soportado por todos los navegadores web.
Lo primero que hay que hacer es activar dicho módulo. Para ello:

#a2enmod auth_digest
#/etc/init.d/apache2 force-reload

Utiliza MD5 (Message Digest Authentication) para generar un hash que es el que se transmite o envía al servidor.
En el archivo /etc/apache2/sites-available/default habrá que añadir un bloque <Directory>...</Directory> por cada directorio que queramos proteger:

<Directory "/var/www/privado">
AuthName "Directorio privado"
AuthType Digest
AuthDigestDomain http://servidor.dominio.com/privado/
Donde:
    AuthName: indica el nombre del dominio de autenticación (realm).
    AuthType: indica que el método a usar es 'Digest'.>
    AuthDigestProvider: indica el soporte utilizado para la autenticación. Por defecto es file (archivo).
    AuthDigestDomain: dominio protegido con autenticación digest.
    AuthUserFile: indica donde se encuentra el archivo de contraseñas que ahora llamamos .htdigest.
La creación de usuarios en el método de autenticación Digest requiere la orden htdigest.

#htdigest /etc/apache2/passwd/.htdigest zona_privada nom_usuario

El parámetro 'zona_privada' debe coincidir exactamente con el nombre del dominio de autenticación dado en la directiva AuthName ya que, cuando se crea un usuario, se hace incluyéndolo a un dominio de autenticación concreto.
Si la directiva Require indica 'valid-user', se consideran usuarios válidos sólo los que pertenecen al dominio de autenticación dado en AuthName y las contraseñas sólo pueden utilizarse en este dominio.
En el ejemplo añadimos el usuario usuario1 al archivo de contraseñas /etc/apache2/passwd/.htdigest. Si se utiliza el archivo .htdigest por primera vez y no existe, hay que incluir la opción -c:

#htdigest -c /etc/apache2/passwd/.htdigest “Directorio privado” usuario1

n el archivo de configuración /etc/apache2/sites-available/default hay que añadir un bloque <Directory>...</Directory> para el directorio que queremos proteger:

Alias /privado /var/www/privado
<Directory "/var/www/privado">
AuthType digest
AuthName "Directorio privado"
AuthUserFile /etc/apache2/passwd/.htdigest
Require user usuario1
</Directory>

Ir a la URL http://servidor.dominio.com/privado/ y aparece la ventana siguiente:
Como se puede observar la ventana de identificación es igual a la anterior con la salvedad de que los datos enviados a través de ella están encriptados.

8.3 Control de acceso

Es posible permitir el acceso a los usuarios en función de la máquina desde la que hacen las solicitudes de información. En este caso se utilizan las directivas Allow y Deny que permiten y rechazan, respectivamente, el acceso en función del nombre o la dirección de la máquina desde la que se hace la solicitud.
Relacionada con ellas está la directiva Order que indica a Apache2 en qué orden tiene que aplicar las directivas Allow y Deny.
La sintaxis es:

Allow from dirección

dirección: dirección IP o nombre de dominio completamente cualificado (o un nombre de dominio parcial). Se pueden dar varias direcciones o nombres de dominio.
En el ejemplo siguiente primero se evalúa Deny (from all) y no se permite el acceso a ningún usuario. A continuación se evalúa Allow que permite el acceso sólo a usuarios de host.dominio1.com:

Order deny,allow
Deny from all
Allow from host
.dominio1.com

Si se usa sólo la directiva Allow (sin combinar con Deny) se permitiría el acceso a usuarios de esa máquina y a cualquier otro usuario. Y lo que se quiere es dejar entrar sólo a los de host.dominio1.com.



NOTA: Esta información esta integramente copiada del siguiente link: http://recursostic.educacion.es/observatorio/web/es/software/servidores/580-elvira-mifsud




.