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.

linux, sistemista