Ho appena avviato una casella Ubuntu 11.10 e poi ho eseguito apt-get install apache2 php5
l'installazione di apache2 e PHP 5 sulla confezione. Ora funziona come un "web server" e carica "Funziona!" pagina. Ora sto cercando di rafforzare la sicurezza e ho le seguenti domande sui server Web Linux:
- Chi dovrebbe eseguire Apache?
- In quale gruppo dovrebbe appartenere questo utente?
- Quali pacchetti possono far funzionare PHP (e Apache?) Come proprietario dei file? (come su host web condivisi) Devo usare questi pacchetti? Sono facili / fattibili da mantenere su un piccolo sistema?
- Quali dovrebbero essere le autorizzazioni predefinite per i file e le cartelle pubblicati sul Web con apache in esecuzione
www-data
? Per apache / php in esecuzione come utente?
Ho eseguito le seguenti operazioni esaminando l'impostazione predefinita:
Struttura del file
Quando cd /
faccio un ls -al
elenco dei contenuti, vedo /var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Se cd
entro var
e ls -al
vedo:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Infine, dentro /var/www
vedo:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
Il mio punto chiave è che finora tutti questi file appartengono root:root
, i file hanno autorizzazioni di 644 e le directory hanno autorizzazioni di 755.
Autorizzazioni di Apache
Se creo un file come root /var/www/test.php
con il contenuto:
<?php echo shell_exec('whoami');
e carica quel file in un browser che mi dice www-data
, che è lo stesso del /etc/apache2/envvars
file:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Se lo faccio ps aux | grep -i apache
vedo quanto segue:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
Quindi, chi sta eseguendo apache? Sembra che forse il primo processo sia come root
, forse dallo /etc/init.d/apache
script all'avvio del sistema, e gli altri come www-data
generati dal primo. È corretto?
Quindi, se digito, groups www-data
vedo www-data : www-data
- quindi sembra essere solo nel www-data
gruppo. Immagino che anche questa sia una pratica standard.
Hosting condiviso e sicurezza
Quindi, se capisco le cose correttamente, se apache è in esecuzione come www-data
e voglio che apache sia in grado di leggere una directory, il x
bit deve essere impostato per il mondo (altro) gruppo ( o+x
), e anche questo deve essere impostato su tutti i genitori directory su tutta la catena ( www
, var
). E se voglio che Apache sia in grado di leggere da un file, allora il o+r
bit deve essere impostato.
Sfortunatamente credo che ciò introduca un buco nella sicurezza per più applicazioni e / o più utenti sulla stessa casella di Linux: tutti i file Web devono essere leggibili in tutto il mondo e quindi sono accessibili anche da altre applicazioni e altri utenti sul sistema. Se un'applicazione installata sul sistema presentava una vulnerabilità di sicurezza che consentiva input utente non convalidati e non elaborati, che veniva quindi eseguito da PHP, un utente malintenzionato remoto poteva quindi sfogliare tutti gli altri file sul sistema Web leggibili a livello mondiale. Allo stesso modo, se la casella aveva più utenti e un utente conosceva il percorso dei file Web di un altro utente, poteva quindi leggere il contenuto del file (e vedere cose sensibili come stringhe di connessione al database, ecc.).
Ho sentito parlare di due pacchetti, suphp
e phpsuexec
che si occupano di consentire i file degli utenti per essere servito fuori 'come li' su un sistema condiviso. Uno dei vantaggi di questo è che consente alle applicazioni Web (come Wordpress) di creare e modificare file, molto utile per l'aggiunta di temi, plugin e software di aggiornamento. Naturalmente è probabilmente più sicuro fare queste cose manualmente, ma può essere fatto un compromesso forse con uno dei pacchetti sopra menzionati? O forse usando chown
per far appartenere il gruppo di directory di wordpress www-data
e impostare il bit appiccicoso sul gruppo ( g+s
)?
Li ho usati solo come utente finale di una società di web hosting, quindi non conosco i dettagli di essi e se sono persino ragionevoli da installare su un piccolo sistema o se ce ne sono altri misure di sicurezza che dovrei usare invece, ma ho pensato di menzionarle qui in quanto sembrano un modo possibile per affrontare alcune delle mie preoccupazioni.
Torna alle domande
- Chi dovrebbe eseguire Apache?
- In quale gruppo dovrebbe appartenere questo utente?
- Quali pacchetti possono far funzionare PHP (e Apache?) Come proprietario dei file? (come su host web condivisi) Devo usare questi pacchetti? Sono facili / fattibili da mantenere su un piccolo sistema?
- Quali dovrebbero essere le autorizzazioni predefinite per i file e le cartelle pubblicati sul Web con apache in esecuzione
www-data
? Per apache / php in esecuzione come utente?