I moduli esterni
Apache è un software modulare ed in quanto tale permette di aggiungere funzionalità caricando moduli compilati separatamente. Va da sé che non devono esser installati sul server moduli esterni non usati. Verifichiamo quanto installato, come root, tramite il gestore di pacchetti Synaptic o da shell tramite il comando:
dpkg -l | grep apache
Che potrebbe restituirci una risposta simile a questa:
apache2-mpm-prefork 2.2.3-3 apache2-utils 2.2.3-3 apache2.2-common 2.2.3-3 libapache2-mod-bt 0.0.19+p4.2296-1 libapache2-mod-php5 5.2.0-6
Nel caso qualcosa non servisse (qui ad esempio: libapache2-mod-bt
) è bene disinstallarlo tramite apt-get
e/o dpkg
.
Protezione interna
Impersonificazione di Apache e directory dell'eseguibile
L'utente di default con cui gira Apache è www-data
, appartenente al gruppo omonimo.
Infatti, digitando il seguente comando
ps aux | grep apache2
Otterremo come risposta, lungo la prima colonna, i nomi degli utenti sotto i cui profili è eseguito Apache:
root /usr/sbin/apache2 -k start www-data /usr/sbin/apache2 -k start www-data /usr/sbin/apache2 -k start [...]
Le direttive del suo file di configurazione che definiscono utente e relativo gruppo sono User
e Group
:
User www-data Group www-data
Apache dev'esser inizialmente lanciato come utente root
, poiché deve porsi in ascolto su porte ben note (80, 443). Una volta lanciato, tuttavia, "figlierà" di modo che il processo attivo abbia privilegi inferiori.
Per evitare che un aggressore possa, in date circostanze, sostituire o modificare l'eseguibile del Web server, in attesa che root lo riavvii (con i relativi permessi!), è necessario che la directory /usr/sbin/apache2
sia accessibile in scrittura solo per root stesso.
File di configurazione e di log
I file di configurazione di Apache 2 sono molti, il principale dei quali è /etc/apache2/apache2.conf
(i rimanenti verranno da esso richiamati). Ogni singolo file deve poter esser modificato solo dall'utente root; Debian definisce i permessi come di seguito:
-rw-r--r-- root root apache2.conf drwxr-xr-x root root conf.d -rw-r--r-- root root envvars -rw-r--r-- root root httpd.conf [config. utente] drwxr-xr-x root root mods-available drwxr-xr-x root root mods-enabled -rw-r--r-- root root ports.conf [porta su cui Apache deve ascoltare] drwxr-xr-x root root sites-available drwxr-xr-x root root sites-enabled
I moduli e i loro file di configurazione nelle directory /usr/lib/apache2/modules/
e /etc/apache2/mods-available
devono generalmente conservare i permessi: -rw-r--r-- [644] root root.
Idem per il PID file: /var/run/apache2.pid
.
I file di log - in /var/logs/apache2/
troviamo quelli globali - devono essere ad accesso esclusivo per root (come sopra). Inoltre il file access.log
viene usato per tracciare le connessioni ad Apache, mentre il file error.log
viene usato per registrare gli errori riscontrati da Apache durante le sue operazioni. Per questi file si dovrebbero attuare accorgimenti necessari affinché i file non crescano a dismisura.
Cartella www, ovvero come installare (correttamente) un programma Web PHP
Installare un'applicazione Web altro non vuol dire che copiare la relativa directory nella directory www
del server, di solito collocata al percorso /var/www
, e definire per essa gli adeguati permessi a livello di filesystem.
Considereremo di qui innanzi, per brevità, che Apache sia configurato per un unico virtual host, come da default e quindi contenga un'unica applicazione Web o più applicazioni, diciamo, "strettamente legate". Per più virtual host la logica è comunque la medesima. Se non noto, si consiglia caldamente di reperire informazioni sul concetto di virtual host prima di proseguire nella lettura.
Torniamo a noi: ogni directory copiata deve esser di proprietà dell'utente www-data
ed accessibile solo da questi. In particolare:
Ogni directory interna alla www rappresenta un sito/programma Web: l'albero relativo dev'esser leggibile ed eseguibile solo da www-data. Ciò si ottiene con i seguenti comandi:
chown -R www-data.www-data /var/www/programma_web chmod -R 500 /var/www/programma_web/
Ogni sottodirectory interna nella quale si debba anche accedere in scrittura deve avere adeguati permessi:
chmod -R 700 /var/www/programma_web/directory_interna