Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5 - Stretch: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
(39 versioni intermedie di 2 utenti non mostrate)
Riga 15: Riga 15:
using 127.0.0.1 for ServerName
using 127.0.0.1 for ServerName
</pre>
</pre>
Per eliminarlo è sufficiente aprire il file di configurazione di Apache2:
Per eliminarlo è sufficiente aprire il file:
<pre>
<pre>
# nano /etc/apache2/apache2.conf
# nano /etc/apache2/conf-available/fqdn.conf
</pre>
</pre>
e aggiungere la direttiva:
e aggiungere la direttiva:
<pre>
<pre>
ServerName demo
ServerName demo
</pre>
e abilitare la configurazione:
<pre>
# a2enconf fqdn
# systemctl restart apache2.service
</pre>
</pre>
Abilitate alcuni comodi moduli aggiuntivi:
Abilitate alcuni comodi moduli aggiuntivi:
<pre>
<pre>
# a2enmod expires
# a2enmod expires
# a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers
# a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers status info
</pre>
</pre>
Quindi riavviate Apache2 per fargli digerire le modifiche:
Quindi riavviate Apache2 per fargli digerire le modifiche:
Riga 84: Riga 89:
Iniziamo con il creare un file di testo che specifichi il nostro Virtual Host SSL:
Iniziamo con il creare un file di testo che specifichi il nostro Virtual Host SSL:
<pre>
<pre>
# nano /etc/apache2/sites-available/default-ssl
# nano /etc/apache2/sites-available/default-ssl.conf
</pre>
</pre>
e configuriamolo come segue:
e configuriamolo come segue:
Riga 188: Riga 193:
Per avere il supporto a PHP7 è sufficiente installare il linguaggio di scripting e il relativo modulo di supporto ad Apache2:
Per avere il supporto a PHP7 è sufficiente installare il linguaggio di scripting e il relativo modulo di supporto ad Apache2:
<pre>
<pre>
# apt install php libapache2-mod-php
# apt install php libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi php-pear php7.0-mcrypt imagemagick php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php7.0-soap php7.0-fpm php7.0-opcache php-apcu php-bcmath
</pre>
</pre>
PHP 7.0 è ormai fuori supporto, e il team di sviluppo consiglia di passare alla versione LTS 7.2 di PHP. I pacchetti per Debian Stretch di PHP 7.2 sono disponibili solo tramite un repository esterno. Per chi volesse installare PHP 7.2 su Debian Stretch consigliamo di seguire la guida apposita: [[Installare PHP 7.2 su Debian Stretch]] .
A questo punto un riavvio di Apache è sufficiente:
A questo punto un riavvio di Apache è sufficiente:
<pre>
<pre>
# /etc/init.d/apache2 reload
# systemctl reload apache2
</pre>
</pre>




