Les permissions sous Linux

Les permissions sous Linux ont tendance à être considérées comme étant complexes à comprendre, en réalité, ces permissions sont relativement simple à comprendre !

Une bonne manière de les appréhender est simplement d'y jeter un oeuil et de voir comment elles sont constituées.

ls -lahs /

Ici, je vais faire un ls -lahs sur la racine de mon système, ce qui nous donnera le résultat suivant:

8,0K drwxr-xr-x  17 root root 4,0K 21 mars  14:24 .
8,0K drwxr-xr-x  17 root root 4,0K 21 mars  14:24 ..
   0 lrwxrwxrwx   1 root root    7 20 janv. 17:33 bin -> usr/bin
4,0K drwxr-xr-x   4 root root 4,0K 21 mars  14:25 boot
 24K -rw-r--r--   1 root root  22K  8 déc.  10:11 desktopfs-pkgs.txt
   0 drwxr-xr-x  23 root root 5,1K 25 mars  09:28 dev
 16K drwxr-xr-x 122 root root  12K 25 mars  09:28 etc
4,0K drwxr-xr-x   4 root root 4,0K  2 janv. 13:10 home
   0 lrwxrwxrwx   1 root root    7 20 janv. 17:33 lib -> usr/lib
   0 lrwxrwxrwx   1 root root    7 20 janv. 17:33 lib64 -> usr/lib
 16K drwx------   2 root root  16K  2 janv. 13:08 lost+found
4,0K drwxr-xr-x   4 root root 4,0K 24 mars  13:04 mnt
4,0K drwxr-xr-x  16 root root 4,0K 24 mars  08:33 opt
   0 dr-xr-xr-x 368 root root    0 25 mars  09:27 proc
4,0K drwxr-x---  10 root root 4,0K 27 févr. 02:01 root
8,0K -rw-r--r--   1 root root 5,1K  8 déc.  10:06 rootfs-pkgs.txt
   0 drwxr-xr-x  38 root root 1,1K 25 mars  09:30 run
   0 lrwxrwxrwx   1 root root    7 20 janv. 17:33 sbin -> usr/bin
   0 lrwxrwxrwx   1 root root   19  9 mars  19:29 snap -> /var/lib/snapd/snap
4,0K drwxr-xr-x   5 root root 4,0K  8 déc.  10:10 srv
   0 dr-xr-xr-x  13 root root    0 25 mars  09:27 sys
   0 drwxrwxrwt  15 root root  420 25 mars  10:02 tmp
8,0K drwxr-xr-x  10 root root 4,0K 24 mars  12:57 usr
8,0K drwxr-xr-x  13 root root 4,0K 25 mars  09:28 var

Ici, nous allons retrouver ces fameuses permissions sur la gauche, par exemple dr-xr-xr-x, ces permissions doivent en réalité être découpées en 4 pour comprendre comment elles fonctionnent:

d rwx r-x r--

Nous avons donc séparé ce bloc de caractères en 4, qui correspondent à des éléments bien précis. Le premier caractère, ici "d" ne correspond pas à une gestion des droits, il s’agit en réalité du "type" de fichier, et il peut prendre les valeurs suivantes:

Et donc, dans cet exemple nous savons que la ligne correspond à un dossier:

d rwx r-x r--

Maintenant, pour les permissions, elles sont séparées en trois groupes distincts qui correspondent à l'utilisateur, au groupe, et aux autres.

Utilisateur Groupe Autres
rwx r-x r--

Maintenant, à quoi correspondent ces lettres ? En réalité c'est plutôt simple:

r w x
Lecture Écriture Exécution

Maintenant que nous avons ces permissions, nous devrions être capable d'en déduire les permissions de notre exemple:

d rwx r-x r--

Notre exemple est donc un dossier (d) dans lequel l'utilisateur propriétaire à tous les droits, le groupe ne pourra pas écrire, et les autres ne peuvent que lire ce fichier:

rwx r-x r--
Lecture Lecture Lecture
Écriture
Exécution Exécution

Voila, maintenant, nous avons normalement bien compris le concept de ces permissions, mais il nous reste encore à comprendre comment les définir, c'est en réalité assez simple à comprendre une fois certaines petites choses comprises, pour modifier les permissions sur un fichier, nous utilisons la commande chmod (Change Mode).

Il y a en réalité deux façons de définir les permissions sous Linux, la manière de faire a assez peu d'importance, c'est principalement une question d'habitude.

Application symbolique des droits

Pour modifier les droits séparément, nous allons utiliser une syntaxe assez simple ou nous devrons indiquer:

1) Pour qui appliquer le changement

2) Quelle modification effectuer

Donc dans cet exemple:

chmod o-rwx

Nous retirons tous les droits (lecture, écriture, exécution) aux "autres"

Il est également possible de spécifier plusieurs permissions directement en une seule commande, les droits devront être séparés par des virgules:

chmod u+rwx,g+r-w,o-rwx

Ici, nous donnons tous les droits à l'utilisateur, ajoutons les droits en lecture au groupe, mais on lui retire également les droits en écriture (-w) et retirons tous les droits aux autres (o-rwx).

En général, cette syntaxe est assez peu utilisée, la plupart des utilisateurs de Linux vont plutôt utiliser la forme octale de chmod.

Application octale des droits

L'application des droits en octal est en général la manière la plus utilisée d'effectuer des modifications sur les droits des fichiers sous Linux, vous avez probablement déjà repéré cette syntaxe:

chmod 755 fichier.txt

Le fonctionnement est en réalité très similaire a ce que nous avons vu juste avant, dans cette syntaxe, chaque droit a une valeur numérique, comme précédemment, ce "755" est en réalité à couper en trois parties, qui vont correspondre à des droits séparés:

7 5 5
Utilisateur Groupe Autres

Nous retrouvons donc nos trois types de droits encore une fois, cette fois de manière numérique, mais à quoi correspondent ces chiffres ? C'est très simple, c'est juste une addition basique ou chaque droits a sa valeur:

Description Symbolique Octal
Lecture R 4
Écriture W 2
Exécution X 1

Donc si on reprend notre exemple de départ chmod 755 fichier.txt il s’agit en fait d'une simple additions des droits octal juste au dessus:

Octal Symbolique Description
7 RWX Correspond à RWX (4+2+1)
5 R-X Correspond à RX (4+1)
5 R-X Correspond à RX (4+1)

Conclusion

Vous devriez maintenant être en mesure d'appliquer les droits qui vous intéressent sur des fichier, cependant, il faut faire attention à comment vous allez appliquer ces permissions, en effet, une mauvaise gestion des droits peut mener à des failles de sécurité sur une machine, par exemple, une mauvaise application de droits sur des fichiers ou des exécutables système pourrait donner accès à certaines information à des utilisateurs n'étant pas sensé y avoir accès.