Perché non dovrebbe / var / www avere chmod 777


67

Quando sviluppo una pagina su un localhost, a volte ricevo un errore "Autorizzazione negata" che posso risolvere eseguendo chmod -R 777 /var/www. Tuttavia, la gente mi sta dicendo che questa è una cattiva idea per motivi di sicurezza.

Perché non dovresti /var/wwwavere un chmod di 777?


Vorrei raccomandare questo thread su @ serverfault.com. Fa un ottimo lavoro nel fornire una configurazione di esempio per apache2 e permessi. serverfault.com/q/6895/57036 PS Non posso commentare, quindi devo aggiungerlo come risposta.
MystaMax,

Risposte:


81

777 è un cattivo permesso in generale e ti mostrerò perché.

Nonostante come possa apparire in un casinò o a Las Vegas, 777 non significa jackpot per te. Piuttosto, jackpot per chiunque desideri modificare i tuoi file. 777 (e il suo brutto cugino 666) consentono autorizzazioni di lettura e scrittura (e, nel caso di 777, Execute) ad altri . Puoi saperne di più su come funzionano le autorizzazioni dei file , ma in breve ci sono tre gruppi di autorizzazioni: proprietario, gruppo e altro . Impostando l'autorizzazione su 6 o 7 ( rw-o rwx) per altri, si dà a qualsiasi utente la possibilità di modificare e manipolare quei file e cartelle. In genere, come puoi immaginare, questo è dannoso per la sicurezza.

Ecco il mio esempio:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Finora ho creato una cartella e creato un file con autorizzazioni "non valide" (777 e 666). Ora passerò a un altro utente e proverò a manipolare quei file.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Dato che questo utente "malizioso" sono stato in grado di posizionare i file nella directory e iniettare il testo in file già esistenti. Mentre di seguito, in una directory con 755 e file con 644, sono in grado di vedere i file e le directory all'interno ma non posso modificare i file né crearne di nuovi:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Per le autorizzazioni di Apache, ti consigliamo di attenersi rispettivamente a 0755 e 0644 (AKA umask 022) per cartelle e file. Ciò consente, in qualità di proprietario dei file, di modificarli e manipolarli fornendo ad Apache i minimi livelli minimi di accesso necessari per operare.


13
Mi dispiace per la lingua, ma questa è una risposta incredibile. Grazie Marco.
Luis Alvarado,

Cosa succede se hai creato solo utenti per le persone autorizzate a gestire liberamente la cartella / var / www? Uso macchine virtuali dedicate per ogni server Web che eseguo e mi chiedo se sia ancora vero che dovresti stare così attento.
UrkoM,

1
@UrkoM Non puoi mai stare troppo attento. Se si desidera che le persone accedano agli stessi file, è possibile aumentare le autorizzazioni del gruppo su 6/7 (0664/0775) e aggiungere ciascun utente a quel gruppo. Mentre questa configurazione (e quella che ho descritto nella mia risposta) non soddisfano tutti i criteri, direi che un buon 90% delle volte 0755/0644 sono le autorizzazioni che vorresti usare. Se avete solo sistemi "un utente", quindi il rischio di avere altri con i permessi di scrittura non è come molto un rischio.
Marco Ceppi

4
@UrkoM L'altra cosa da considerare è che ci sono molti "utenti" che non rappresentano persone reali ma esistono in modo che alcuni servizi possano funzionare con capacità ridotte (principalmente per motivi di sicurezza, ma anche per ridurre i danni che potrebbero verificarsi da un bug di stabilità). Visualizzare il contenuto di /etc/passwde vedrete utenti come mail, newse nobody. Anche se va bene per tutti i veri utenti umani del tuo sistema essere in grado di modificare il contenuto di /var/www, ciò non significa che vuoi che tutti i processi vengano eseguiti poiché questi utenti "artificiali" sono in grado di farlo.
Eliah Kagan,

1) Come la risposta più semplice possibile. Non spiega come Apache o Nginx possono manipolare cartelle o file. Apache o Nginx sono server, in modo che le applicazioni, non sono il vostro utente "malintenzionato", non possono digitare ls -lah, touch bado qualsiasi altri comandi. Come possono manipolare cartelle e file? 2) Eredità. Non hai coperto alcuna eredità tra cartelle e file al loro interno. Ci sono almeno 2-3 passo prima di un file: /var, /var/www, /var/www/project. Quali autorizzazioni utente / gruppo dovrebbero /varavere? Quali autorizzazioni utente / gruppo dovrebbero /var/wwwavere? E così via. Come collaborano?
Green,

15

Fondamentalmente, avere le autorizzazioni di 777 non ti farà hackerare da solo, ma se qualcuno ottiene un contatto ovunque, può essere usato per intensificare le autorizzazioni e ottenere il controllo completo sul tuo computer. La parte peggiore è che le tue autorizzazioni stanno usando "7" - ciò significa che leggi, scrivi ed esegui le autorizzazioni.

Diciamo che un hacker vuole assumere il controllo del tuo computer. Potrebbe connettersi al computer tramite un browser Web, connettendosi a http://yourcomputer.example.com:80/. Se hai delle pagine disponibili che gli permettono di caricare immagini, può rinominare un eseguibile per terminare con ".jpg" e caricarlo sul tuo server. Ora cerca quel file nel suo browser Web e lo esegue, perché Linux non si preoccupa dell'estensione, vede solo che è un file eseguibile. Ciò potrebbe non ottenerlo molto, ma poiché funzionava affatto, sa che funzionava come utente apache. Quindi carica una versione modificata che modificherà i file di configurazione di Apache, concedendogli ancora più accesso - diciamo così che Apache produrrà il contenuto di / etc / passwd. Può quindi utilizzare tali informazioni per vedere quali utenti esistono nel sistema. Può quindi connettersi usando ssh e provare password comuni per accedere come quegli utenti - se non funziona, passerà all'utilizzo di un attacco a forza bruta. Se entra come utente con accesso sudo,

Ora, potresti dire che non è probabile o che non è come un vero hacker avrebbe funzionato. Questo è vero, ma il punto è che impostando i file su chmod 777, hai aperto una falla di sicurezza che un hacker può usare nel modo che ritiene opportuno.

Se invece segui il Principio del privilegio minimo , allora quel buco non si verifica e il tuo sistema è molto più difficile da hackerare. Anche se è più difficile fare le cose correttamente, dovresti comunque fare ogni sforzo per farlo.


+1 per "toehold" e "escalate". Descrive bene il concetto.
Kari Kääriäinen,

3
Puoi spiegare come un file mascherato da jpg può essere eseguito su un server?
Anurag Peshne,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.