2013-09-16 13:33:11 +0000 2013-09-16 13:33:11 +0000
27
27

Concedere i permessi di scrittura al gruppo www-data

Sto creando un sito web e parte della funzione è quella di scrivere i dati generati dall'utente 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 io (iain) possiedo questa directory ma sembra che avrebbe più senso trasferire la proprietà della directory /var/www e tutto ciò che c'è dentro all'utente (o dovrebbe essere il gruppo?) www-data e aggiungere me stesso al 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 (1)

53
53
53
2013-09-16 13:53:44 +0000

Per prima cosa, useradd crea un nuovo utente. Dato che tu (iain) esisti già, vuoi chiamare invece usermod. Quindi questo sarebbe:

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

(nota lo -a sui server basati su Debian (Ubuntu inclusa) che ti aggiungerà a quel gruppo, e manterrà la tua appartenenza ad altri gruppi. Dimenticalo e apparterrai solo al gruppo www-data - potrebbe essere una brutta esperienza se uno di loro fosse una ruota. Sui server di tipo SUSE l'opzione è -A invece di -aG quindi leggi attentamente man usermod per capire bene).

Secondo, non vuoi che apache abbia pieno accesso rw a /var/www: questo è potenzialmente una grande violazione della sicurezza. Come regola generale, permettete solo ciò di cui avete bisogno, e niente di più principio del minimo privilegio ). In questo caso, hai bisogno che apache (www-data) e tu (gruppo www-data) scrivano (e leggano) in /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

Edit : per rispondere alla tua domanda originale, sì, qualsiasi membro di www-data può ora leggere ed eseguire /var/www (perché l'ultimo bit dei tuoi permessi è 5 = read + exec). Ma poiché non hai usato lo switch -R, questo si applica solo a /var/www, e non ai file e alle sotto-directory che contiene. Ora, se possono scrivere è un'altra questione, e dipende dal gruppo di /var/www, che non hai impostato. Credo che sia tipicamente root:root, quindi no, (probabilmente) non possono scrivere.

Modifica del 2014-06-22 : aggiunta una nota che l'opzione -aG è valida sui server basati su Debian. Apparentemente varia con la distribuzione, quindi leggete attentamente man prima di eseguirla.