Les droits Unix, explications

Rédigé par Alexandre le 2015-06-09

#debian #loisir

En débutant sur Linux, il y a quelques années, je me suis confronté à une notion dont on peut parfaitement faire abstraction sous Windows, les droits. Au travers de cet article, j'essaye de retracer tout ce qu'il faut savoir sur les droits Unix. Je parle d'Unix et non de Linux parce que cette gestion est valable sous Linux, mais également MacOS ainsi que BSD. Dans cet article, les lignes de commandes sont effectuées sous Debian, mais fonctionnent sur l'ensemble des systèmes précédemment cités.

Sous Unix, l'attribution des droits ne se fait pas par utilisateur, mais via trois éléments : le propriétaire, groupe propriétaire et les autres. C'est à l'un de ces éléments que l'on va attribuer des droits cumulables : lecture, écriture et exécution.
Affichons ces droits en utilisant la commande ls -l sur un dossier :

cd /tmp/ykn.fr/les-droits-unix-explications/
ls -l

Ce qui nous retourne ce qui suit :

total 180K
drwxr-xr-x 3 root root   80 mars   9 20:05 .
drwxr-xr-x 3 root root   60 mars   9 20:04 ..
drwxr-xr-x 2 root root   40 mars   9 20:05 dossier1
-rw-r--r-- 1 root root 179K mars   9 21:19 fichier1

Nous allons nous concentrer sur les droits en nous intéressant uniquement aux colonnes suivantes :

  1. drwxr-xr-x : permissions
  2. root : propriétaire
  3. root : groupe propriétaire

Les permissions

Conservons notre exemple de dossier1 qui dispose des droits suivants : drwxr-xr-x.
Afin de comprendre ce que cet ensemble signifie, il faut le découper tous les trois éléments en partant de la droite ; ce qui donne :

  1. r-x : partie la plus à droite, les droits de ceux qui ne sont ni membre du groupe, ni propriétaire (les autres)
  2. r-x : partie suivante, régit les droits du groupe
  3. rwx : dernier trio, définit les droits du propriétaire
  4. d : détermine le type de l'élément

En parlant des types d'élément, voici une liste des plus courant :

  • d pour les dossiers
  • - pour les fichiers
  • l pour les raccourcis, appelés liens sous Unix
  • b pour les périphériques de stockage (disque dur, clé USB, lecteur optique)
  • c les périphériques de saisie (clavier, souris)

Maintenant qu'on y voit un peu plus clair, il nous reste à comprendre ce que signifient les lettres r, w et x :

  • read : droit de lecture du fichier ou d'accès au dossier
  • write : droit d'écriture sur le fichier ou d'écriture dans le dossier
  • execute : droit d'exécution du fichier ou de parcours du dossier

Le propriétaire

Généralement, le propriétaire dispose des droits rw sauf s'il s'agit d'un exécutable, auquel cas il dispose de tous les droits, soit rwx.
Il s'agit d'un utilisateur du système mais pas forcément d'une personne physique. En effet, le propriétaire peut être un démon, appelés service sous Windows. Pour ne citer qu'un exemple, les serveurs web (Nginx/Apache), sous Debian, s'exécutent avec l'utilisateur www-data qui doit donc être le propriétaire des fichiers hébergés.

Le groupe

Le groupe est un ensemble d'utilisateurs. Bien souvent, le propriétaire de l'élément est également le nom du groupe présent sur cet élément. Dans notre exemple avec dossier1, il s'agit du groupe root dont l'utilisateur root fait parti. Sous Debian, les utilisateurs sont automatiquement créés avec un groupe homonyme dont ils font partie.
Définir un groupe contenant plusieurs utilisateurs est pratique ; par exemple, pour utiliser un lecteur CD/DVD/BR sous Debian, il faut faire parti du groupe cdrom.

Modifier les permissions

Ici, il y a deux écoles : d'un côté ceux qui préfèrent faire ça rapidement mais moins clairement et ceux qui préfèrent que ce soit clair mais plus long.

Méthode rapide

sudo chmod 777 fichier1
ls -l fichier1
-rwxrwxrwx 1 root root 0 mars 9 21:19 fichier1​

