77 votes

Comment configurer les permissions linux pour le dossier WWW ?

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.

  1. 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).

  2. 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 :

  1. Contrôle de source comme git ou svn
  2. Les utilisateurs d'un groupe comme "sites web" ( ou même ajouté à "www-data" )
  3. Serveurs comme apache ou lighthttpd
  4. 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

  1. tous les fichiers partageables par ces quatre entités
  2. tous les fichiers non exécutable par erreur
  3. bloquer entièrement l'accès au répertoire à tous les autres
  4. 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.

2voto

Jonny Points 11

Le propriétaire du fichier doit être la personne qui le crée, tandis que le groupe doit être www-data. Le mode pour les répertoires/fichiers est alors en général 755/644. Alors que pour les répertoires et les fichiers, le groupe a besoin d'un accès en écriture, le mode est 775/664. Supposons que Paddy soit le développeur. Au total, cela donne :

chown -R paddy:www-data /var/www/websiteindevelopment
chmod -R 755 /var/www/websiteindevelopment
chmod -R 775 /var/www/websiteindevelopment/directorywritablebygroup
find /var/www/websiteindevelopment -type f -perm 755 -print -exec chmod 644 {} \;  
find /var/www/websiteindevelopment -type f -perm 775 -print -exec chmod 664 {} \;

1voto

MikeyE Points 125

En complément de la réponse de @Xeoncross, je pense qu'il serait bon de configurer les permissions sur les fichiers et les répertoires séparément.

sudo find /var/www -type d -exec chmod 775 {} \;  # Change permissions of directories to rwxrwxr-x
sudo find /var/www -type f -exec chmod 664 {} \;  # Change file permissions to rw-rw-r--

Cela permettra aux développeurs de créer et de modifier des répertoires dans /var/www, ce qui semble important car les développeurs peuvent avoir besoin de créer des répertoires supplémentaires ou de supprimer un répertoire qui n'est plus nécessaire.

Il permettra également aux développeurs de créer et de modifier des fichiers de code (lire des fichiers HTML, PHP, etc.). Mais, l'accès en lecture seule sera toujours autorisé pour tous les autres.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X