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

Vai alla navigazione Vai alla ricerca
(33 versioni intermedie di uno stesso utente non sono 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
</pre>
</pre>
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 240:
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>
e riavviamo Apache:
<pre>
# systemctl restart apache2.service
</pre>
</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 281:
</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>
<pre>
# apt-cache search php5
# apt-get install php5.6-cli php5.6-fpm
</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>
# 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 327:
</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 345:
</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 365:
# 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 393:
</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 470:
</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.

Menu di navigazione