Introduction

Pour pouvoir modifier le contenu de la racine web (par défaut dans /var/www/html sur Ubuntu), beaucoup d'utilisateurs ont tendance à éditer leurs fichiers en tant que root (ou avec sudo), c'est absolument à éviter, en effet, si un script de votre site web se voyait être vulnérable, ce script aurait les pleins pouvoirs sur le serveur, ce qu'il faut à tout prix éviter, le plus simple est en général d'ajouter à votre compte utilisateur le droit d'accéder à ce dossier.

Il est préférable de définir vos permissions sur le dossier qui concerne le VHOST, et éviter de définir ces permissions directement sur /var/www, en effet, le mieux d'un point de vue sécurité est de mettre votre utilisateur propriétaire des sous dossiers de /var/www. Par exemple, si la racine de votre site est dans /var/www/monsite, c'est bien sur "monsite" qu'il faudra définir ces permissions.

Mise en place

La première étape sera de mettre notre utilisateur propriétaire direct du dossier concerné, et de mettre www-data en groupe propriétaire:

sudo chown $USER:www-data /var/www/monsite

Notez l'utilisation de $USER, il s’agit d'une variable d'environnement, qui retournera le nom de l'utilisateur actuellement connecté.

Le résultat attendu devrait afficher votre nom d'utilisateur propriétaire du dossier, ainsi que le groupe www-data.

ls -lahs
4.0K drwxr-s---  2 nrousse www-data 4.0K Mar 22 11:29 monsite

Mais ce n'est pas encore terminé, il va maintenant faloir s'assurer que les nouveaux fichiers crées dans ce dossier se verront bien attribuer www-data comme groupe propriétaire. Pour ça, nous allons avoir besoin de définir un bit spécifique sur notre dossier le SETGID, le fonctionement est relativement simple, un dossier ou executable avec le bit SETGID aura la possibilité de se lancer avec les droits de l'utilisateur auquel il appartient. Donc dans notre cas, les fichiers crées par votre utilisateur seront automatiquement crées avec les bonnes permissions (votre user, puis le groupe www-data)

sudo chmod g+s /var/www/monsite
sudo chmod o-rwx /var/www/monsite

Dans cet exemple, g+s va attribuer le flag s (setGID) au groupe (g), donc dans notre cas www-data. Sur la ligne suivante, nous retirons tous les droits (rwx) aux autres utilisateurs (o).

Pour vérifier que tout est en ordre pour nos permissions, vous pouvez vous positionner dans le dossier "monsite" et y créer un nouveau fichier de test:

touch test
ls -lahs

Nous pouvons voir que notre fichier fraîchement crée est bien attribué aux bons utilisateurs (votre user + le groupe www-data)

0 -rw-rw-r-- 1 nrousse www-data    0 Mar 23 13:37 test

Les permissions sur votre dossier web devraient désormais vous permettre d'éditer les fichiers de votre racine web depuis votre propre utilisateur, et sans utiliser root ! 😃