Implementación de políticas de autentificación y acceso
Políticas de acceso en Apache 2.2
Como hemos visto anteriormente el control de acceso en versiones anteriores de Apache2, se hacía con las directivas Order
, Allow
y Deny
. Además teníamos otra directiva Satisfy
(Nota: Esta directiva no existe en Apache 2.4) que nos permitía controlar como el se debía comportar el servidor cuando tenemos varios instrucciones de control de acceso (allow
, deny
, require
). de esta manera:
Satisfy All
: Se tenían que cumplir todas las condiciones para obtener el acceso.Satisfy Any
: Bastaba con que se cumpliera una de las condiciones.
Ejemplo:
<Directory /dashboard>
Order deny,allow
Deny from all
Allow from 10.1
Require group admins
Satisfy any
</Directory>
El uso de esas directiva hacía muy complicado hacer políticas de acceso complejas.
Políticas de acceso en Apache 2.4
En la nueva versión el control de acceso se determinan con la directiva Require
, y las políticas de acceso la podemos indicar usando las directivas:
RequireAll
: Todas las condiciones dentro del bloque se deben cumplir para obtener el acceso.RequireAny
: Al menos una de las condiciones en el bloque se debe cumplir.RequireNone
: Ninguna de las condiciones se deben cumplir para permitir el acceso.
El ejemplo anterior quedaría:
<Directory /dashboard>
<RequireAny>
Require ip 10.1
Require group admins
</RequireAny>
</Directory>
Ejemplo
En Apache 2.2 podríamos tener:
Order Allow,Deny
Allow from all
Deny from 212.100.100.100
En Apache 2.4 lo podríamos indicar de dos formas distintas:
<RequireNone>
Require ip 212.100.100.100
</RequireNone>
O también:
<RequireAll>
Require all granted
Require not ip 212.100.100.100
</RequireAll>
Ejemplo complejo
Podemos crear varios bloques como vemos en el siguiente ejemplo:
<RequireAny>
<RequireAll>
Require user root
Require ip 123.123.123.123
</RequireAll>
<RequireAll>
<RequireAny>
Require group sysadmins
Require group useraccounts
Require user anthony
</RequireAny>
<RequireNone>
Require group restrictedadmin
Require host bad.host.com
</RequireNone>
</RequireAll>
</RequireAny>
Demostración
Tenemos un recurso que para acceder tenemos que autentificarnos, además a ese recurso sólo puedo acceder desde la red interna. Puede implementar dos políticas:
- Se deben cumplir las dos: el recurso sólo es accesible desde la red interna y habiéndonos autentificados.
- Se debe cumplir una de las dos: el recurso es accesible de la red interna, sin necesidad de autentificarnos, y es accesible desde la red externa pero nos debemos autentificar.