Su tutte le Debian Squeeze c’è una correzione al volo da fare al file ''php.ini''. Il problema è dovuto al parametro:
Su tutte le Debian c’è una correzione al volo da fare al file ''php.ini''. Il problema è dovuto al parametro:
<pre>
<pre>
memory_limit = -1
memory_limit = -1
Riga 235: Riga 242:
e riavviando il server:
e riavviando il server:
<pre>
<pre>
# /etc/init.d/apache2 restart
# systemctl reload apache2
</pre>
=== Messa in sicurezza di PHP ===
Modifichiamo il file:
<pre>
# nano /etc/php/7.0/apache2/conf.d/99_security.ini
</pre>
con questi valori:
<pre>
allow_url_include = Off
allow_url_fopen = Off
session.use_only_cookies = 1
session.cookie_httponly = 1
expose_php = Off
display_errors = Off
register_globals = Off
disable_functions = shell_exec, escapeshellarg, escapeshellcmd, passthru, proc_close, proc_get_status, proc_nice, proc_open,proc_terminate
</pre>
</pre>
e riavviamo Apache:
<pre>
# systemctl restart apache2.service
</pre>
=== Test della configurazione ===
=== Test della configurazione ===
Prima di procedere è una buona idea verificare che tutto ciò che abbiamo fatto funzioni realmente. Per questo utilizziamo il metodo <code>phpinfo</code> di PHP5 caricandolo in una pagina di test. Partiamo col creare il file della pagina di test:
Prima di procedere è una buona idea verificare che tutto ciò che abbiamo fatto funzioni realmente. Per questo utilizziamo il metodo <code>phpinfo</code> di PHP5 caricandolo in una pagina di test. Partiamo col creare il file della pagina di test:
<pre>
<pre>
# nano -w /var/www/test.php
# nano -w /var/www/html/test.php
</pre>
</pre>
Quindi riempiamolo in questo modo:
Quindi riempiamolo in questo modo:
Riga 255: Riga 283:
</html>
</html>
</pre>
</pre>
salviamo il file e richiamiamolo nel nostro browser: '''http://123.45.67.890/test.php'''. Se tutto è andato per il verso giusto vi troverete davanti a una schermata di riepilogo delle funzionalità abilitate di PHP5.
salviamo il file e richiamiamolo nel nostro browser: '''http://123.45.67.890/test.php'''. Se tutto è andato per il verso giusto vi troverete davanti a una schermata di riepilogo delle funzionalità abilitate di PHP7.
=== Moduli aggiuntivi ===
 
Tramite le funzionalità di ricerca di aptitude diamo uno sguardo ai moduli disponibili per PHP5:
==Installazione di PHP 5.6==
Potrebbe essere necessario installare una vecchia versione di PHP affiancata a quella ufficiale presente in Stretch, ad esempio perchè alcuni siti presenti sul nostro server non girano correttamente con PHP 7.0.
<br/>
Debian Stretch offre nei repository ufficiali solo la versione 7.0 di PHP, ma possiamo utilizzare i pacchetti .deb messi a disposizione direttamente dal maintainer dei pacchetti PHP di Debian, Ondřej Surý.
<br/>
Aggiungiamo il suo repository al nostro sources.list:
<pre>
# apt-get install apt-transport-https curl
# curl https://packages.sury.org/php/apt.gpg | apt-key add -
# echo 'deb https://packages.sury.org/php/ stretch main' > /etc/apt/sources.list.d/deb.sury.org.list
# apt-get update
</pre>
E installiamo PHP 5.6:
<pre>
# apt-get install php5.6-cli php5.6-fpm libapache2-mod-php5.6
</pre>
<pre>
# apt install dh-php5.6 libapache2-mod-php5.6filter libexpect-php5.6 libgv-php5.6 libow-php5.6 libphp5.6-embed php5.6-adodb php5.6-apcu php5.6-cgi php5.6-curl php5.6-dbg php5.6-enchant php5.6-exactimage php5.6-ffmpeg php5.6-fpm php5.6-gd php5.6-gdcm php5.6-geoip php5.6-gmp php5.6-imagick php5.6-idn php5.6-imap php5.6-interbase php5.6-intl php5.6-json php5.6-ldap php5.6-librdf php5.6-mapscript php5.6-mcrypt php5.6-memcache php5.6-memcached php5.6-mhash php5.6-ming php5.6-mongo php5.6-mssql php5.6-mysql php5.6-odbc php5.6-pgsql php5.6-ps php5.6-pspell php5.6-radius php5.6-recode php5.6-remctl php5.6-rrd php5.6-sasl php5.6-snmp php5.6-sqlite php5.6-svn php5.6-sybase php5.6-tidy php5.6-xcache php5.6-xmlrpc php5.6-xsl
</pre>
Verifichiamo che tutto sia a posto:
<pre>
# php7.0 -v
PHP 7.0.15-1 (cli)
# php5.6 -v
PHP 5.6.30-5+0~20170223133422.27+stretch~1.gbp1ee0cb (cli)
</pre>
La versione predefinita è rimasta la 7.0, come possiamo facilmente constatare:
<pre>
# php -v
PHP 7.0.15-1 (cli)
</pre>
ma possiamo cambiarla in maniera molto veloce:
<pre>
<pre>
# apt-cache search php5
# update-alternatives --config php
</pre>
</pre>
Scegliete '''solo''' quelli che vi servono e installateli nel solito modo, tramite <tt>apt</tt>.


