2010-08-14 13 views
8

Questa potrebbe essere una domanda noob, ma non è possibile trovare una risposta da nessuna parte.Permessi di file; Il mio contenuto della cartella www dovrebbe essere di proprietà di www-data?

Ho un problema, che Another file permissions problem mi ha aiutato a QUASI risolvere.

Ho creato un utente in linux (danny) che ha accesso sudo. Ho anche creato un nuovo gruppo il cui nome ALSO è danny e ha aggiunto l'utente danny a quel gruppo. Questo gruppo ha accesso sudo (root).

Ho tutti i file e le cartelle nella cartella www di proprietà di danny/danny group.

Ho un codice di caricamento dell'immagine che è php. Questo codice non può caricare immagini in una cartella denominata "immagini" cartella che si trova sotto la cartella www, A MENO CHE non conceda le autorizzazioni della cartella immagini .

Quindi, ho seguito la risposta sulla domanda collegata e ho capito che l'utente su cui viene eseguito lo script di caricamento è "www-data".

Secondo la risposta sul link per l'altra domanda che ho postato, ho bisogno di aggiungere www-data ad un gruppo ... Ma io sono bloccato qui ...

Quale gruppo devo aggiungere a? Cosa dovrei fare da qui?

Qualsiasi consiglio è apprezzato.

Btw, ecco alcune informazioni su www-data e Danny

id www-data: 
    uid=33(www-data) gid=33(www-data) groups=33(www-data) 
    id danny 
    uid=1000(danny) gid=33(www-data) groups=33(www-data) 

Grazie e se avete bisogno di più input, fammelo sapere ...

+2

Hai selezionato la risposta peggiore, poiché in questo caso sarai hackerato se utilizzi questo consiglio. Dovresti cambiare questo. – rook

risposta

-2

In realtà, il problema è che avete bisogno l'utente www-data per avere accesso in scrittura alla cartella immagini.

E probabilmente si desidera che l'utente danny abbia anche l'accesso completo alla cartella.

EDIT: Altre parola di avvertimento: con file scrivibile dal tuo server web è sempre un rischio di sicurezza . Assicurati di controllare i file che vengono scritti e assicurati che le persone non possano caricare o modificare il codice. Sommario: * Non consentire al server Web di eseguire script che possono essere scritti o in una cartella scrivibile. Quindi assicurati che solo le immagini/cartella siano scrivibili, e controlla di nuovo che tutto ciò che è scritto sia effettivamente un'immagine!

O:

  1. Set www-data come proprietario della cartella, e u + rwx www chmod.
  2. Impostare www-data come parte di un gruppo X e modificare il proprietario di della cartella in X e chmod g + rwx www.
  3. Impostare la cartella scrivibile in tutto il mondo sul server (in alcuni casi, una soluzione accettabile troppo, ma meno sicura).
+0

Finalmente ho funzionato, ho seguito la soluzione 1 che hai proposto sopra. Un'ultima cosa, i permessi sono ora 765 nella cartella image_. Questo è buono e sicuro spero? MA, come posso impedire alle persone di visualizzare il mio file nei browser? (ciò che intendo è, ad esempio, si digita www.domain.com/images, quindi tutte le cartelle vengono visualizzate) –

+1

@Camran: Per impedire a Apache di mostrare elenchi di directory, utilizzare .htaccess per disattivare l'opzione "Indici". ('Opzioni -Index') –

+2

-1 Un'app Web non deve avere accesso in scrittura alla propria radice Web e in nessuna condizione la cartella può essere scritta o leggibile in tutto il mondo. Questo è un grosso errore e mi infastidisce davvero. – rook

1

Aggiungerei utente di dati www al gruppo danny.

usermod -a -G danny www-data 

In questo modo, i dati di www potrebbero entrare nel posto di danny, ma non il contrario.

Al fine di consentire all'utente www-data a scrivere a un gruppo di danny maschera autorizzazione della cartella deve essere come (dove jolly: qualsiasi valore è ok):

d???rwx??? 
+0

Qualche idea sul commento che ho postato sulla domanda di Koneraks? –

+1

Non significa che tutti i file di danny sarebbero potenzialmente accessibili a Internet se il server web è compromesso? Questa sembra essere una cattiva idea per me. – paradroid

16

In generale, NO, la vostra il contenuto deve essere non essere di proprietà di www-data. Il contenuto di solo che dovrebbe essere di proprietà di www-data sono i file specifici di cui le applicazioni Web devono essere in grado di modificare e le directory specifiche di cui hanno bisogno per essere in grado di creare o eliminare file. Il resto non dovrebbe essere di proprietà (o scrivibile) da www-data perché ogni file su cui www-data può scrivere è un file che un utente malintenzionato che compromette il server Web (compresi gli script o le app Web in esecuzione) sarà in grado di sostituire qualsiasi dato malevolo può scegliere

E 'particolarmente importante che www-data non proprio o essere in grado di scrivere su qualsiasi file eseguibile (ad esempio, script, file flash, documenti in Word o altri formati con capacità macro, ecc), perché la sostituzione con eseguibili malevoli sarebbe un modo semplice per attaccare i computer degli utenti o il server web stesso.

+0

Quindi ho capito bene che il suggerimento su http://askubuntu.com/a/9411/12938 è in realtà uno scarso? – texnic

+0

@texnic - La risposta che hai collegato va bene. Dice di impostare il tuo account utente come proprietario e www-data del gruppo nelle directory web e di impostare le loro autorizzazioni su 0755, che consente alle autorizzazioni di www-data di leggere ed eseguire, ma non di scrivere. Queste impostazioni sono coerenti con ciò che ho detto nella mia risposta qui. –

+0

Infatti. Grazie. Sto lentamente afferrando l'intera idea. – texnic

2

Penso che abbia senso che i file utilizzati da www-data siano di proprietà di www-data. Voglio dire, chi altri dovrebbe possederlo? La parte più importante è che l'app web non deve avere accesso in scrittura alla propria web root. Il motivo per cui è una vulnerabilità di o file_put_contents() in una funzione PHP come può consentire a un utente malintenzionato di eliminare una backdoor .php nella web root.

Un altro attacco importante da tenere presente è che un altro processo o utente sul sistema potrebbe voler leggere o scrivere sulla tua web root, quindi è importante che l'ultimo numero sia zero. Il numero medio è il gruppo e non lo stai usando, quindi dovrebbe essere zero. I seguenti 2 comandi rendono la tua web root leggibile ed eseguibile da Apache, e solo Apache. A volte viene utilizzato un account utente diverso, quindi esegui un <?php system('whoami')?> per trovare l'account utente corretto.

chown www-data -R /path/to/webroot

chmod 500 -R /path/to/webroot

Con il tempo l'attaccante ha l'esecuzione di codice telecomando per cambiare i privilegi della web root suo game over. L'intero punto sta cercando di sventare l'exploit dal successo.

+5

Si noti che, se www-data possiede i file/le directory, renderlo non scrivibile è un piccolo speedbump che potrebbe arrestare alcuni attacchi fissi, ma non molto altro. Perché? Poiché il proprietario del file può modificare le sue autorizzazioni, quindi, se www-data possiede il file, un utente malintenzionato può facilmente darsi accesso in scrittura. In caso contrario, l'utente malintenzionato non può ottenere l'accesso in scrittura senza prima passare da "web exploit" a "root exploit" (a quel punto è davvero game over, indipendentemente dalle autorizzazioni sulla web root). –

Problemi correlati