Dato che spesso con molti Cms opensource questa caratteristica è consigliata (se non obbligatoria, anche se non esplicitamente richiesta) vi mostro in pochi passi come abilitare phpSuExec sul vostro virtualhost nel caso abbiate accesso alla Shell del vostro server Linux.
Questa piccola guida è riferita ad una Debian Linux e Apache Web Server.
ATTENZIONE – PREMESSA: Se sul server è installato php4 sostituire php4 a php5.
Individuare il file di configurazione del Virtualhost per il quale si vuole effettuare la modifica. (Solitamente si trova in /etc/apache2/sites-available/ ma ad ognuno il suo.)
Una volta trovato il file del Virtualhost che vi interessa aggiungere a quest’ultimo le seguenti direttive:
SuexecUserGroup "#1001" "#1002"
sostituendo i corretti valori di Uid e Gid (in forma numerica) con il quale si vuol fare girare gli script PHP (generalmente questi coincidono con Uid e Gid dell’utente FTP).
Nota:
Si possono ricavare gli Uid e Gid numerici di un utente di cui si conosce il nome-utente di login con il
comando:
id nome-utente
uid=1001(nome-utente) gid=1002(nome-utente) groups=1000(nome-utente), 20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev)
Fine Nota
Una volta ricavato l’uid e inserita nel virtualhost la direttiva con gli id corretti, aggiungere allo stesso file le seguenti righe:
AddHandler php-script .php
Action php-script /cgi-bin/php5
e verificare che nel Virtualhost sia presente la direttiva “ScriptAlias” simile a quanto riportato sotto:
ScriptAlias /cgi-bin/ /home/sito-web/cgi-bin/
<Directory /home/sito-web/cgi-bin>
allow from all
</Directory>
Successivamente è necessario copiare dentro la directory cgi-bin del Virtualhost i file php5 ed il link simbolico php -> php5 utilizzando il seguente comando:
cp -a /usr/lib/cgi-bin/php* /home/sito-web/cgi-bin/
Impostare i permessi sui file copiati dentro la cgi-bin dell’utente in modo che l’utente ed il gruppo specificato in “SuexecUserGroup” ne siano i proprietari:
chown -R 1001:1002 /home/sito-web/cgi-bin/php*
Verificare la configurazione di Apache per assicurarsi che le modifiche effettuate siano corrette usando il comando:
apache2ctl configtest
che deve restituire “Syntax OK”
Riavviare Apache con il seguente comando:
/etc/init.d/apache2 restart
Verificare il risultato tramite questo script di test:
<?php
// Test per verificare se PHP sta girando come modulo CGI
echo "Utente con il quale sta girando lo script PHP ed il processo di Apache:";
echo "<br><br>";
echo "Risultato whoami:";
echo "<br>";
echo exec('whoami');
echo "<br><br>";
echo "Risulato id:";
echo "<br>";
echo exec('id');
echo "<br><br>";
echo "Verificare le Server API per determinare in che modalità sta girando PHP";
// Se PHP gira come CGI sarà riportato: "Server API GI/FastCGI"
// Altrimenti il risultato sarà: "Server API Apache 2.0 Handler"
echo "<br><br>";
phpinfo();
?>
e il gioco è fatto 🙂