Home > Apache, Debian / Ubuntu, How-to, Php, Server, Sicurezza > Installare la suexec e mod_fcgid con apache2 in Debian Lenny

Installare la suexec e mod_fcgid con apache2 in Debian Lenny

apacheDi 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

  1. Alessandro
    6 marzo 2010 a 20:40 | #1

    Salve,
    ho un server con una ventina di siti web installati su altrettanti virtual host. Ho provato ad installare suexec seguendo la guida su uno di essi, funzionava perfettamente, ma tutti gli altri erano offline, o meglio, il borwser cercava di scaricare il file php invece di compilarlo.

    E’ normale la cosa?

  2. 9 marzo 2010 a 15:19 | #2

    Ciao,
    non e’ normale che accada questo. Sembrerebbe che non sia piu’ assegnato un handler agli script php. Prova a definirlo globalmente (ad esempio in /etc/apache2/apache2.conf) in questo modo:

    AddType application/x-httpd-php .php

    un saluto,
    Luca

  1. Nessun trackback ancora...