autorisations www-data?

108

J'ai donc un répertoire dans / var / www (appelé cake) et je dois autoriser www-data à y écrire, mais je veux aussi y écrire (sans avoir à utiliser sudo). J'ai peur de changer les autorisations en 777 au cas où un autre utilisateur de ma machine (ou un pirate informatique) tenterait de modifier des fichiers dans ce répertoire. Comment puis-je autoriser l'accès uniquement à moi-même et aux www-data d'Apache?

q3d
la source

Réponses:

168
sudo chown -R yourname:www-data cake

puis

sudo chmod -R g+s cake

La première commande change de propriétaire et de groupe.

La deuxième commande ajoute l'attribut s qui conservera les nouveaux fichiers et répertoires dans Cake ayant les mêmes autorisations de groupe.

James L.
la source
3
Pourquoi le chmod g + s est-il récursif?
Ben Rogmans
ne savait pas pour g + s. très très pratique!
FRAGA
1
que peut faire l'utilisateur avec les fichiers créés par www-data dans cake lui-même et les fichiers créés par www-data dans un répertoire créé par www-data? par exemple, à propos des opérations d'édition, de changement de nom, de suppression? si je comprends bien, le changement de nom et la suppression ne sont pas possibles à l'intérieur du répertoire créé par www-data, et l'édition des fichiers créés par www-data n'est pas du tout possible pour l'utilisateur.
qdinar le
49

Comme indiqué dans un article de Slicehost :

Configuration utilisateur

Commençons donc par ajouter l'utilisateur principal au groupe d'utilisateurs Apache:

sudo usermod -a -G www-data demo

Cela ajoute l'utilisateur «démo» au groupe «www-data». Assurez-vous d'utiliser à la fois les options -a et -G avec la commande usermod ci-dessus.

Vous devrez vous déconnecter et vous reconnecter pour activer le changement de groupe.

Vérifiez les groupes maintenant:

groups
...
# demo www-data

Alors maintenant, je suis membre de deux groupes: le mien (démo) et le groupe Apache (www-data).

Configuration du dossier

Nous devons maintenant nous assurer que le dossier public_html appartient à l'utilisateur principal (démo) et fait partie du groupe Apache (www-data).

Mettons cela en place:

sudo chgrp -R www-data /home/demo/public_html

Comme nous parlons d'autorisations, j'ajouterai une note rapide concernant la commande sudo: c'est une bonne habitude d'utiliser des chemins absolus (/ home / demo / public_html) comme indiqué ci-dessus plutôt que des chemins relatifs (~ / public_html). Cela garantit que sudo est utilisé au bon endroit.

Si vous avez un dossier public_html avec des liens symboliques en place, soyez prudent avec cette commande car elle suivra les liens symboliques. Dans le cas d'un dossier public_html fonctionnel, modifiez chaque dossier manuellement.

Setgid

Bien jusqu'à présent, mais rappelez-vous que la commande que nous venons de donner n'affecte que les dossiers existants. Et quoi de neuf?

Nous pouvons définir la propriété de sorte que tout ce qui est nouveau se trouve également dans le groupe «www-data».

La première commande modifiera les autorisations du répertoire public_html pour inclure le bit "setgid":

sudo chmod 2750 /home/demo/public_html

Cela garantira que tous les nouveaux fichiers reçoivent le groupe «www-data». Si vous avez des sous-répertoires, vous voudrez exécuter cette commande pour chaque sous-répertoire (ce type d'autorisation ne fonctionne pas avec «-R»). Heureusement, de nouveaux sous-répertoires seront créés avec le bit «setgid» défini automatiquement.

Si nous devons autoriser l'accès en écriture à Apache, à un répertoire de téléchargement par exemple, définissez les autorisations pour ce répertoire comme suit:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

Les autorisations ne doivent être définies qu'une seule fois, car les nouveaux fichiers se verront automatiquement attribuer la propriété appropriée.

Kwadz
la source
Cette solution fonctionne pour moi. Avant cela, j'exécute toujours le serveur à partir du terminal en utilisant l'utilisateur root. Avec cette solution, je peux télécharger un fichier dans un répertoire qui a l'autorisation 770. C'est génial, car avant cela, je ne peux télécharger un fichier qu'avec l'autorisation 777.
Ifan Iqbal