Outils du site


Quelles permissions donner aux fichiers d'un site ?

Une méthode simple et pourtant redoutable pour sécuriser son site web – et plus généralement son serveur – consiste à modifier les droits et le propriétaire des fichiers dudit site. Voici quelques explications succinctes sur le sujet.

Afin de connaître la situation des fichiers, vous pouvez utiliser la commande ls -l. Dans la suite, on utilisera l'exemple ci-dessous :

$ ls -l
total 120
-rw-r--r--   1 www  daemon  18092 May  5 17:09 COPYING
-rw-r--r--   1 www  daemon    306 May  5 17:09 README
-rw-r--r--   1 www  daemon     23 May  5 17:09 VERSION
drwxr-xr-x   2 www  daemon    512 May  5 17:10 bin
drwxr-xr-x   2 www  daemon   1024 May  5 17:10 conf
drwxr-xr-x  12 www  daemon    512 May  5 17:10 data
-rw-r--r--   1 www  daemon   3674 May  5 17:09 doku.php
-rw-r--r--   1 www  daemon  19372 May  5 17:09 feed.php
drwxr-xr-x   6 www  daemon   1536 May  5 17:10 inc
-rw-r--r--   1 www  daemon    182 May  5 17:09 index.php
drwxr-xr-x   8 www  daemon    512 May  5 17:10 lib
drwxr-xr-x   5 www  daemon    512 May  5 17:10 vendor

On observe une ligne par fichier/dossier. Chaque ligne est découpée de cette façon :

<permissions> <inode> <proprietaire> <groupe> <taille> <date dernier acces> <nom du ficher>

Propriétaire et groupe

Chaque fichier appartient à un propriétaire et fait partie d'un groupe. Cela nous permettra de donner certaines permissions aux propriétaires, qui ne seront pas forcément les mêmes que celles données au membre du groupe.

Pour modifier le propriétaire et le groupe, on utilise la commande chown (change owner).

# chown <proprietaire>:<groupe> nom_du_fichier

Les permissions

Les lettres en début de ligne décrivent les permissions accordées au fichier. Nous pouvons retenir deux choses :

  1. Si le premier caractère est un d, alors il s'agit d'un répertoire. Sinon, c'est un fichier (sauf exceptions).
  2. Les caractères restants se lisent 3 par 3. Chaque “trio” décrit

respectivement les permissions pour le propriétaire, pour le groupe puis pour tous les autres.

Par exemple, pour cette ligne :

drwxr-xr-x   2 www  daemon    512 May  5 17:10 bin

On voit qu'il s'agit d'un répertoire. Ensuite, on lit par groupe de 3 par 3 :

  • rwx : Le propriétaire www peut :
    • Le lire : r
    • Écrire à l'intérieur : w
    • L'exécuter (se déplacer dedans pour un répertoire) : x
  • r-x : Ceux appartenant au groupe daemon peuvent
    • Le lire : r
    • L'exécuter (se déplacer dedans) : x
  • r-x : Tous les autres peuvent :
    • Le lire : r
    • L'exécuter (se déplacer dedans) : x

En règle générale, il faut éviter autant que possible de donner les droits d'écriture et d'exécution à d'autres personnes que le serveur web. Parfois, on retire aussi les droits de lecture sur certains fichiers (mots de passe…).

Pour changer les droits, il existe plusieurs méthodes. Certains utilisent une série de chiffres, comme chmod 700. Je trouve cette façon peu explicite lorsqu'on n'a pas encore l'habitude. Quitte à devoir taper quelques commandes en plus, préférez utiliser chmod <identite>±<permission> où :

  • <identite> peut décrire l'utilisateur (u), le groupe (g), les autres (o) ou tous à la fois (a).
  • + ou - pour respectivement ajouter ou retirer les permissions à l'identité choisie précédemment
  • <permission> qui peut être x,r ou w.

Vous prendrez bien quelques exemples?

  • chmod g+r fichier : accorde le droit de lecture aux membres du groupe.
  • chmod o-w fichier : retire aux personnes qui ne sont pas membres du groupe ni propriétaires le droit d'écrire dans le fichier.
  • chmod og-rwx fichier : retire aux membres du groupe et aux autres utilisateurs les droits de lecture, d'écriture et d'exécution sur le fichier.

Ces modifications peuvent être appliquées récursivement (à tous les sous-documents d'un dossier) avec l'option -R.

Astuce : pour autoriser à se déplacer dans les dossiers, sans rendre exécutables les fichiers, utilisez X (majuscule) au lieu de x.