Les droits Unix, explications
Rédigé par Alexandre le 2015-06-09
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 :
drwxr-xr-x
: permissionsroot
: propriétaireroot
: 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 :
r-x
: partie la plus à droite, les droits de ceux qui ne sont ni membre du groupe, ni propriétaire (les autres)r-x
: partie suivante, régit les droits du grouperwx
: dernier trio, définit les droits du propriétaired
: 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
(lea
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.