Installare la suexec e mod_fcgid con apache2 in Debian Lenny
Di default il web server apache esegue gli script php di un sito con l’utente “www-data”. Per permettere ad uno script di memorizzare dati all’interno di una directory, allora i permessi di quest’ultima devono essere settati a 777 oppure il proprietario della cartella deve essere l’utente “www-data”. In questo caso, se sul vostro server web e’ attivo piu’ di un sito internet, allora uno script di un dominio potrebbe modificare i dati di un’altro. Come fare per ovviare a questo problema? Eseguendo gli script di ogni sito con un utente distinto installando la suexec, mod_fcgid ed utilizzando il php in modalita’ cgi. Piu’ difficile a dirsi che a farsi, bastano difatti pochi comandi e qualche minuto per configurare il tutto:
1) Innanzitutto e’ necessario installare la suexec, il modulo fcgid ed il
php come cgi:
apt-get install apache2-suexec libapache2-mod-fcgid php5-cgi
2) Abilitiamo questi due moduli:
a2enmod suexec
a2enmod fcgid
3) Adesso dovremo forzare il PHP a correggere il percorso del cgi in modo conforme alle specifiche PATH_INFO/PATH_TRANSLATED. Bastera’ aggiungere nel php.ini (/etc/php5/cgi/php.ini) questa direttiva:
cgi.fix_pathinfo = 1
4)Andiamo a creare l’utente proprietario del sito:
adduser utente-sito
5) Creiamo le directory che conterra’ il sito web ed impostiamo su essa il
corretto proprietario:
mkdir -p /var/www/vhosts/sito1/htdocs
chown utente-sito:utente-sito /var/www/vhosts/sito1/htdocs
N.B. La suexec e’ precompilata per contenere i siti in /var/www
Potrete verificarlo eseguendo questo comando e leggendo il contenuto della
variabile AP_DOC_ROOT:
/usr/lib/apache2/suexec -V
Per modificarlo purtroppo dovrete ricompilare la suexec
6) Creiamo il wrapper che utilizzeremo per avviare il php e configurare mod-fcgid:
mkdir -p /var/www/fcgid-conf-sito1
Inseriamo nel file /var/www/fcgid-conf-sito1/sito1.conf questo:
#!/bin/sh
export PHPRC=/etc/php5/cgi
export PHP_FCGI_MAX_REQUESTS=400
export PHP_FCGI_CHILDREN=2
exec /usr/lib/cgi-bin/php
PHPRC,PHP_FCGI_MAX_REQUESTS e PHP_FCGI_CHILDREN sono opzionali e se verranno omessi sara’ impostato il valore di default. Sono utili per poter indicare il percorso del php.ini, permettendo cosi’ di utilizzare una configurazione diversa da sito a sito, oppure per definire il numero di child per processo ed il numero di richieste che puo’ gestire prima di terminare.
7) Impostiamo i permessi ed il corretto proprietario del wrapper:
chmod 755 /var/www/fcgid-conf-sito1/sito1.conf
chown -R utente-sito:utente-sito /var/www/fcgid-conf-sito1
8 ) Non ci rimane che inserire questo codice nella configurazione del sito:
<IfModule mod_fcgid.c>
SuexecUserGroup utente-sito utente-sito
PHP_Fix_Pathinfo_Enable 1
<Directory /var/www/vhosts/sito1/htdocs>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/fcgid-conf-sito1/sito1.conf .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
9) Riavviamo il server web:
/etc/init.d/apache2 restart


