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 grantedRequire all deniedRequire host addressRequire not host addressRequire ip xxx.xxx.xxx.xxxRequire 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ó (BasicoDigest)AuthName→ text que mostra el navegadorAuthUserFile→ ruta del fitxer amb usuaris i contrasenyesRequire useroRequire 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àsicamod_auth_digest→ Autenticació amb hashmod_authn_file→ Llegeix fitxers d’usuarismod_authz_host→ Control per IP o hostmod_authz_user→ Control per usuarimod_authz_groupfile→ Control per grups d’usuaris
Activar-los:
sudo a2enmod auth_basic
sudo a2enmod authn_file
sudo systemctl restart apache2
-
Documentació per Nginx d'autenticació bàsica.
-
Documentació per Apache d'autenticació i d'autorització.