Php.ini
è il file di configurazione che controlla diversi aspetti del comportamento dell'interprete PHP. È un file di puro testo in cui le direttive (case sensitive, ovvero con differenza tra minuscole e maiuscole) sono inserite nella forma "direttiva = valore" ed ogni commento, invece, inizia con il carattere di punto e virgola (";
").
Il file php.ini
relativo a PHP 5 su Debian lo troviamo in /etc/php5/apache2/php.ini
e sono richiesti privilegi di root per poterlo modificare. Per modificarlo, da shell come root, possiamo usare il comando:
mc -e /etc/php5/apache2/php.ini
avendo preventivamente installato il comodissimo software mc
(Midnight Commander) tramite il comando:
apt-get install mc
come è uso fare per ogni altro pacchetto.
Se il file non si trovasse ove indicato, da shell dare, come root:
find / -name php.ini
al fine di reperirne il percorso assoluto e dunque procedere alla modifica.
Le direttive del file php.ini
Qui di seguito si mostreranno le descrizioni delle direttive del file php.ini
più importanti ai nostri fini. Sotto il nome della direttiva viene indicato, tra parentesi quadre, tramite quali altri file le stesse direttive possono essere impostate.
Ci occuperemo principalmente della messa in sicurezza di un solo programma Web su server dedicato. Nel seguito si darà cenno alla "convivenza" di più programmi Web su uno stesso server (la complessità e le problematiche aumentano non poco).
Non tratterò della modalità safe mode, in quanto è possibile ottenere simili ma migliori risultati tramite configurazioni a gabbia chroot oppure di separazione fisica (o virtuale) delle risorse (filesystem/servizi) su più macchine. Questo lo tratteremo nell'ultimo capitolo.
In linea di massima, quando è abilitata la modalità sicura, PHP opera simulando l'utente cui appartiene lo script eseguito e non potrà accedere via filesystem a cartelle e file che non gli appartengano, fatto salvo il contenuto della cartella puntata dalla direttiva safe_mode_include_dir
. I file salvati in questa cartella, infatti, potranno esser utilizzati dagli script PHP, tramite comandi di include, indipendentemente dall'effettivo proprietario (ma sempre dipendentemente dai loro permessi).
Infine, ogni chiamata di sistema potrà riguardare esclusivamente file nella safe_mode_exec_dir
, ovvero gli unici file eseguibili che uno script PHP avrà il permesso di lanciare - tramite le sue istruzioni exec()
, system()
o passthru()
- non potranno risiedere che nella cartella indicata dall'omonima direttiva.