web-dev-qa-db-fra.com

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

Je crée un site Web et une partie de la fonction consiste à écrire des données générées par les utilisateurs avec php. J'utilise nginx sur Ubuntu 13.04. Au moment où je teste et tout est servi par 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.

À l’heure actuelle, j’ai le propriétaire de ce répertoire, mais il semble plus logique de transférer la propriété du répertoire/var/www et de tout ce qui se trouve à l’utilisateur de www-data (ou est-ce que cela devrait être un groupe?) Et de s’ajouter moi-même à le groupe www-data. Est-ce que ce qui suit est la bonne façon de faire cela?

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 du groupe www-data peut maintenant lire, écrire et exécuter dans/var/www?

22
duff

Tout d'abord, useradd crée un nouvel utilisateur. Comme vous (iain) existez déjà, vous voulez appeler usermod à la place. Donc ce serait:

Sudo usermod -aG www-data iain
addgroup www-data

(notez le -a sur les serveurs basés sur Debian (Ubuntu inclus) qui vous ajoutera à ce groupe et conservera votre appartenance à d'autres groupes. Oubliez-le et vous n'appartiendrez qu'au groupe www-data. Cela pourrait être une mauvaise expérience si Sur les serveurs de type SUSE, l’option est -A au lieu de -aG, lisez donc man usermod avec précaution pour bien faire les choses.)

Deuxièmement, vous ne voulez pas qu'Apache ait un accès complet à /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 (groupe www-data) pour écrire (et lire) dans /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 initiale, oui, tout membre de www-data peut maintenant lire et exécuter /var/www (car le dernier bit de vos autorisations est 5 = read + exec). Mais comme vous n'avez pas utilisé le commutateur -R, cela s'applique uniquement à /var/www et non aux fichiers et sous-répertoires qu'il contient. Maintenant, savoir si 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 typiquement root:root, donc non, ils ne peuvent (probablement) pas écrire.

Éditer le 2014-06-22 : ajout d'une note indiquant que l'option -aG est valide sur les serveurs basés sur Debian. Cela varie apparemment avec la distribution, lisez donc man avant d'exécuter.

45
Calimo