== Installazione di MySQL ==
== Installazione di MySQL ==
Riga 274: Riga 332:
</pre>
</pre>
La password che sceglierete sarà valida sia per l'utente MySQL root@localhost sia per l'utente root@demo.
La password che sceglierete sarà valida sia per l'utente MySQL root@localhost sia per l'utente root@demo.
<br/>
Mettiamo in sicurezza l'installazione di MySQL avviando il tool apposito:
<pre>
# mysql_secure_installation
</pre>
e rispondendo alle domande autoesplicative.
<br/><br/>
<br/><br/>
Per creare un utente in MySQL è necessario accedere come ''root'' (o da altro utente che ha i privilegi di creazione degli utenti): aprite un terminale e digitate:
Per creare un utente in MySQL è necessario accedere come ''root'' (o da altro utente che ha i privilegi di creazione degli utenti): aprite un terminale e digitate:
Riga 286: Riga 350:
</pre>
</pre>
=== L'interfaccia phpMyAdmin ===
=== L'interfaccia phpMyAdmin ===
Per amministrare i nostri database può essere comoda un'interfaccia grafica raggiungibile da browser. A questo scopo installiamo '''phpMyAdmin''':
Per amministrare i nostri database può essere comoda un'interfaccia grafica raggiungibile da browser. A questo scopo installiamo '''phpMyAdmin''' (e adminer, un'interfaccia semplificata):
<pre>
<pre>
# apt install phpmyadmin
# apt install phpmyadmin adminer
</pre>
</pre>
Durante l'installazione vi verrà chiesto di indicare il web server in esecuzione sulla vostra machina. Indicate apache2:
Durante l'installazione vi verrà chiesto di indicare il web server in esecuzione sulla vostra machina. Indicate apache2:
Riga 306: Riga 370:
# apt-get install mcrypt
# apt-get install mcrypt
# mysql -uroot -p
# mysql -uroot -p
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'LaMiaPassword';
CREATE USER 'sqlroot'@'localhost' IDENTIFIED BY 'LaMiaPassword';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'sqlroot'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
FLUSH PRIVILEGES;
</pre>
</pre>
Riga 334: Riga 398:
</pre>
</pre>
Da adesso, anche digitando '''http://123.45.67.890/phpmyadmin''', sarete rigirati verso l'equivalente pagina HTTPS.
Da adesso, anche digitando '''http://123.45.67.890/phpmyadmin''', sarete rigirati verso l'equivalente pagina HTTPS.
== Sicurezza della configurazione e prestazioni del server ==
Di seguito alcune guide specifiche per migliorare la protezione e le prestazioni del server Apache appena installato:
* Migliorare le prestazioni con Memcached: [[http://guide.debianizzati.org/index.php/Installare_Memcached_in_un_server_Apache2_-_Stretch Memcached]]
* Configurare i Virtual Hosts: [[http://guide.debianizzati.org/index.php/Apache_e_Virtual_Hosts:_configurare_Apache2_per_ospitare_pi%C3%B9_siti_web Virtual Hosts]]
* Migliorare le prestazioni con PageSpeed: [[http://guide.debianizzati.org/index.php/Incrementare_le_prestazioni_di_Apache_con_mod_pagespeed Mod_PageSpeed]]
* Hardening di Apache2: [[http://guide.debianizzati.org/index.php/Hardening_di_un_web_server_Apache Hardening di Apache2]]
* Ottimizzare la banda di Apache2: [[http://guide.debianizzati.org/index.php/Ottimizzare_la_banda_di_Apache Ottimizzare la banda]]
* Individuare gli script PHP che inviano SPAM: [[http://guide.debianizzati.org/index.php/Individuare_gli_script_PHP_che_inviano_SPAM Script PHP che inviano SPAM]]
Non sono impostazioni necessarie per il corretto funzionamento di Apache, ma sono '''fortemente consigliate'''.
==Note e changelog==
Da Debian Jessie è stato introdotto Apache 2.4 al posto del 2.2, e anche il sistema di configurazione è cambiato leggermente.
<br/>
Invece della directory <code>/etc/apache2/conf.d/</code> abbiamo <code>/etc/apache2/conf-enabled/</code> che contiene dei link a <code>/etc/apache2/conf-available/</code>.
<br/>
I file di configurazione in <code>/etc/apache2/sites-enabled</code>/ devono terminare con l'estensione <code>.conf</code>.
<br/>
La direttiva <code>NameVirtualHost *:80</code> e analoga per la porta 443 non serve più.
<br/>
Una directory pubblicata tramite Alias deve avere l'opzione <code>Require all granted</code> altrimenti ogni tentativo di accedere al suo contenuto risulta in un errore <code>AH01630: client denied by server configuration</code>.
<br/><br/>
Una delle modifiche classiche da fare è la seguente:
<pre>
# Configuration for Apache 2.2
Order allow,deny
Allow from all
# Configuration for Apache 2.4 with mod_authz_host.
Require all granted
</pre>
In maniera analoga per negare ogni richiesta:
<pre>
# Configuration for Apache 2.2
Order deny,allow
Deny from all
# Configuration for Apache 2.4 with mod_authz_host.
Require all denied
</pre>
Un controllo di accesso basato sull'indirizzo IP è fatto in questo modo:
<pre>
Require local
Require ip 127.0.0.0/8 ::1 185.21.73.97 10.0.1.0/24
</pre>
Un'altro cambiamento non da poco è la direttiva <code>AllowOverride</code>, che adesso ha valore predefinito <code>None</code>. Questo significa ad esempio che tutti i file .htaccess smettono di funzionare!


== Apache2: layout di configurazione ==
== Apache2: layout di configurazione ==
Riga 368: Riga 475:
</pre>
</pre>
Su questo web server il solo sito ad essere visibile sarà perciò quello chiamato <code>default</code>.
Su questo web server il solo sito ad essere visibile sarà perciò quello chiamato <code>default</code>.
==== mods-available ====
=== mods-available ===
Questa directory contiene i moduli di Apache2 pronti per essere resi disponibili.
Questa directory contiene i moduli di Apache2 pronti per essere resi disponibili.
=== mods-enabled ===
=== mods-enabled ===
Questa directory, come nel caso dei virtual host, contiene i link simbolici ai moduli effettivamente abilitati sul web server.
Questa directory, come nel caso dei virtual host, contiene i link simbolici ai moduli effettivamente abilitati sul web server.
Riga 442: Riga 550:
</pre>
</pre>
Descrive il tempo in secondi in cui ogni connessione persistente attiva aspetta per la prossima richiesta, prima di chiudersi definitivamente.
Descrive il tempo in secondi in cui ogni connessione persistente attiva aspetta per la prossima richiesta, prima di chiudersi definitivamente.
==== prefork MPM ====
Durante l'installazione di Apache2 abbiamo optato per il pacchetto <code>apache2-mpm-prefork</code>, preferendolo al pacchetto <code>apache2-mpm-worker</code>. Vi rimando alla documentazione ufficiale di Apache2 per le differenze.<br>
Questo parametro definisce il comportamento di Apache2 MPM prefork.<br>
Default:
<pre>
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers      5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild  0
</IfModule>
</pre>
* '''StartServers''': il numero di processi figlio creati all'avvio
* '''MinSpareServers''': il numero minimo di processi figlio inattivi (idle)
* '''MaxSpareServers''': il numero massimo di processi figlio inattivi (idle)
* '''MaxClients''': imposta il numero massimo di richieste contemporanee gestibili da Apache
* '''MaxRequestsPerChild''': imposta quante richieste saranno gestite da un processo figlio prima di terminare. Il valore 0 indica che il processo non termina mai. Modificare questo valore può aiutare la gestione della memoria RAM del server.
==== ServerName ====
==== ServerName ====
Default: Non impostato
Default: Non impostato

Menu di navigazione