Résumé actualisé
Le répertoire /var/www appartient à root:root
ce qui signifie que personne ne peut l'utiliser et qu'il est totalement inutile. Puisque nous voulons tous un serveur web qui fonctionne réellement (et que personne ne devrait se connecter en tant que "root"), nous devons corriger cela.
Seules deux entités doivent y avoir accès.
-
PHP/Perl/Ruby/Python ont tous besoin d'accéder aux dossiers et aux fichiers puisqu'ils en créent un grand nombre (ex.
/uploads/
). Ces langages de script doivent être exécutés sous nginx ou apache (ou même quelque chose d'autre comme FastCGI pour PHP). -
Les développeurs
Comment y ont-ils accès ? Je sais que quelqu'un, quelque part a déjà fait cela auparavant. Avec les milliards de sites web qui existent, on pourrait penser qu'il y a plus d'informations sur ce sujet.
Je sais que 777 est une autorisation complète de lecture/écriture/exécution pour le propriétaire/groupe/autre. Donc cela ne semble pas être nécessaire correct car il donne des autorisations complètes à des utilisateurs aléatoires.
Quelles sont les permissions à utiliser sur /var/www
de sorte que :
- Contrôle de source comme git ou svn
- Les utilisateurs d'un groupe comme "sites web" ( ou même ajouté à "www-data" )
- Serveurs comme apache ou lighthttpd
- Et PHP/Perl/Ruby
peuvent tous y lire, créer et exécuter des fichiers (et des répertoires) ?
Si je ne me trompe pas, les scripts de Ruby et PHP ne sont pas "exécutés" directement - mais transmis à un interpréteur. Il n'y a donc pas besoin d'autorisation d'exécution pour les fichiers dans le répertoire /var/www
... ? Par conséquent, il semble que l'autorisation correcte serait chmod -R 1660
ce qui rendrait
- tous les fichiers partageables par ces quatre entités
- tous les fichiers non exécutable par erreur
- bloquer entièrement l'accès au répertoire à tous les autres
- mettre le mode de permission à "sticky" pour tous les futurs fichiers
Est-ce correct ?
Mise à jour 1 : Je viens de réaliser que les fichiers et les répertoires peuvent avoir besoin de permissions différentes - je parlais des fichiers ci-dessus, donc je ne suis pas sûr de ce que les permissions des répertoires devraient être.
Mise à jour 2 : La structure du dossier de /var/www
change radicalement car l'une des quatre entités ci-dessus ajoute (et parfois supprime) constamment des dossiers et des sous-dossiers à de nombreux niveaux de profondeur. Elles créent et suppriment également des fichiers auxquels les trois autres entités peuvent avoir besoin d'un accès en lecture/écriture. Par conséquent, les autorisations doivent faire les quatre choses ci-dessus à la fois pour les fichiers et les répertoires. Puisqu'aucun d'entre eux ne devrait avoir besoin de la permission d'exécution (voir la question sur ruby/php ci-dessus), je suppose que rw-rw-r--
une autorisation serait tout ce qui est nécessaire et totalement sûre puisque ces quatre entités sont gérées par personnel de confiance (voir #2) et tous les autres utilisateurs du système n'ont qu'un accès en lecture.
Mise à jour 3 : Ceci est pour les machines de développement personnel et les serveurs d'entreprises privées. Pas de "clients web" aléatoires comme sur un hôte partagé.
Mise à jour 4 : Cet article par slicehost semble être le meilleur pour expliquer ce qui est nécessaire pour configurer les permissions pour votre dossier www. Cependant, je ne suis pas sûr de l'utilisateur ou du groupe sous lequel apache/nginx avec PHP OU svn/git fonctionnent et comment les changer.
Mise à jour 5 : J'ai (je pense) enfin trouvé un moyen de faire fonctionner tout cela (réponse ci-dessous). Cependant, je ne sais pas si c'est la manière correcte et SÉCURISÉE de le faire. C'est pourquoi j'ai lancé un appel d'offres. La personne qui a la meilleure méthode pour sécuriser et gérer le répertoire www gagne.