Differenze tra suPHP, suPHPexec e Apache suEXEC (seconda ed ultima parte)
Ieri abbiamo visto le principali caratteristiche che interessano i gestori di VPS e dedicati, soprattutto in termini di miglioramento della sicurezza delle proprie macchine: in questo articolo concludiamo il discorso andando ad analizzare ulteriori aspetti di interesse.
PHP come modulo Apache
Quando PHP funziona come modulo Apache, i file possono essere eseguiti nel gruppo (o utente) “nobody“: questo, oltre alle problematiche di sicurezza viste ieri, è un aspetto che nessuno dovrebbe sottovalutare in quanto a rischi di defacciamento del sito, SQL poisoning e così via. Ad esempio qualora una script PHP necessiti di accedere in scrittura ad un altro file, può farlo come utente nobody solo con dei permessi tipo CHMOD 777 che concedano l’autorizzazione a lettura/esecuzione/scrittura all’utente, al gruppo ed a livello world (vedi la FAQ sul CHMOD). Questo tipo di impostazione è particolarmente rischiosa perchè apre una “falla” nel sistema che potremmo pagare, un giorno, in termini di sito compromesso dall’esterno.
Peraltro, in base a quanto detto finora, quando un file PHP crea o carica mediante upload un file nel tuo account, sarà di proprietà dell’utente “nobody“, e non sarà possibile cancellarlo con l’utenza che usualmente accede via FTP, ad esempio. Saremo quindi costretti a cancellare il file, se necessario, attraverso uno script contenuto in un file di proprietà dell’utente nobody oppure, in alternativa, chiedendo all’amministratore, mediante supporto, di farlo al posto nostro.
PHP come CGI con Suexec
Se PHP fa funzionare un CGI con il modulo Suexec, i file PHP funzioneranno con la tua utenza (oppure il tuo gruppo Unix): i permesi concessi saranno in questo modo più restrittivi, senza le limitazioni appena descritte, ed un CHMOD 777 provocherà come abbiamo visto un errore 500 (Internal Server Error), il che ci preserverà da eventuali attacchi dall’esterno. Del resto già utilizzando phpsuexec sarà possibile impostare al massimo un CHMOD 755 (lettura/scrittura/esecuzione solo con il tuo username, lettura ed esecuzione a livello di gruppo e mondiale): in quest’ottica l’utente rimane l’unico responsabile dei propri file, e nessuno – tantomeno l’utente nobody – potrà manipolarli dall’esterno.
Come abilitare Apache PHP SuExec da WHM
Di default PHP viene caricato all’interno di WHM/Cpanel come modulo DSO (Dynamic Shared Object), e funziona mediante l’utente nobody di default: questo metodo è in particolare il più veloce per gestire al meglio le chiamate del linguaggio, anche se potrebbe creare potenziali conflitti in ambiente condiviso a livello di permessi dei file ed accessi non autorizzati.
A questo punto entra in gioco il modulo SuExec che imposta la regola seconda la quale sarà possibile eseguire un file PHP soltanto se si è proprietari degli stessi: tale metodo possiede ulteriori svantaggi, ad ogni modo, in termini di velocità e stabilità del sistema. Se si desidera abilitarlo è comunque possibile procedere come segue.
- Fare login come root sul proprio pannello di controllo, ed alla voce di menù Service Configuration cliccare il link “Configure PHP and SuExec“;
- sulla pagina che comparirà di seguito, cliccare su “alter configuration”, cercare gli handler PHP (indicati come PHP handlers) e modificare il valore indicato in “cgi” e settare, successivamente, Apache SuExec su On (di default dovrebbe già essere così);
- infine, salvare la configurazione cliccando “Save new configuration” ed attendere che il server Apache sia riavviato.
Per verificare che sia tutto impostato correttamente, provate ad effettuare l’upload di un file o create una cartella mediante uno script PHP che effettui tali operazioni.
Gestione degli errori 500 (Internal Server Error)
Ogni volta che si verifica un errore 500, di norma viene loggato dal sistema e sarà visibile sotto cPanel -> Error Log. Questo è il modo più comune per effettuare un primo check di dove risieda l’errore, quantomeno ci potrà fornire un indizio. In molti casi potrebbe trattarsi di un errore di permessi sui file, ad esempio una direttiva errata in .htaccess (che dovrebbe, come visto ieri, essere “tradotta” all’interno di php.ini in una direttiva equivalente). Nota: per gestire gli errori dal log del proprio server su un hosting condiviso leggere la FAQ apposita.
Le directory che necessitano di essere scritte non richiederanno più la direttiva 777, dato che phpsuexec rifiuterà di leggere o scrivere in quei path: in questi casi sarà sufficente un CHMD 755.
MIMETypes
Se avete aggiunto un Mimetype al sistema in modo da interpretare, ad esempio, le estensioni HTML come file PHP (mediante .htaccess), dovrete sostituire tale direttiva con un handler di Apache (comando ApacheHandler). Per farlo basta loggarsi nel pannello di controllo e fare click alla voce Apache Handlers ed aggiungere quanto segue:
AddHandler application/x-httpd-php
Un commento