Salta el contingut

0614 - Bloc 1: Servidors web i de transferència de fitxers

Apache i Nginx - Control d'accés – Directiva Require

Quan instal·lem un servidor web (com Apache2), tothom pot accedir als llocs web que s’hi allotgen si el VirtualHost està actiu.
Tanmateix, en moltes situacions volem restringir l’accés:

  • a tot el lloc web,
  • o només a determinades carpetes o fitxers,
    per seguretat o privacitat.

Per exemple:

  • Un espai d’administració només accessible des de la teva IP.
  • Un directori intern que només poden veure alguns usuaris amb contrasenya.
  • Un web en proves que només ha de poder veure el professorat.

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 d'autenticació i autorització.

Concepte Definició
Autenticació Comprova que l’usuari és qui diu ser (usuari/contrasenya).
Autorització Decideix si un usuari té permís per accedir a un recurs concret.

Exemple:
Quan accedim a una web que ens demana usuari i contrasenya (autenticació), i després comprova si som administradors o usuaris normals (autorització).

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ó.

Directiva Require: control bàsic d’accés

La directiva Require és la base del control d’accés a Apache.
Serveix per indicar quins clients poden accedir segons:

  • IP o rang d’IP,
  • nom de domini,
  • autenticació d’usuari o grup,
  • o fins i tot regles inverses (not).

Sintaxi general:

Require [not] type valor

Contextos on s’aplica:

  • Dins d’un bloc <Directory>, <Location>, <Files> o .htaccess.

Exemples comuns de la directiva Require:

  • 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
Exemples pràctics

Permetre a tothom:

<Directory /var/www/html/public>
    Require all granted
</Directory>

➡ Tothom pot accedir al contingut.

Denegar a tothom:

<Directory /var/www/html/privat>
    Require all denied
</Directory>

➡ Ningú pot accedir-hi (retorna error 403 Forbidden).

Permetre només a una IP concreta:

<Directory /var/www/html/admin>
    Require ip 192.168.1.100
</Directory>

➡ Només la màquina amb aquesta IP pot accedir-hi.

Permetre a una subxarxa:

<Directory /var/www/html/test>
    Require ip 192.168.1
</Directory>

➡ Permet l’accés a qualsevol dispositiu de la xarxa 192.168.1.0/24.

Denegar una IP concreta:

<Directory /var/www/html/public>
    Require not ip 192.168.1.150
</Directory>

➡ Tothom pot accedir excepte la IP indicada.

Control per domini:

<Directory /var/www/html/clients>
    Require host client1.empresa.local
</Directory>

➡ Només s’hi pot accedir si la resolució inversa del host coincideix amb aquest domini.

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.

Autenticació d’usuaris (usuari/contrasenya)

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.

Apache també permet autenticar usuaris per accedir a directoris protegits.

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 o Digest:

  • AuthType → tipus d’autenticació (Basic o Digest)
  • AuthName → text que mostra el navegador
  • AuthUserFile → ruta del fitxer amb usuaris i contrasenyes
  • Require user o Require valid-user
Exemple complet
<Directory /var/www/html/privat>
    Options -Indexes
    AllowOverride None

    AuthType Basic
    AuthName "Zona restringida"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
</Directory>

El fitxer d’usuaris es crea amb:

sudo htpasswd -c /etc/apache2/.htpasswd alumne1

Apache demanarà usuari i contrasenya quan intentis accedir-hi.

Tipus Descripció Seguretat Suport actual
Basic Envia usuari i contrasenya codificats amb Base64. Poc segur (només amb HTTPS) Suportat
Digest Envia una hash MD5 en lloc de la contrasenya. Més segur, però obsolet Apache sí, Nginx no
Externa (PAM, LDAP, SQL) Valida usuaris des d’un sistema extern. Alta Opcional amb mòduls

Per seguretat, si es fa servir autenticació bàsica, cal sempre utilitzar HTTPS per evitar enviar credencials en clar.

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.

Quan no tenim accés a la configuració del servidor (per exemple, en un hosting compartit), podem controlar l’accés amb un fitxer .htaccess dins del directori.

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

Exemple .htaccess
AuthType Basic
AuthName "Àrea restringida"
AuthUserFile /var/www/html/.htpasswd
Require valid-user

Perquè funcioni, a la configuració d’Apache cal permetre-ho:

<Directory /var/www/html>
    AllowOverride AuthConfig
</Directory>

Estructura modular i mòduls relacionats

Apache és modular i permet afegir o desactivar funcionalitats segons convingui.

Mòduls principals per control d’accés:

  • mod_auth_basic → Autenticació bàsica
  • mod_auth_digest → Autenticació amb hash
  • mod_authn_file → Llegeix fitxers d’usuaris
  • mod_authz_host → Control per IP o host
  • mod_authz_user → Control per usuari
  • mod_authz_groupfile → Control per grups d’usuaris

Activar-los:

sudo a2enmod auth_basic
sudo a2enmod authn_file
sudo systemctl restart apache2
Trobarem documentació al respecte a: