User Tools

Site Tools


doc:appunti:linux:sa:apache

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:apache [2017/09/26 11:48] – [Apache 2.4 con VirtualHost con php-fpm 7.0] niccolodoc:appunti:linux:sa:apache [2021/12/03 10:08] (current) – [Apache 2.4] niccolo
Line 134: Line 134:
 AuthType Basic AuthType Basic
 AuthName "Area protetta" AuthName "Area protetta"
 +AuthBasicProvider file
 AuthUserFile /etc/apache2/htpasswd AuthUserFile /etc/apache2/htpasswd
 +#Require user username1 username2
 Require valid-user Require valid-user
 </file> </file>
Line 145: Line 147:
 </code> </code>
  
-A livello di configurazione generaleverificare che l'accesso ai file **''.ht''** sia inibito e che la directory da proteggere abbia il giusto ''AllowOverride'':+Nella configurazione generale verificare che la directory da proteggere abbia il giusto ''AllowOverride''. In questo esempio  (Apache 2.2 e 2.4) si consente - nel file **.htaccess** - anche l'utilizzo dell'opzione ''Options +Indexes'' , non strettamente necessaria ai fini dell'autenticazione: 
 + 
 +<file> 
 +<Directory /var/www/riservata/> 
 +    AllowOverride AuthConfig Limit Options=Indexes 
 +</Directory> 
 +</file> 
 + 
 +Per sicurezza conviene inibire l'accesso ai file **''.ht''**, ecco la ricetta per Apache 2.2 e per Apache 2.4 (per Debian dovrebbe essere inclusa nella configurazione predefinita):
  
 <file> <file>
Line 152: Line 162:
     Deny from all     Deny from all
 </Files> </Files>
 +</file>
  
-<Directory /path/to/directory/+<file> 
-    AllowOverride AuthConfig Limit +<FilesMatch "^\.ht"
-</Directory>+    Require all denied 
 +</FilesMatch>
 </file> </file>
  
-Per consentire l'autenticazione con il file **.htaccess** è necessario che nel file di configurazione di Apache esista la direttiva **AllowOverride**, eventualmente solo per la directory necessaria:+È possibile creare una **eccezione all'autenticazione** in una sottodirectory, creando un file **.htaccess** del tipo:
  
 <file> <file>
-<Directory /var/www/riservata/> +# Allows any user to see this directory without authentication. 
-    AllowOverride AuthConfig Limit Options=Indexes +Require all granted 
-</Directory>+ 
 +# For Apache 2.4 
 +#Satisfy any
 </file> </file>
  
-Nell'esempio sopra è stato indicato che nel file .htaccess è possibile inserire anche l'opzione ''Options +Indexes''. 
 ===== Autenticazione Digest ===== ===== Autenticazione Digest =====
  
Line 277: Line 290:
      AuthBasicAuthoritative Off      AuthBasicAuthoritative Off
      AuthUserFile /dev/null      AuthUserFile /dev/null
-     Require user niccolo angela+     Require user niccolo mario
 </Directory> </Directory>
 </file> </file>
Line 289: Line 302:
 ===== Controllo di accesso su indirizzo IP ===== ===== Controllo di accesso su indirizzo IP =====
  
-FIXME La sintassi per Apache 2.4 con il modulo **mod_authz_core** è cambiata! Vedere **[[http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html|Apache Module mod_authz_core]]**+==== Apache 2.4 ==== 
 + 
 +La sintassi per Apache 2.4 con il modulo **mod_authz_core** è cambiata! Vedere **[[http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html|Apache Module mod_authz_core]]**. Un esempio base: 
 + 
 +<file> 
 +<Directory /var/www/private_dir> 
 +Require ip 185.32.54.97 185.12.76.143 
 +</Directory> 
 +</file> 
 + 
 +Per delegare completamente il controllo di accesso ad un file **.htaccess** è necessario mettere la direttiva **AllowOverride All** nella configurazione di Apache, qualcosa del genere: 
 + 
 +<file> 
 +<Directory /var/www/html/private> 
 +    Options -Indexes 
 +    AllowOverride All 
 +</Directory> 
 +</file> 
 + 
 +Quindi il file **.htaccess** potrà includere direttive del tipo: 
 + 
 +<file> 
 +<IfModule authz_core_module> 
 +    <RequireAny> 
 +        Require host host.rigacci.org 
 +        Require ip 111.111.222.222 
 +    </RequireAny> 
 +</IfModule> 
 +</file> 
 + 
 +Oltre alla direttiva **RequireAny** che richiede che sia soddisfatta almeno una delle condizioni (operatore **OR**), esiste la direttiva **RequireAll** che implica l'operatore **AND** per tutte le condizioni. 
 + 
 +==== Apache 2.2 ====
  
 Per consentire l'accesso ad una directory solo a determinati indirizzi IP: Per consentire l'accesso ad una directory solo a determinati indirizzi IP:
Line 308: Line 353:
 ^ Allow from 10.1.0.0/255.255.0.0         | Network/netmask pair  | ^ Allow from 10.1.0.0/255.255.0.0         | Network/netmask pair  |
 ^ Allow from 10.1.0.0/16                  | Network/nnn CIDR specification  | ^ Allow from 10.1.0.0/16                  | Network/nnn CIDR specification  |
 +
 +===== Verifica combinata username o indirizzo IP =====
 +
 +Con questa configurazione di **Apache 2.4** si consente l'accesso a determinati **indirizzi IP** oppure con **autenticazione** su htpasswd. Le clausole **Require** possono essere combinate anche in altro modo, ad esempio **%%<RequireAll>%%** se si desidera che siano vere entrambe. Il **SSLRequireSSL** evita che la pagina sia richiesta via HTTP con possibilità di sniffing della password:
 +
 +<file>
 +<Directory "/privatedir">
 +    SSLRequireSSL
 +    # Athenticate on htpasswd file.
 +    AuthType Basic
 +    AuthName "Area privata"
 +    AuthBasicProvider file
 +    AuthUserFile /etc/apache2/htpasswd
 +    <RequireAny>
 +        Require user niccolo
 +        Require ip 127.0.0.0/8 ::1 192.168.3.2
 +    </RequireAny>
 +</Directory>
 +</file>
 +
 +Se si opta per la configurazione tramite file **.htaccess**, la sintassi da utilizzare è la stessa, ma si deve dare l'opportuno **AllowOverride**:
 +
 +<file>
 +<Directory "/var/www/html/privatedi">
 +    AllowOverride AuthConfig Limit
 +</Directory>
 +</file>
  
 ===== Logging degli errori PHP ===== ===== Logging degli errori PHP =====
Line 370: Line 442:
 Il flag **''[NC]''** significa //no case sensitive//, il flag **''[L]''** significa //last rule// (non se ne applicano altre), il flag **''[R]''** indica di effettuare un redirect con status code **301 Moved Permanently**. Il flag **''[NC]''** significa //no case sensitive//, il flag **''[L]''** significa //last rule// (non se ne applicano altre), il flag **''[R]''** indica di effettuare un redirect con status code **301 Moved Permanently**.
  
-Per vedere quali regole di rewrite vengono appicalte si abilita temporaneamente nella sezione VirtualHost:+Per vedere quali regole di rewrite vengono applicate si deve abilitare **nella sezione VirtualHost** (per Apache **2.2**):
  
 <file> <file>
Line 377: Line 449:
 </file> </file>
  
 +con Apache **2.4** la sintassi è diversa:
 +
 +<file>
 +LogLevel info rewrite:trace2
 +</file>
 =====  Certificato SSL ===== =====  Certificato SSL =====
  
Line 442: Line 519:
 </file> </file>
  
-===== Apache 2.4 con VirtualHost con php-fpm 7.0 =====+===== Apache 2.4 VirtualHost con php-fpm 7.0 =====
  
 Questa è la configurazione consigliata con **Debian 9 Stretch** per avere quanto segue: Questa è la configurazione consigliata con **Debian 9 Stretch** per avere quanto segue:
Line 456: Line 533:
 Non sono necessari (vanno rimossi) tutti i pacchetti utilizzati per soluzioni analoghe nelle vecchie distribuzioni: **libapache2-mod-fastcgi**, **libapache2-mod-fcgid**, **libapache2-mod-php**, **libapache2-mod-php7.0**, **apache2-suexec-custom**. Non sono necessari (vanno rimossi) tutti i pacchetti utilizzati per soluzioni analoghe nelle vecchie distribuzioni: **libapache2-mod-fastcgi**, **libapache2-mod-fcgid**, **libapache2-mod-php**, **libapache2-mod-php7.0**, **apache2-suexec-custom**.
  
