Octroi d'autorisations d'écriture au groupe www-data

27

Je crée un site Web et une partie de la fonction consiste à écrire des données générées par l'utilisateur avec php. J'utilise nginx sur Ubuntu 13.04. Au moment où je teste et tout est servi via nginx sur locahost.

Mon script php ne parvient pas à écrire le fichier texte (bien que je puisse le faire manuellement) et je pense que c'est un problème d'autorisations pour écrire dans mon répertoire /var/www/example.com/public_html.

Pour le moment, je (iain) possède ce répertoire, mais il semble qu'il serait plus logique de transférer la propriété du répertoire / var / www et de tout ce qu'il contient à l'utilisateur www-data (ou devrait-il s'agir d'un groupe?) Et de m'ajouter à le groupe www-data. Est-ce que la bonne façon de procéder est la suivante?

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

Cela signifie-t-il que n'importe qui dans le groupe www-data peut désormais lire, écrire et exécuter dans / var / www?

duff
la source

Réponses:

53

D'abord, useraddcrée un nouvel utilisateur. Comme vous (iain) existe déjà, vous souhaitez appeler à la usermodplace. Ce serait donc:

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

(notez le -asur les serveurs basés sur Debian (Ubuntu inclus) qui vous ajoutera à ce groupe et conservera votre appartenance à d'autres groupes. Oubliez-le et vous appartiendrez uniquement au groupe www-data - pourrait être une mauvaise expérience si l'un des sur les serveurs de type SUSE, l'option est -Aplutôt -aGlue man usermodattentivement pour bien faire les choses.)

Deuxièmement, vous ne voulez pas qu'Apache ait un accès complet à RW /var/www: c'est potentiellement une faille de sécurité majeure. En règle générale, n'autorisez que ce dont vous avez besoin, et rien de plus ( principe du moindre privilège ). Dans ce cas, vous avez besoin d'apache ( www-data) et de vous ( www-datagroupe) pour écrire (et lire) /var/www/example.com/public_html, donc

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

Edit : pour répondre à votre question d'origine, oui, tout membre de www-datapeut désormais lire et exécuter /var/www(car le dernier bit de vos autorisations est 5 = lecture + exécution). Mais parce que vous n'avez pas utilisé le -Rcommutateur, cela s'applique uniquement aux /var/wwwfichiers et sous-répertoires qu'il contient et non à ceux-ci. Maintenant, savoir s'ils peuvent écrire est une autre affaire, et dépend du groupe de /var/www, que vous n'avez pas défini. Je suppose que c'est généralement le cas root:root, donc non, ils (probablement) ne peuvent pas écrire.

Modifier le 2014-06-22 : ajout d'une note indiquant que l' -aGoption est valide sur les serveurs basés sur Debian. Cela varie apparemment avec la distribution, alors lisez manattentivement avant de l'exécuter.

Calimo
la source
OK je vois. Le groupe de / var / www est en effet root: root. Merci pour le lien. Il semble plus judicieux de prendre l'habitude d'accorder ce qui est requis plutôt que d'aller par commodité. Merci pour les conseils.
duff
2
Ok, donc j'ai juste essayé d'écrire dans /var/www/example.com/public_html avec cp -r php /var/www/example.com/public_htmlet j'ai obtenu l'autorisation refusée. Je suis dans le groupe www-data qui a les autorisations rwxrwx --- pour ce répertoire. Pourquoi est-ce?
duff
Il pourrait y avoir beaucoup de choses ici. Par exemple, vous ne pouviez pas avoir la permission de lire certaines choses en php, ou vous ne vous êtes pas déconnecté et connecté après usermod (j'ai mis à jour ma réponse sur ce point avec addgroup pour éviter cela, et précisé où utiliser sudo).
Calimo
De toutes les réponses concernant www-data:www-data, celui-ci a résolu le problème avec les autorisations manquantes. Merci.
Eugene