Attivare php come modulo CGI su un virtualhost (Abilitare phpSuExec Apache)

Posted dicembre 30th, 2008 in WebServer by Andrea Pernici

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 :)

Proteggere le cartelle con una password via .htaccess

Posted dicembre 3rd, 2008 in Sicurezza, WebServer by Andrea Pernici

In questo post voglio spiegarvi come fare per rendere più sicure le cartelle riservate dei vostri siti.

Il metodo che useremo è quello dell’accoppiata htaccess e htpasswd.

E’ tutto molto semplice e come prima cosa dovete creare un file .htpasswd così composto:

nomeutente:passwordcrittata

e posizionatelo subito sopra alla cartella public_html o htdocs.

Vi segnalo un ottimo tool per generare passord adatte a questo scopo: http://www.xs4all.nl/~remcovz/htpasswd.html

come seconda cosa dovete creare un file .htaccess così composto:

AuthUserFile /home/nome-utente-sito/.htpasswd
AuthGroupFile /dev/null
AuthName "directory"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

e posizionate questo file nella vostra cartella da proteggere.

Il gioco è fatto e ora potete mettere in maggior sicurezza le cartelle riservate del vostro sito.