Gérer les permissions utilisateur de son serveur web lors d’un développement PHP

J’ai recherché assez longtemps comment bien gérer les permissions du fameux répertoire /var/www de sa machine pour les accorder avec l’utilisateur qui développe, et j’ai enfin trouvé la solution.

Le contexte est le suivant :

  • Tous les fichiers des applications que je développe sont dans le répertoire /var/www
  • Le propriétaire de ce répertoire est www-data
  • Le serveur Web est lancé avec l’utilisteur www-data

Lorsqu’on développe, on crée des nouveau fichiers que l’on met donc dans le répertoire /var/www. Le problème est que le propriétaire de ces fichiers est « bertrand » et le groupe « bertrand » (c’est moi, c’est normal).

Donc, le serveur, qui tourne en tant que www-data ne peut pas lire ni écrire dans ces fichiers.

Alors voici la solution :

  • Ajouter votre utilisateur (ici bertrand) au groupe www-data existant

sudo usermod -a -G www-data bertrand

##Explications :
l’option -a (pour ‘append’) ajoute le groupe aux groupes existants de l’utilisateur

  • Modifier récursivement (option -R) le propriétaire de /var/www en bertrand:www-data

sudo chown -R bertrand:www-data /var/www

  • Changer récursivement les permissions de tous les répertoires en ‘2775

sudo find /var/www -type d -exec chmod 2775 {} +

##Explications :
2775=positionne le groupe id (www-data)
2775=rwx pour le propriétaire (bertrand)
2775=rwx pour le groupe (www-data)
2775=rx pour tout le monde
-type d = parcours uniquement les dossiers (d = directory, f = file)
Le bit « Set group ID » (SETGID) (2) oblige au groupe (www-data) d’être copié à tous les nouveaux fichiers/répertoires créés dans ce répertoire.
Il y a une option récursive -R mais elle n’est pas capable de discriminer les dossiers des fichiers, nous avons donc utilisé la commande find.

  • Modifier les permissions de tous les fichiers en 0664

sudo find /var/www -type f -exec chmod 0664 {} +

  • Modifier le umask pour l’utilisateur bertrand (et les autres si besoin) en 0002.

Le umask contrôle les permissions par défaut des fichiers créés par un utilisateur. 0002 veut dire que les fichiers auront des permissions 664 et les répertoires 775. Paramétrer ceci (en modifiant la ligne umask en base de /etc/profile dans mon cas) veut dire que les fichiers créés par un utilisateur seront modifiables par les autres utilisateurs de mon groupe sans avoir besoin de faire un chmod.

  • Vérifer

Faites maintenant un « touch /var/www/test » puis un « ls -l /var/www » et vérifiez le propriétaire, le groupe et les permissions du fichier test.

Remarque : Vous aurez besoin de vous déconnecter et reconnecter de votre session utilisateur pour que les changements prennent effet.

Source : http://serverfault.com/questions/6895/whats-the-best-way-of-handling-permissions-for-apache2s-user-www-data-in-var

EDIT du 14/01/2015 14:30

Si comme moi vous travaillez avec des liens symboliques de /chemin/vers/mon/projet vers /var/www/monprojet alors vous devrez, en plus des manipulations si-dessus passer les commandes (pour chaque projet) :

sudo chown -R bertrand:www-data /chemin/vers/mon/projet
sudo find /chemin/vers/mon/projet -type d -exec chmod 2775 {} +
sudo find /chemin/vers/mon/projet -type f -exec chmod 0664 {} +

EDIT du 05/03/2015 11:00

En complément de cet article, consulter comment modifier le umask du service php-fpm qui autrement outrepassera les permissions mises en places ici.

Vous aimerez aussi...

2 réponses

  1. Bertrand dit :

    Merci pour le commentaire 🙂 L’article cité en source va plus loin, c’est pour ne pas donner les droits au serveur web d’écrire dans les fichiers créés par le groupe dédié www-pub. C’est vrai que c’est encore mieux, il serait dommageable que le serveur web puisse écraser des développements. Mais bon, à mon sens et à mon niveau, ce n’est pas nécessaire. Le moment venu, tu auras le choix entre la méthode simplifiée de mon article ou la version « hard core user » de l’article en source.

  2. bvrignaud dit :

    Cool, merci pour l’info.
    La prochaine fois que je ré-installe mon poste (espérons que ce ne sera pas dans 10 ans), je luis ferais une belle config d’école 🙂

Laisser un commentaire