La plupart des réponses ne sont pas écrites dans un souci de sécurité. C'est bien de sentir que courir à sudo
chaque fois n'est pas très sage. Si vous faites une faute de frappe (par exemple un seul espace blanc au mauvais endroit: sudo rm -rf / var/www/dir
ne pas exécuter! ), Vous risquez de détruire votre système.
Remarque: à partir de Apache 2.4.7 / Ubuntu 14.04, /var/www
a été déplacé vers /var/www/html
Ajuster les commandes dans cette réponse en conséquence.
Voir:
Mauvaises idées:
chmod 777
(sagarchalise) - cela permet à toute personne ayant accès à votre système d'écrire dans les répertoires et les fichiers, permettant ainsi à l'intrus d'exécuter n'importe quel code sous l' www-data
utilisateur
chgrp -R www-data $HOME
(cob) - cela permet www-data
de lire ou d'écrire tous les fichiers du répertoire de base. Cela ne tient pas compte de la règle du moindre privilège
chown -R $USER:$USER /var/www
(kv1dr) - à moins que le monde ne dispose d'autorisations de lecture /var/www
, le serveur Web exécuté www-data
ne pourra pas lire (servir) les fichiers. Si le fichier est un document HTML ordinaire accessible au public, le problème peut être résolu si le monde peut lire le fichier. Mais si le fichier est un fichier PHP contenant des mots de passe, c'est bien le cas.
REMARQUE : dans les solutions ci-dessous, j'ai accordé www-data
des privilèges d'écriture. Cependant, /usr/share/doc/base-passwd/users-and-groups.txt.gz
déclare:
www-data
Certains serveurs Web fonctionnent en tant que www-data. Le contenu Web ne doit pas appartenir à cet utilisateur, sinon un serveur Web compromis pourrait réécrire un site Web. Les données écrites par les serveurs Web seront la propriété de www-data.
Si possible, n'accordez pas d' autorisations d'écriture au www-data
groupe. www-data
doit seulement pouvoir lire les fichiers pour que le serveur Web puisse le servir. Le seul cas où www-data
des autorisations en écriture sont nécessaires concerne les répertoires stockant les téléchargements et d'autres emplacements à écrire.
Solution 1
Ajoutez-vous au www-data
groupe et définissez le bit setgid sur le /var/www
répertoire de sorte que tous les fichiers nouvellement créés héritent également de ce groupe.
sudo gpasswd -a "$USER" www-data
Corrigez les fichiers créés précédemment (en supposant que vous soyez le seul utilisateur de /var/www
):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(encore plus sûr: utilisez 640
ou 2750
et manuellement chmod g+w file-or-dir
qui doit être accessible en écriture par le serveur Web)
Solution 2
Créez un lien symbolique pour chaque projet vers votre répertoire personnel. Supposons que votre projet se situe à ~/projects/foo
et que vous souhaitez l'avoir situé à /var/www/foo
, exécutez:
sudo ln -sT ~/projects/foo /var/www/foo
Si votre répertoire personnel n'a pas de bit d'exécution (descendant) défini pour other
(pour des raisons de sécurité), remplacez-le par le groupe www-data
, mais définissez le bit d'exécution uniquement (pas de lecture / écriture). Faites de même pour le ~/projects
dossier car il peut contenir d’autres projets que www. (Vous n'avez pas besoin sudo
si vous avez déjà ajouté votre utilisateur au www-data
groupe.)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Définissez le groupe www-data
sur ~/projects/foo
et autorisez le serveur Web à lire et à écrire dans des fichiers et des fichiers + répertoires et à descendre dans les répertoires suivants:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Encore plus sûr: utilisez 640 et 2750 par défaut et manuellement les fichiers et répertoires chmod devant être accessibles en écriture à l'utilisateur du serveur Web. Le bit setgid ne doit être ajouté que si vous souhaitez que chaque fichier nouvellement créé ~/projects/foo
soit accessible au groupe.
A partir de maintenant, vous pouvez accéder à votre site à http://localhost/foo
et modifier vos fichiers de projet en ~/projects/foo
.
Voir également