GiBiLamp 4 – Mysql, PHP e VSFTPD
Dopo Linux e Apache, proseguiamo la nostra serie dedicata a GiBiLamp affrontando tutti i software aggiuntivi del nostro sistema LAMP + V: MySQL, PHP e VSFTPD.
MySQL
L’installazione del DBMS (Database Management System) MySQL su sistema Ubuntu è molto semplice, è sufficiente digitare la seguente riga di codice:
apt-get install mysql-server-5.1 mysql-client-5.1
Durante la fase di installazione ci verrà richiesta la password di amministratore del DBMS, che sarà bene generare in modo oculato e custodire gelosamente, dato che l’utente in questione sarà in grado di eseguire qualsiasi operazione sui db ospitati dal nostro server.
Per provare l’avvenuta installazione del DBMS è sufficiente provare a collegarsi allo stesso tramite la linea di comando:
mysql -u root -p
A questo punto viene richiesta la password dell’utente amministratore, ed una volta inserita sarete all’interno del tool di amministrazione di MySQL.
Esistono ovviamente molti strumenti interattivi e maggiormente user-friendly per gestire MySQL, uno dei quali è phpMyAdmin, del quale parleremo di seguito in questo capitolo.
PHP
Il linguaggio di scripting scelto per il nostro server Web è PHP, il linguaggio più diffuso e maggiormente utilizzato dagli sviluppatori web.
In questo caso noi non installeremo PHP nel modo tradizionale – ovvero tramite il modulo apache libapache2-mod-php5 – ma sfrutteremo le maggiori performance di FastCGI, accoppiandolo con suEXEC per separare i permessi di ogni singolo script (e quindi di ogni sito).
Con questa configurazione possiamo:
- aumentare le performance del nostro server
- separare i permessi di esecuzione di ogni sito ospitato, prevenendo la possibilità che uno script nocivo lanciato su un sito possa fare danni anche sugli altri
- creare un file di configurazione php.ini per ogni sito, personalizzandone i parametri.
Ecco i dettagli di installazione.
Cominciamo con il rimuovere AppArmor, che genera delle complicazioni a FastCGI, con i seguenti comandi:
/etc/init.d/apparmor stop update-rc.d -f apparmor remove apt-get remove apparmor apparmor-utils
Installiamo poi i pacchetti necessari per abilitare PHP in modalità FastCGI e suEXEC:
apt-get install apache2-suexec libapache2-mod-fgcid php5-cgi
Abilitiamo i moduli relativi con i seguenti comandi:
a2enmod rewrite a2enmod suexec a2enmod include a2enmod fgcid
Modifichiamo il file php.ini presente all’interno della cartella /etc/php5/cgi andando ad inserire questa riga:
cgi.fix_pathinfo = 1
E infine, riavviamo apache:
apache2ctl graceful
Ora ogni singolo sito che viene generato sul nostro web-server può avere un diverso possessore e di conseguenza è protetto dagli script eseguiti sugli altri. Per sfruttare questa opzione sono necessari dei passi di configurazione aggiuntivi a livello di virtual host, che vedremo nel capitolo seguente.
Wrapper
suEXEC limita l’esecuzione di script PHP all’interno della Document Root di ciascun virtual host, questo però impedisce ai nostri script di utilizzare le librerie php ed i binari stessi del linguaggio, contenuti in /usr/lib/cgi-bin/php .
Per aggirare il problema si deve generare un wrapper per ogni sito che riesca a richiamare tali binari.
Creiamo quindi una cartella chiamata per esempio fcgi-wrapper nella Document Root globale (solitamente /var/www) e al suo interno creiamo una sottocartella per ciascun virtual host al cui interno inseriremo gli script php-fcgi-starter. Il nome di ciascuna sottocartella può essere scelto a piacere, è sufficiente che ce lo ricordiamo perchè tale parametro – come vedremo tra poco – va inserito tra le opzioni del relativo virtual host.
Supponendo di avere creato un virtual host per il sito www.gibilogic.com, potremmo avere quindi un path completo del tipo:
/var/www/fcgi-wrapper/www.gibilogic.com/php-fcgi-starter
Il contenuto dello script php-cgi-starter è il seguente:
#!/bin/sh PHPRC=/etc/php5/cgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/lib/cgi-bin/php
Lo script wrapper può essere adattato perchè richiami un file php.ini diverso rispetto a quello standard, in questo modo:
#!/bin/sh PHPRC=/etc/php5/cgi/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/lib/cgi-bin/php -c /var/www/fcgi-wrapper/www.gibilogic.com/php.ini
Dove il file php.ini personalizzato viene inserito nella medesima cartella del wrapper.
Nota: la cartella fgci-wrapper deve essere in modalità rwx per l’utente apache standard (www-data).
L’installazione del modulo FastCGI è ora ultimato, per poterne sfruttare i benefici è però necessario adattare i nuovi siti al nuovo modulo.
Vedremo tutto ciò nel prossimo capitolo sui Virtual Host.
VSFTPD
Un server web che si rispetti deve concedere ai propri utenti la possibilità di caricare nel proprio spazio web documenti o file di altro genere, è quindi bene installare un servizio ftp, in grado di offrire ad ogni utente la gestione del proprio spazio.
Per installare il pacchetto VSFTPD è sufficiente il comando:
apt-get install vsftpd
E’ poi bene adattare il file di configurazione per non fare uscire gli utenti dal proprio sito che diventa la home directory a loro assegnata. Ecco un esempio di file di configurazione presente in /etc/vsftpd.conf:
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES xferlog_std_format=YES connect_from_port_20=YES idle_session_timeout=3600 data_connection_timeout=120 ftpd_banner=FTP Nomeserver. # chroot di ogni utente chroot_local_user=YES # utenti che non sottoposti a chroot chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
Dopo aver modificato il file di configurazione è necessario riavviare il servizio con il comando:
/etc/init.d/vsftpd restart
A questo punto abbiamo una struttura completa LAMP + V pronta per essere sfruttata.
Serie GiBiLamp
< Vai all’articolo precedente nella serie GiBiLamp
Vai all’articolo successivo nella serie GiBiLamp >
Mysql – M
L’installazione del DBMS Mysql su sistema Ubuntu è molto semplice, è sufficiente digitare la seguente riga di codice:
-
apt-get install mysql-server-5.1 mysql-client-5.1
Durante la fase di installazione ci verrà richiesta la password di amministratore del DBMS, che sarà bene generare in modo oculato e custodire gelosamente, dato che l’utente in questione sarà in grado di eseguire qualsiasi operazione sui db ospitati dal nostro server.
Per provare l’avvenuta installazione del DBMS è sufficiente provare a collegarsi allo stesso tramite la linea di comando, ecco i dettagli:
-
mysql -u root -p
A questo punto viene richiesta la password dell’utente amministratore, ed una volta inserita sarete all’interno di Mysql e potete gestire qualsiasi database.
Esistono ovviamente molti strumenti interattivi per gestire db Mysql uno dei quali è phpMyAdmin, del quale parleremo di seguito in questo capitolo.
PHP – P
Il linguaggio di scripting scelto per il nostro server Web è PHP 5.2, il linguaggio più diffuso e maggiormente utilizzato dagli sviluppatori web.
In questo caso noi installeremo PHP non nel modo classico ovvero tramite il modulo apache libapache2-mod-php5, ma sfrutteremo le maggiori performance di php5 fast-cgi, accoppiandolo poi con su-exec per separare i permessi di ogni singolo script.
Con questa configurazione possiamo:
-
aumentare le performance del nostro server
-
separare i permessi di esecuzione degli script di ogni sito ospitato, prevenendo la possibilità che uno script nocivo lanciato su un sito possa cancellare dati presenti su un altro
-
creare un file di configurazione php.ini per ogni sito, personalizzandone i parametri.
Ecco i dettagli di installazione:
-
rimuoviamo AppArmor, che genera delle complicazioni a fast-cgi con i seguenti comandi:
-
/etc/init.d/apparmor stop
-
update-rc.d -f apparmor remove
-
apt-get remove apparmor apparmor-utils
-
-
Installiamo i pacchetti necessari per abilitare php fastcgi e su-exec:
-
apt-get install apache2-suexec libapache2-mod-fgcid php5-cgi
-
-
Abilitiamo i moduli seguenti:
-
a2enmod rewrite
-
a2enmod suexec
-
a2enmod include
-
a2enmod fgcid
-
-
Modifichiamo il file php.ini presente all’interno della cartella /etc/php5/cgi andando ad inserire questa riga:
-
cgi.fix_pathinfo = 1
-
-
Riavviamo apache:
-
apache2ctl graceful
-
Ora ogni singolo sito che viene generato sul nostro web-server avrà un unico utente possessore e di conseguenza ogni sito sarà protetto dagli script eseguiti sugli altri. Questa opzione prevede però dei passi di configurazione aggiuntivi a livello di virtual host. Vedremo poi nel capitolo seguente quali sono queste opzioni.
SuExec limita l’esecuzione di script PHP all’interno della Document Root, questo però impedisce ai nostri script di utilizzare le librerie php ed i binari stessi del linguaggio, contenuti in /usr/lib/cgi-bin/php . Per aggirare il problema si deve generare un wrapper per ogni sito creato che riesca a richiamare tali binari. Per cerare tale wrapper è necessario creare una cartella nella Document Root, p.es /var/www/php-fgci-scripts e per ogni sito creare la cartella nome_dominio in cui inserire lo script php-fcgi-starter. Il path completo sarà:
-
/var/www/php-fgci-scripts/nome_dominio/fcgi-starter
Il cui contenuto potrà essere:
#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php
Lo script wrapper può essere adattato perchè richiami un file php.ini diverso rispetto a quello standard, eccone un esempio:
#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php -c /var/www/php-fcgi-scripts/nomedominio/php.ini
Dove il file php.ini personalizzato viene inserito nella medesima cartella del wrapper.
Una nota, la cartella php-fgci-scripts deve essere in rwx per l’utente apache standard (www-data).
L’installazione del modulo fastcgi è ora ultimato, per poterne sfruttare i benefici è però necessario adattare i nuovi siti al nuovo modulo. Vedremo tutto ciò nel prossimo capitolo sui Virtual Host.
Vsftpd – V
Un server web che si rispetti deve concedere ai propri utenti la possibilità di caricare nel proprio spazio web documenti o file di altro genere, è quindi bene installare il servizio ftp, in grado di offrire ad ogni utente la gestione del proprio spazio.
Per installare il pacchetto è sufficiente il comando:
-
apt-get install vsftpd
E’ poi bene adattare il file di configurazione per non fare uscire gli utenti dal proprio “sito” ovvero la home directory a loro assegnata, ecco un esempio di file di configurazione, presente in /etc/vsftpd.conf:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
connect_from_port_20=YES
idle_session_timeout=3600
data_connection_timeout=120
ftpd_banner=FTP Nomeserver.
# chroot di ogni utente
chroot_local_user=YES
# utenti che non sottoposti a chroot
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
Dopo aver modificato il file di configurazione è necessario riavviare il servizio con il comando:
-
/etc/init.d/vsftpd restart
A questo punto abbiamo una strutture LAMP + V pronta per essere sfruttata.