Apache2: proteggere directory mediante autenticazione: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Riga 114: Riga 114:
Require utente_ok ferdy
Require utente_ok ferdy
</pre>
</pre>
Con queste indicazioni all'utente utente2, pur appartenendo al file di autenticazione, sarà impedito l'accesso alla directory.
Con queste indicazioni all'utente ''utente2'', pur appartenendo egli al file di autenticazione, sarà impedito l'accesso alla directory.
<br/>
<br/>
<br/>
<br/>

Versione delle 14:11, 16 apr 2011

Introduzione

In molte situazioni i servizi HTTP sono pubblici e pensati per essere accessibili da chiunque abbia la possibilità di connettersi.
Ci sono però diversi casi in cui gli amministratori hanno bisogno di ottenere un qualche controllo sugli accessi a particolari directory o file del sito; ad esempio la pagina delle statistiche o la pagina di configurazione di Apache o PHP non dovrebbero essere raggiungibili da chiunque. In questa guida vedremo due dei possibili metodi di controllo degli accessi:

  • controllo degli accessi credential-based
  • controllo degli accessi rule-based

Controllo degli accessi Rule-Based

Questo tipo di controllo degli accessi è basato su delle regole (rules) definite all'interno del file di configurazione di Apache o, meglio, all'interno del file di configurazione del Virtual Host o del servizio che vogliamo proteggere.

Regole base

Nel file di configurazione del Virtual Host inseriamo le prime regole base:

<Directory /var/www/esempio.it/www/>
          Order deny,allow
          Deny from all
          Allow from 192.168.90.0/24
</Directory>

La direttiva:

  • Order Deny,Allow indica ad Apache di processare la regola Deny (proibisci) sempre prima della regola Allow (consenti)
  • Deny from all dice ad Apache di proibire a chiunque l'accesso alla directory
  • Allow from indica ad Apache di consentire l'accesso alla risorsa a tutte le macchine della rete 192.168.90.0/24

Regole addizionali

Le direttive Deny e Allow possono essere combinate e ripetute, come in questo esempio:

<Directory /var/www/esempio.it/www/>
          Order deny,allow
          Deny from 192.168.100.100
          Deny from 10.0.0.0/24
          Allow from 192.168.90.0/24
          Allow from 10.0.0.11
</Directory>

Apache permette anche di specificare regole di accesso basate sugli hostname e non solo sugli indirizzi IP. Ad esempio:

<Directory /var/www/esempio.it/www/>
          Order deny,allow
          Deny from 192.168.100.100
          Deny from 10.0.0.0/24
          Deny from dominio.it
          Allow from dominio.org
          Allow from 192.168.90.0/24
          Allow from 10.0.0.11
</Directory>

E' anche possibile costruire delle regole di accesso basate sulle variabili della sessione HTTP: questo ci permette di creare regole leggendo ad esempio il tipo di browser (user agent) o il referrer. Ad esempio:

<Directory /var/www/esempio.it/www/>
          SetEnvIf Referer google.it search_traffic
          Order Deny,Allow
          Deny from all
          Allow from env=search_traffic
</Directory>

Questa regole lavora insieme al modulo Apache mod_setenvif, in questo modo:

  1. se il referrer del visitatore coincide con google.it viene inizilizzata la variabile search_traffic
  2. viene negato a tutti l'accesso alla risorsa
  3. viene consentito l'accesso s chi ha la variabile search_traffic impostata

Controllo degli accessi Credential-based

Un altro modo per proteggere le directory del nostro web server è attraverso una richiesta di autenticazione.

Configurare la HTTP Authentication

Per proteggere tramite password una directory del web server occorre innanzitutto inserire le seguenti linee all'interno della sezione <Directory> appropriata del nostro file di configurazione di Apache o del Virtual Host:

<Directory /var/www/esempio.it/www/>
         AuthType Basic
         AuthUserFile /var/auth/.htpasswd
         AuthName "Richiedi le credenziali per entrare"
         Require valid-user
</Directory>

La direttiva:

  • AuthType specifica quale metodo di autenticazione dovrà essere utilizzato da Apache quando stabilisce una connessione con un client. Basic è il metodo più semplice, ma invia in chiaro la password di autenticazione
  • AuthUserFile specifica il percorso completo dove si trova il file delle password
  • AuthName contiene il messaggio visualizzato dal browser all'atto della richiesta di autenticazione
  • Require valid-user indica ad Apache che solo gli utenti validi possono essere autenticati

A questo punto dobbiamo creare il file delle password.

Generazione del file HTTP AUTH Passwords

Per generare questo file abbiamo bisogno di alcuni tool:

# apt-get update
# apt-get upgrade
# apt-get install apache2-utils

Procediamo poi con la creazione del file:

# htpasswd -c /var/auth/.htpasswd utente_ok
Pssword: ********
Retype Password: ********

Una volta creato il file e aggiunto l'utente utente_ok possiamo in ogni momento aggiungere altri utenti semplicemente ripetendo il comando precedente, ma omettendo l'opzione -c (create):

# htpasswd -b /srv/auth/.htpasswd ferdy 5t1ck6

L'opzione -b ci permette di specificare la password direttamente nel comando.
Il file di autenticazione sarà quindi qualcosa del genere:

# less /var/auth/.htpasswd
utente_ok:isiA3Q4djD/.Q
ferdy:{SHA}x9VvwHI6dmgk9VTE0A8o6hbCw2s=
utente2:$apr1$vVzQJxvX$6EyHww61nnZr6IdQv0pVx/

Possiamo restringere ulteriormente gli accessi alla risorsa sostituendo la linea:

Require valid-user

con

Require utente_ok ferdy

Con queste indicazioni all'utente utente2, pur appartenendo egli al file di autenticazione, sarà impedito l'accesso alla directory.


--Ferdybassi 16:09, 16 apr 2011 (CEST)