La commande chmod permet de changer les droits sur un fichier et les chiffres qui sont derrière doivent être découpés, en partant de la gauche cette fois :

  • le premier 7 : droits du propriétaire
  • le deuxième 7 : droits du groupe
  • le troisième 7 : droits des autres

Ce chiffre 7 peut chiffonner un peu, mais en fait les permissions sont réparties comme ceci :

  • 0 : aucune
  • 1 : exécution
  • 2 : écriture
  • 4 : lecture

D'accord, il n'y a pas de 7 dans la liste ci-dessus, mais c'est normal puisqu'il faut additionner les nombres pour définir les permissions. Voyons des cas concrets :

  • je veux des droits de lecture et écriture : 4 + 2 = 6
  • je veux des droits d'exécution et lecture : 1 + 4 = 5
  • je veux tous les droits : 0 + 1 + 2 + 4 = 7

Du coup, si je veux que le propriétaire ait tous les droits mais les autres qu'en lecture et exécution, je dois utiliser la commande suivante : chmod 755 fichier1.

Méthode claire

Cette méthode est un peu moins efficace puisqu'il n'est pas possible de supprimer et d'ajouter des permissions en une seule fois.

sudo chmod ugo+rwx fichier1
ls -l fichier1
​-rwxrwxrwx 1 root root 0 mars 9 21:19 fichier1

Effectivement, ce n'est pas forcément plus clair, mais une fois que l'on découpe :

  • ugo : propriétaire-groupe-autres = user-group-others
  • + : ajouter les droits
  • rwx : lecture-écriture-exécution = read-write-execute

On y voit toujours plus clair avec quelques exemples :

  • je veux enlever les droits de lecture au groupe : chmod g-r fichier1
  • je veux enlever les droits d'écriture et d'exécution à tous : chmod a-wx fichier1 (le a est pour tous, all en anglais)
  • je veux ajouter les droits d'écriture au propriétaire : chmod u+w fichier1

Modifier le propriétaire et/ou groupe

Maintenant que nous savons modifier des droits, il nous faut déterminer qui en est le propriétaire ou le groupe propriétaire.

Changer le propriétaire

sudo chown user1 fichier1
ls -l fichier1
​-rwxrwxrwx 1 user1 root 0 mars 9 21:19 fichier1

La commande chown permet, comme son nom l'indique, de changer le propriétaire (change owner en anglais).
Pour que cette commande fonctionne, il faut que l'utilisateur existe sur le système.

Changer le groupe

sudo chgrp group8 fichier1
ls -l fichier1
​-rwxrwxrwx 1 user1 group8 0 mars 9 21:19 fichier1

Ici, la commande change de nom, pour un toujours aussi parlant chgrp, pour changer le groupe (change group en anglais).
Comme pour la commande chown, cette commande doit avoir un nom de groupe valide en paramètre.

Le changement de groupe peut également être effectué via la commande chown en l'utilisant comme ceci :

sudo chown :group14 fichier1

Personnellement je n'utilise que la commande chown, mais c'est parce qu'elle permet ce qui suit.

Changer les deux en une seule fois

En informatique, plus on est feignant, plus on va vite. Voici donc ce que l'on peut faire avec chown :

sudo chown user4:group2 fichier1
sudo ls -l fichier1
​-rwxrwxrwx 1 user4 group2 0 mars 9 21:19 fichier1

Là, nous changeons le propriétaire et le groupe en utilisant la commande chown.
Nous pouvons aller plus vite si le nom du propriétaire et du groupe sont identiques en faisant comme ceci :

sudo chown user3: fichier1
sudo ls -l fichier1
​-rwxrwxrwx 1 user3 user3 0 mars 9 21:19 fichier1

Bonus

Si on souhaite connaître la liste des utilisateurs du système :

cat /etc/passwd

Et pour les groupes, c'est comme ceci :

cat /etc/group

Dans les exemples, je ne parle que de changer les droits sur un fichier, mais comment faire pour un dossier ? C'est exactement pareil. Mais si on souhaite appliquer les changements aux sous-dossiers et fichiers contenus dans ce dossier, il faut utiliser l'option -R. Cette option fonctionne avec toutes les commandes citées dans cette article.

Vous pouvez compléter vos connaissance en lisant la page Wikipedia sur les droits Unix.