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

Content last revised 14/08/2010 0100 UTC