MP08 - UF1: Servidors web i de transferència de fitxers
Apache i Nginx - Control d'accés
Pel que hem vist fins ara, tothom té accés a un VirtualHost quan està activat.
Hi ha ocasions en què es vol restringir l'accés a una part del web o tot el web però només a uns usuaris concrets.
El servei web incorpora mecanismes bàsics per verificar els usuaris que volen accedir a àrees restringides.
La flexibilitat del sistema modular fa que es puguin anar afegint nous mecanismes que apareguin al futur, fins i tot externs al servidor.
El mateix protocol HTTP conté mecanismes per a permetre l'autenticació dels usuaris.
Quan parlem de control d'usuaris, hem de tenir clar els conceptes relacionats.
-
Autenticació: és determinar si un usuari és qui diu ser.
-
Autorització: és indicar quins usuaris tenen dret a accedir a certs recursos.
Tot allò que limitem amb control dins una web són els recursos restringits.
Hem de recordar no confondre-ho amb l'autenticació dins una pàgina web. Estem parlant de control d'accés per part del servidor web, des del backend no tindrem accés a aquestes dades d'autenticació.
Una de les directives bàsiques de control és Require
.
Aquesta ens permet indicar un llistat d'adreces IP, subxarxes, o noms de domini des dels quals està permès o no l'accés al servidor o al directori en concret on s'aplica. Alguns exemples de com s'aplica:
Require all granted
Require all denied
Require host address
Require not host address
Require ip xxx.xxx.xxx.xxx
Require not ip xxx.xxx.xxx.xxx
Unes de les directives bàsiques de control són Allow
i Deny
.
Aquestes ens permeten indicar un llistat de Ips, subxarxes, o noms de domini des dels quals està permès o no l'accés al servidor o al contecte en concret on s'aplica.
Alguns exemples de com s'aplica:
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
En aquest cas es permet l'accés a tota la xarxa 192.168.1.0/24
exceptuant la IP 192.168.1.2
. Les directives allow
i deny
s'apliquen en l'ordre en què es posen. En el moment en què una es compleix, ja no se'n mira cap altra.
Els servidors web poden gestionar l'autenticació i el control d'accés al servidor mitjançant mòduls propis, tot i que evidentment pot incorporar mòduls externs.
Cada mòdul consta d'un conjunt de directives que permeten configurar el funcionament de l'autenticació i el control d'accés.
Tenim 3 categories per realitzar aquesta funció on després caldrà triar un mòdul específic:
-
Tipus d'autenticació
-
Proveïdor d'autenticació
-
Autorització
Els mecanismes d'autenticació es basen en l'ús del codi d'estat 401 - Unauthorized - del protocol HTTP i en les capçaleres WWW-Authenticate i Authoritation.
Els navegadors mostren a l'usuari un quadre de diàleg on es demanen els valors necessaris per autenticar-se.
Els dos mecanismes d'autenticació que incorporen Apache i Nginx són:
-
Basic: el client envia un usuari i una clau codificats sota l'algoritme base64.
-
Digest: envia l'usuari i una funció hash sota MD5. En nginx està deixada de suportar.
S'implementen amb la directiva AuthType
en Apache i auth_basic
en Nginx.
Digest és més segur que bàsic tot i que actualment cap dels dos mètodes es consideren segurs.
Per això s'utilitza l'autenticació des del codi web i l'HTTPS.
Un cop arriba l'usuari i contrasenya a validar, el servidor ho ha de comparar amb el que ell coneix.
La manera més bàsica és utilitzar un llistat d'usuaris i contrasenyes en un fitxer de control.
Tot i això es poden activar opcions d'autenticació externes com ara PAM o LDAP.
Es pot considerar un avantatge el fet de separar el control d'usuaris dels usuaris del sistema, i un desavantatge en haver de controlar dos sistemes d'usuaris per separat.
També es poden validar grups d'usuaris amb fitxers de grups, que indiquen quins usuaris formen part de cada grup.
Apache ens permet aplicar directives de configuració de manera personalitzada a directoris amb els fitxers .htaccess
.
Ens pot caldre quan no tenim accés a l'administració del servidor, però sí que se'ns permet aplicar directives, i les pengem com si fos un fitxer més del web per aquell directori en concret.
La seguretat i el rendiment que això implica és un etern debat.
Sempre tindrà més rendiment si s'aplica directament a la configuració del servidor.
Es poden limitar les comandes possibles dins un fitxer .htaccess
amb la directiva Allowoverride
Trobarem documentació al respecte a:
-
Documentació per Nginx d'autenticació bàsica.
-
Documentació per Apache d'autenticació i d'autorització.