Concessione delle autorizzazioni di scrittura al gruppo www-data


27

Sto creando un sito Web e parte della funzione è scrivere dati generati dagli utenti con php. Sto usando nginx su Ubuntu 13.04. Al momento sto solo testando e tutto è servito attraverso nginx su locahost.

Il mio script php non riesce a scrivere il file di testo (anche se posso farlo manualmente) e penso che sia un problema di permessi per scrivere nella mia directory /var/www/example.com/public_html.

Al momento possiedo (iain) questa directory ma sembra che avrebbe più senso trasferire la proprietà della directory / var / www e tutto ciò che è all'interno dell'utente www-data (o dovrebbe essere un gruppo?) E aggiungermi a il gruppo www-data. Il seguente è il modo giusto per farlo?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

Quindi questo significa che chiunque nel gruppo www-data può ora leggere, scrivere ed eseguire in / var / www?

Risposte:


53

Innanzitutto, useraddcrea un nuovo utente. Dato che tu (iain) esisti già, vuoi chiamare usermodinvece. Quindi sarebbe:

sudo usermod -aG www-data iain
addgroup www-data

(nota -asui server basati su Debian (incluso Ubuntu) che ti aggiungeranno a quel gruppo e manterranno la tua appartenenza ad altri gruppi. Dimenticalo e apparterrai al solo gruppo di dati www - potrebbe essere una brutta esperienza se uno dei erano su ruote. Sui server di tipo SUSE l'opzione è -Ainvece di -aGleggere man usermodattentamente per farlo bene.)

In secondo luogo, non si desidera che Apache abbia pieno accesso rw /var/www: questa è potenzialmente una grave violazione della sicurezza. Come regola generale, consenti solo ciò di cui hai bisogno e niente di più ( principio del privilegio minimo ). In questo caso, hai bisogno di apache ( www-data) e tu ( www-datagruppo) per scrivere (e leggere) /var/www/example.com/public_html, quindi

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html

Modifica : per rispondere alla tua domanda originale, sì, qualsiasi membro di www-datapuò ora leggere ed eseguire /var/www(perché l'ultimo bit delle tue autorizzazioni è 5 = read + exec). Ma poiché non hai usato l' -Ropzione, questo vale solo per /var/www, e non per i file e le sottodirectory che contiene. Ora, se possono scrivere è un'altra questione e dipende dal gruppo di /var/www, che non hai impostato. Immagino che sia tipico root:root, quindi no, (probabilmente) non possono scrivere.

Modifica il 22/06/2014 : aggiunta una nota secondo cui l' -aGopzione è valida sui server basati su Debian. Apparentemente varia con la distribuzione, quindi leggi manattentamente prima di eseguire.


Va bene, ho capito. Il gruppo di / var / www è davvero root: root. Grazie per il link Sembra più sensato avere l'abitudine di concedere ciò che è richiesto piuttosto che andare per comodità. Grazie per la guida.
Duff,

2
Ok, quindi ho appena provato a scrivere su /var/www/example.com/public_html cp -r php /var/www/example.com/public_htmle mi viene negata l'autorizzazione. Sono nel gruppo www-data che ha le autorizzazioni rwxrwx --- per questa directory. Perchè è questo?
Duff,

Potrebbero esserci molte cose qui. Ad esempio non potresti avere il permesso di leggere alcune cose in php, oppure non ti sei disconnesso e ho fatto il login dopo usermod (ho aggiornato la mia risposta su quel punto con addgroup per evitarlo, e ho precisato dove usare sudo).
Calimo,

Da tutte le risposte riguardanti www-data:www-data, questo ha risolto il problema con autorizzazioni mancanti. Grazie.
Eugene,
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.