Salta el contingut

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: