Apache2: proteggere directory mediante autenticazione: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
 
(10 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
== Introduzione ==
== Introduzione ==
In molte situazioni i servizi HTTP sono pubblici e pensati per essere accessibili da chiunque abbia la possibilità di connettersi.
In molte situazioni i servizi HTTP sono pubblici e pensati per essere accessibili da chiunque abbia la possibilità di connettersi.
Riga 22: Riga 23:
* ''Deny from all'' dice ad Apache di proibire a chiunque l'accesso alla directory
* ''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
* ''Allow from'' indica ad Apache di consentire l'accesso alla risorsa a tutte le macchine della rete 192.168.90.0/24
'''Da Debian Jessie (Apache 2.4.x)''':
<pre>
<Directory /var/www/esempio.it/www/>
          Require ip 192.168.90.0/24
</Directory>
</pre>
La direttiva non prevede più l'utilizzo di ''Order deny,allow'' e ''Deny from all''
In questo caso specifico basta:
* ''Require ip'' per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutte le macchine della rete 192.168.90.0/24


=== Regole addizionali ===
=== Regole addizionali ===
Riga 34: Riga 46:
</Directory>
</Directory>
</pre>
</pre>
'''Da Debian Jessie (Apache 2.4.x)''':
<pre>
<Directory /var/www/esempio.it/www/>
          Require not ip 192.168.100.100
          Require not ip 10.0.0.0/24
          Require ip 192.168.90.0/24
          Require ip 10.0.0.11
</Directory>
</pre>
La direttiva non prevede più l'utilizzo di ''Order deny,allow'', ''Deny from'' e ''Allow from''
In questo caso specifico basta:
* ''Require not ip'' per indicare ad Apache di negare l'accesso alla risorsa a tutte le macchine delle reti 192.168.100.100 e 10.0.0.0/24
* ''Require ip'' per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutte le macchine delle reti 192.168.90.0/24 e 10.0.0.11
Apache permette anche di specificare regole di accesso basate sugli hostname e non solo sugli indirizzi IP. Ad esempio:
Apache permette anche di specificare regole di accesso basate sugli hostname e non solo sugli indirizzi IP. Ad esempio:
<pre>
<pre>
Riga 46: Riga 74:
</Directory>
</Directory>
</pre>
</pre>
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:
'''Da Debian Jessie (Apache 2.4.x)''':
<pre>
<Directory /var/www/esempio.it/www/>
          Require not ip 192.168.100.100
          Require not ip 10.0.0.0/24
          Require not host dominio.it
          Require host dominio.org
          Require ip 192.168.90.0/24
          Require ip 10.0.0.11
</Directory>
 
</pre>
La direttiva non prevede più l'utilizzo di ''Order deny,allow'', ''Deny from'' e ''Allow from''
In questo caso specifico sono state aggiunte due regole:
* ''Require not host'' per indicare ad Apache di negare l'accesso alla risorsa a tutti gli host del dominio "dominio.it"
* ''Require host'' per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutti gli host del dominio "dominio.org"
 
 
 
È 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:
<pre>
<pre>
<Directory /var/www/esempio.it/www/>
<Directory /var/www/esempio.it/www/>
Riga 55: Riga 102:
</Directory>
</Directory>
</pre>
</pre>
Questa regole lavora insieme al modulo Apache mod_setenvif, in questo modo:
Questa regola lavora insieme al modulo Apache mod_setenvif, in questo modo:
# se il referrer del visitatore coincide con google.it viene inizilizzata la variabile ''search_traffic''
# se il referrer del visitatore coincide con google.it viene inizializzata la variabile ''search_traffic''
# viene negato a tutti l'accesso alla risorsa
# viene negato a tutti l'accesso alla risorsa
# viene consentito l'accesso s chi ha la variabile ''search_traffic'' impostata
# viene consentito l'accesso a chi ha la variabile ''search_traffic'' impostata


== Controllo degli accessi Credential-based ==
== Controllo degli accessi Credential-based ==
Riga 93: Riga 140:
Retype Password: ********
Retype Password: ********
</pre>
</pre>
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 <code>-c</code> (create):
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 <code>-c</code> (''create''):
<pre>
<pre>
# htpasswd -b /srv/auth/.htpasswd ferdy 5t1ck6
# htpasswd -b /srv/auth/.htpasswd ferdy 5t1ck6
Riga 110: Riga 157:
Require valid-user
Require valid-user
</pre>
</pre>
con
con:
<pre>
<pre>
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/>
 
 
{{Autori
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 16:09, 16 apr 2011 (CEST)
|Estesa_da =
: [[Utente:Selky|Selky]]
}}


----
[[Categoria:Web server]]
--[[Utente:Ferdybassi|Ferdybassi]] 16:09, 16 apr 2011 (CEST)
[[Categoria:Debian e sicurezza]]

Versione attuale delle 14:14, 13 nov 2015

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"

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


Da Debian Jessie (Apache 2.4.x):

<Directory /var/www/esempio.it/www/>
          Require ip 192.168.90.0/24
</Directory>

La direttiva non prevede più l'utilizzo di Order deny,allow e Deny from all In questo caso specifico basta:

  • Require ip per indicare ad Apache che l'accesso alla risorsa è consentito solo 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>

Da Debian Jessie (Apache 2.4.x):

<Directory /var/www/esempio.it/www/>
          Require not ip 192.168.100.100
          Require not ip 10.0.0.0/24
          Require ip 192.168.90.0/24
          Require ip 10.0.0.11
</Directory>

La direttiva non prevede più l'utilizzo di Order deny,allow, Deny from e Allow from In questo caso specifico basta:

  • Require not ip per indicare ad Apache di negare l'accesso alla risorsa a tutte le macchine delle reti 192.168.100.100 e 10.0.0.0/24
  • Require ip per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutte le macchine delle reti 192.168.90.0/24 e 10.0.0.11


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>

Da Debian Jessie (Apache 2.4.x):

<Directory /var/www/esempio.it/www/>
          Require not ip 192.168.100.100
          Require not ip 10.0.0.0/24
          Require not host dominio.it
          Require host dominio.org
          Require ip 192.168.90.0/24
          Require ip 10.0.0.11
</Directory>

La direttiva non prevede più l'utilizzo di Order deny,allow, Deny from e Allow from In questo caso specifico sono state aggiunte due regole:

  • Require not host per indicare ad Apache di negare l'accesso alla risorsa a tutti gli host del dominio "dominio.it"
  • Require host per indicare ad Apache che l'accesso alla risorsa è consentito solo a tutti gli host del dominio "dominio.org"


È 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 regola lavora insieme al modulo Apache mod_setenvif, in questo modo:

  1. se il referrer del visitatore coincide con google.it viene inizializzata la variabile search_traffic
  2. viene negato a tutti l'accesso alla risorsa
  3. viene consentito l'accesso a 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.




Guida scritta da: Ferdybassi 16:09, 16 apr 2011 (CEST) Swirl-auth20.png Debianized 20%
Estesa da:
Selky
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized