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
Last revisionBoth sides next 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/07/07 11:57] – [Autenticazione Base] 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> 
 + 
 +==== 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 331:
 ^ 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 420:
 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 427:
 </file> </file>
  
 +con Apache **2.4** la sintassi è diversa:
 +
 +<file>
 +LogLevel info rewrite:trace2
 +</file>
 =====  Certificato SSL ===== =====  Certificato SSL =====
  
Line 442: Line 497:
 </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 511:
 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 543:
 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 566:
   * 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 744:
 </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.txt · Last modified: 2021/12/03 10:08 by niccolo