-Il funzionamento è come segue:+Assicurarsi di aver abilitato il modulo **proxy_fcgi** e aver attivato la configurazione di **php7.0-fpm**:
  
-  - Apache utilizza il **modulo proxy_fcgi** per processare i file .php, tramite questo chiama l'istanza opportuna di **php-fpm** tramite un socket.+<code> 
 +a2enmod proxy_fcgi 
 +a2enconf php7.0-fpm 
 +</code> 
 + 
 +Il funzionamento è il seguente: 
 +  - Apache utilizza il **modulo proxy_fcgi** per processare i file PHP, tramite questo chiama l'istanza opportuna di **php-fpm** via Unix socket.
   - Il demone **php-fpm** mantiene un **pool separato per ogni VirtualHost**. In ciascun pool l'interprete PHP viene eseguito con un **utente diverso**.   - Il demone **php-fpm** mantiene un **pool separato per ogni VirtualHost**. In ciascun pool l'interprete PHP viene eseguito con un **utente diverso**.
  
Line 482: Line 565:
 pm.min_spare_servers = 1 pm.min_spare_servers = 1
 pm.max_spare_servers = 3 pm.max_spare_servers = 3
 +
 +;php_admin_flag[display_errors] = off
 +;php_admin_flag[log_errors] = on
 +;php_admin_value[error_log] = /var/log/php/www.virtualhost.it/php_error.log
 </file> </file>
 +
 +Nell'esempio sopra ci sono tre righe (commentate) con **impostazioni PHP** specifiche **solo per questo VirtualHost**. Attenzione che la directory dove creare il file di log deve essere scrivibile dall'utente e/o dal gruppo con cui viene eseguito il pool (nell'esempio sopra sono **vh-user** e **vh-group** rispettivamente).
  
 Nella configurazione del VirtualHost si dichiara quale pool sarà usato: Nella configurazione del VirtualHost si dichiara quale pool sarà usato:
Line 499: Line 588:
   * PHP Variables -> $_SERVER['USER']   * PHP Variables -> $_SERVER['USER']
  
-===== Apache2 con VirtualHost in FastCGI e suEXEC =====+===== Apache 2.2 VirtualHost con PHP5 FastCGI e suEXEC =====
  
-FIXME Questa configurazione è obsoleta per **Debian 9 Stretch**, dove conviene usare il pacchetto **php-fpm**.+FIXME Questa configurazione è obsoleta per **Debian 9 Stretch**, dove conviene usare il pacchetto **php-fpm** (vedi sopra).
  
 Caratteristiche richieste: Caratteristiche richieste:
Line 677: Line 766:
 </code> </code>
  
-==== PHP_AUTH_USER e PHP_AUTH_PW ====+==== Autenticazione base, variabili PHP_AUTH_USER e PHP_AUTH_PW ==== 
 + 
 +=== PHP con php7.0-fpm === 
 + 
 +Nella configurazione **Debian 9** con PHP fornito dal pacchetto **php-fpm** (PHP via proxy FastCGI), le variabili dell'autenticazione base vengono inizializzate senza ricorrere a particolari accorgimenti. 
 + 
 +=== PHP 5 con libapache2-mod-fcgid ===
  
 In un ambiente FastCGI le variabili **''%%$_SERVER['PHP_AUTH_USER']%%''** e **''%%$_SERVER['PHP_AUTH_PW']%%''** non vengono inizializzate, per simulare il comportamento tradizionale è necessario abilitare una RewriteRule e modificare il codice PHP: In un ambiente FastCGI le variabili **''%%$_SERVER['PHP_AUTH_USER']%%''** e **''%%$_SERVER['PHP_AUTH_PW']%%''** non vengono inizializzate, per simulare il comportamento tradizionale è necessario abilitare una RewriteRule e modificare il codice PHP:
doc/appunti/linux/sa/apache.1506419320.txt.gz · Last modified: 2017/09/26 11:48 by niccolo