LAMP in aptosid
L'acronimo LAMP si riferisce ad un insieme di programmi liberi comunemente usati insieme per far funzionare siti o server web dinamici:
Linux, il sistema operativo
Apache, il server web
MySQL, il sistema di gestione dei database (o server database)
Perl, PHP, e/o Python, i linguaggi di scripting
ATTENZIONE: Mai usare il PC dedicato al lavoro quotidiano come server web! Utilizzare un apposito PC per quella funzione e per nessun'altra!
Usi di un server:
a) un server locale di prova per progettisti web senza connessione internet, che è lo scopo di questo capitolo;
b) un server privato "chiuso" connesso alla rete;
c) un server web privato pienamente accessibile da internet;
d) un server web commerciale. Questo va oltre lo scopo del nostro manuale.
Requisiti minimi
Almeno 256 Mb di ram. Una quantità inferiore può causare molti problemi in quanto un server MySQL richiede molta ram per funzionare correttamente. In caso di scarsità di ram MySQL produrrà un errore tipo "cannot connect to mysql.sock" ovvero "non posso connettermi a mysql.sock".
I pacchetti che devono essere installati sono:
apache2 apache2-utils apache2-mpm-prefork php5 php5-common mysql-server mysql-common libapache2-mod-php5 php5-mysql phpmyadmin
ATTENZIONE! Eseguire il seguente comando:
apt-get remove --purge splashy
Questo perché splashy va sempre in conflitto con MySQL.
Il file di configurazione di Apache è /etc/apache2/apache2.conf e la directory web è /var/www. Non modificare la configurazione di default di Debian per "mpm-worker/mpm-prefork" dal momento che va già bene così.
Per controllare se php è installato e avviato correttamente, creare un file test.php nella cartella /var/www che includa la funzione phpinfo() esattamente come mostrato sotto:
mcedit /var/www/test.php # test.php <? phpinfo(); ?>
Indirizzare il browser web su:
http://localhost/test.php oppure http://indirizzo_IP:80/test.php
Questo dovrebbe mostrare tutta la configurazione di php e le impostazioni predefinite.
Si possono modificare i valori che interessano ed impostare dei domini virtuali usando il file di configurazione di apache.
Se si vuole provare l'installazione aprire un browser web e nella barra degli indirizzi scrivere:
http://indirizzo_IP/apache2-default/
Se si ottiene un messaggio di benvenuto, l'installazione è corretta.
La directory "root" predefinita dei documenti per apache2 è /var/www. Cambiarla nel modo seguente:
mkdir /home/myself/www ln -s /home/myself/www /var/www
Eseguendo i comandi mostrati sopra si sarà in grado di modificare il sito web come utente normale.
Programmi FTP
Usare SSH e leggere attentamente su questo manuale il capitolo SSH; aptosid ha anche un altro FTP client al suo interno, ed è la funzionalità ftp di Konqueror che permette l'invio di file ai server.
Abilitare i protocolli di sicurezza validi per i server web
Il firewall
Senza un firewall non c'è assolutamente sicurezza per il server. Ricordare: bloccare TUTTO fino a che non serve qualcosa, in quel caso sbloccarla, usarla e poi bloccarla di nuovo!
21 (ftp) 22 (SSH) 25 110 (email) 443 (SSL http o https) 993 (imap ssl) 995 (pop3 ssl) 80 (http) e qualsiasi altra porta!
Proteggere in via predefinita i file del server
Un aspetto a volte incompreso di Apache è la funzionalità dell'accesso predefinito. Questa, se non si fa qualcosa per cambiarla, è il modo in cui il server può trovare il percorso verso un file attraverso le normali regole che mappano gli URL, e quindi inviarlo ai client che hanno richiesto quegli URL.
Consideriamo il seguente esempio:
1. # cd /; ln -s / public_html 2. Accessing http://localhost/~root/
Questo consentirebbe ai client di "passeggiare" a loro piacimento attraverso l'intero filesystem! Per sistemare questa cosa aggiungere il seguente blocco alla configurazione del server:
<Directory /> Order Deny,Allow Deny from all </Directory>
Questa impostazione impedirà l'accesso predefinito a locazioni del filesystem. Aggiungere dei corretti blocchi di <Directory> per permettere l'accesso solo alle aree che si vuole. Ad esempio:
<Directory /usr/users/*/public_html> Order Deny,Allow Allow from all </Directory> <Directory /usr/local/httpd> Order Deny,Allow Allow from all </Directory>
Porre particolare attenzione all'interazione delle direttive <Location> e <Directory>; per esempio, anche se <Directory /> nega l'accesso, una direttiva <Location /> potrebbe sovrascriverla.
Bisogna essere guardinghi anche nel far girare giochi con la direttiva UserDir; impostarla come "./" potrebbe avere lo stesso effetto, per root, come il primo esempio sopra. Se si sta usando Apache 1.3 o una versione superiore, è fortemente raccomandata l'inclusione della seguente linea nei file di configurazione del server:
UserDir disabled root
SSL
Avviare lo script "apache2-ssl-certificate":
# apache2-ssl-certificate
Apparirà la seguente schermata dove si potranno inserire tutte le informazioni richieste.
Creating self-signed certificate replace it with one signed by a certification authority (CA) enter your ServerName at the Common Name prompt. If you want your certificate to expire after x days call this programm with -days x ----- Generating a 1024 bit RSA private key -------- writing new private key to '/etc/apache2/ssl/apache.pem' -------- You are about to be asked to enter information that will be incorporated into your certificate request. ----------- What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank. For some fields there will be a default value, ---------- If you enter '.', the field will be left blank.
Country Name (2 letter code) [GB]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company; recommended) []: Organizational Unit Name (eg, section) []: server name (eg. ssl.domain.tld; required!!!) []: Email Address []:
Avviare lo script "a2enmod ssl":
# a2enmod ssl
Questo genererà un collegamento simbolico tra mods-available e mods-enabled.
Fare una copia del file "/etc/apache2/sites-available/default" nella cartella /etc/apache2/sites-available/ e chiamarlo "ssl":
# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
Creare un collegamento simbolico a questo nuovo file per questo uso:
# ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ oppure #a2ensite ssl
Se si vuole cambiare qualsiasi impostazione della configurazione di base farlo in /etc/apache2/apache2.conf e se si vuole cambiare la root dei documenti predefinita farlo nel file /etc/apache2/sites-available/default e riavviare il server apache.
Per riavviare il server Apache usare il seguente comando:
#service apache2 restart
Ora bisogna cambiare l'indirizzo della porta in /etc/apache2/ports.conf che in via predefinita starà in ascolto sulla porta 80 mentre ora con SSL occorre impostare l'ascolto sulla porta 443:
Listen 443
Modificare il file /etc/apache2/sites-available/ssl (o qualsiasi nome che si è dato al file di configurazione del nuovo sito ssl) e cambiare la porta 80 in 443 nel nome del sito.
Aggiungere le seguenti linee da qualche parte nel file /etc/apache2/apache2.conf:
SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem
Modificare "SSLCertificateFile /etc/apache2/ssl/apache.pem" e immettere le locazioni del file di certificato e del file della chiave certificata. Vedere l'esempio sotto:
SSLCertificateFile /etc/apache2/ssl/online.test.net.crt SSLCertificateKeyFile /etc/apache2/ssl/online.test.net.key
Impostare "ServerSignature" a off, seguire questi passi e modificare il file /etc/apache2/apache2.conf aggiungendo le seguenti linee:
ServerSignature Off ServerTokens ProductOnly
Se si vuole permettere dei tipi di file indice differenti, controllare le seguenti linee nel file /etc/apache2/apache2.conf :
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.shtml
Riavviare il server apache:
service apache2 restart
Ora si dovrebbe avere un server di prova, nel caso lo si voglia connettere ad internet, NON FARLO! Usare un altro PC puramente dedicato ad essere un server web per internet!
Fonti:
http://www.mysql-apache-php.com
http://httpd.apache.org/docs/1.3/misc/security_tips.html
http://www.debianhelp.co.uk/webserver.htm