On attaque maintenant la partie la plus « coton » du chapitre si je puis dire : les droits d'accès.
Le fonctionnement des droits
Chaque fichier et chaque dossier possède une liste de droits. C'est une liste qui indique qui a le droit de voir le fichier, de le modifier et de l'exécuter.
Vous avez déjà vu des listes de droits, oui oui ! Lorsque vous faites un
ls -l, il s’agit de la première colonne :
Code : Console | mateo21@mateo21-desktop: $ ls -l
total 40
drwxr-xr-x 2 mateo21 mateo21 4096 2007-11-13 21:53 Desktop
drwxr-xr-x 2 mateo21 mateo21 4096 2007-11-13 13:46 Documents
lrwxrwxrwx 1 mateo21 mateo21 26 2007-09-19 18:31 Examples -> /usr/share/example-content
drwxr-xr-x 2 mateo21 mateo21 4096 2007-09-25 20:28 images
drwxr-xr-x 2 mateo21 mateo21 4096 2007-10-19 01:21 Images
drwxr-xr-x 3 mateo21 mateo21 4096 2007-09-25 11:11 log
drwxr-xr-x 2 mateo21 mateo21 4096 2007-10-19 01:21 Modèles
drwxr-xr-x 2 mateo21 mateo21 4096 2007-10-19 01:21 Musique
drwxr-xr-x 2 mateo21 mateo21 4096 2007-10-19 01:21 Public
-rw-r--r-- 1 mateo21 mateo21 0 2007-11-15 23:14 rapport.txt
drwxr-xr-x 3 mateo21 mateo21 4096 2007-09-19 19:51 tutos
drwxr-xr-x 2 mateo21 mateo21 4096 2007-10-19 01:21 Vidéos |
Vous voyez tous ces
d,
r,
w et
x au début ? Ce sont ce qu'on appelle les droits d'accès du fichier ou dossier.
On peut voir cinq lettres différentes. Voici leur signification :
- d (Directory) : indique si l'élément est un dossier ;
- l (Link) : indique si l'élément est un lien (raccourci) ;
- r (Read) : indique si on peut lire l'élément ;
- w (Write) : indique si on peut modifier l'élément ;
- x (eXecute) : si c'est un fichier, « x » indique qu'on peut l'exécuter. Ce n'est utile que pour les fichiers exécutables (programmes et scripts).
Si c'est un dossier, « x » indique qu'on peut le « traverser », c'est-à-dire qu'on peut voir les sous-dossiers qu'il contient si on a le droit de lecture dessus.
Si la lettre apparaît, c'est que le droit existe. S'il y a un tiret à la place, c'est qu'il n'y a aucun droit.
Pourquoi est-ce qu'on voit parfois r, w et x à plusieurs reprises ?
Les droits sont découpés en fonction des utilisateurs (figure suivante).
Le premier élément
d mis à part, on constate que
r,
w et
x sont répétés trois fois en fonction des utilisateurs :
- le premier triplet rwx indique les droits que possède le propriétaire du fichier sur ce dernier ;
- le second triplet rwx indique les droits que possèdent les autres membres du groupe sur ce fichier ;
- enfin, le dernier triplet rwx indique les droits que possèdent tous les autres utilisateurs de la machine sur le fichier.
Prenons un cas concret, le fichier
rapport.txt :
Code : Console | mateo21@mateo21-desktop: $ ls -l rapport.txt
-rw-r--r-- 1 mateo21 mateo21 0 2007-11-15 23:14 rapport.txt |
Ses droits sont :
-rw-r--r--
- - : le premier tiret indique qu'il ne s'agit pas d'un dossier. S'il y avait eu un d à la place, cela aurait indiqué qu'il s'agissait d'un dossier.
- rw- : indique que le propriétaire du fichier, mateo21 en l'occurrence, peut lire et modifier (et donc supprimer) le fichier. En revanche, il ne peut pas l'exécuter car il n'a pas de x à la fin. Je rappelle que quiconque peut modifier un fichier a aussi le droit de le supprimer.
- r-- : tous les utilisateurs qui font partie du groupe mateo21 mais qui ne sont pas mateo21 peuvent seulement lire le fichier. Ils ne peuvent ni le modifier, ni l'exécuter. Je reconnais qu'avoir un nom de groupe identique au nom d'utilisateur peut embrouiller : si vous êtes aussi bien organisés que sur mon premier schéma, on parlera plutôt du groupe famille.
- r-- : tous les autres (ceux qui ne font pas partie du groupe mateo21) peuvent seulement lire le fichier.
En résumé, ces droits nous apprennent que l'élément est un fichier, que mateo21 peut le lire et le modifier et que tous les autres utilisateurs peuvent seulement le lire.
Et root ?
Il a quels droits ?
Souvenez-vous d'une chose : root a TOUS les droits. Il peut tout faire : lire, modifier, exécuter n'importe quel fichier.
chmod : modifier les droits d'accès
Maintenant que nous savons voir et comprendre les droits d'accès d'un fichier, nous allons apprendre à les modifier à l'aide de la commande
chmod.
Une précision importante pour commencer : contrairement aux commandes précédentes, vous n'avez pas besoin d'être root pour utiliser
chmod. Vous devez juste être propriétaires du fichier dont vous voulez modifier les droits d'accès.
chmod est un petit peu délicat à utiliser. En effet, on peut attribuer les droits sur un fichier / dossier via plusieurs méthodes différentes, la plus courante étant celle des chiffres.
Attribuer des droits avec des chiffres (chmod absolu)
J'espère que vous êtes prêts pour effectuer quelques additions !
Il va falloir faire un petit peu de calcul mental. En effet, on attribue un chiffre à chaque droit :
Si vous voulez combiner ces droits, il va falloir additionner les chiffres correspondants.
Ainsi, pour attribuer le droit de lecture et de modification, il faut additionner $4+2$, ce qui donne 6. Le chiffre 6 signifie donc « Droit de lecture et d'écriture ».
Voici la liste des droits possibles et la valeur correspondante :
| Droits | Chiffre | Calcul |
|---|
| --- | 0 | 0 + 0 + 0 |
| r-- | 4 | 4 + 0 + 0 |
| -w- | 2 | 0 + 2 + 0 |
| --x | 1 | 0 + 0 + 1 |
| rw- | 6 | 4 + 2 + 0 |
| -wx | 3 | 0 + 2 + 1 |
| r-x | 5 | 4 + 0 + 1 |
| rwx | 7 | 4 + 2 + 1 |
C'est compris ?
Avec ça, on peut calculer la valeur d'un triplet de droits. Il faut faire le même calcul pour les droits que l'on veut attribuer au propriétaire, au groupe et aux autres.
Par exemple, « 640 » indique les droits du propriétaire, du groupe et des autres (dans l'ordre).
- 6 : droit de lecture et d'écriture pour le propriétaire.
- 4 : droit de lecture pour le groupe.
- 0 : aucun droit pour les autres.
Le droit maximal que l'on puisse donner à tout le monde est 777 : droit de lecture, d'écriture et d'exécution pour le propriétaire, pour son groupe et pour tous les autres. Bref, avec un tel droit tout le monde peut tout faire sur ce fichier.
Au contraire, avec un droit de 000, personne ne peut rien faire… à part root, bien sûr.
Pour changer les droits sur le fichier
rapport.txt, et être le seul autorisé à le lire et l'éditer, je dois exécuter cette commande :
Code : Console
Un petit
ls -l pour voir le résultat :
Code : Console | mateo21@mateo21-desktop: $ ls -l rapport.txt
-rw------- 1 mateo21 mateo21 0 2007-11-15 23:14 rapport.txt |
Bingo !
On a bien confirmation que seul le propriétaire du fichier, c'est-à-dire moi, peut le lire et le modifier !
Attribuer des droits avec des lettres (chmod relatif)
Il existe un autre moyen de modifier les droits d'un fichier. Il revient un peu au même mais permet parfois de paramétrer plus finement, droit par droit.
Dans ce mode, il faut savoir que :
- u = user (propriétaire) ;
- g = group (groupe) ;
- o = other (autres).
… et que :
- + signifie : « Ajouter le droit » ;
- - signifie : « Supprimer le droit » ;
- = signifie : « Affecter le droit ».
Maintenant que vous savez cela, vous pouvez écrire :
Code : Console
Signification : « Ajouter le droit d'écriture au groupe ».
Code : Console
Signification : « Enlever le droit de lecture aux autres ».
Code : Console
Signification : « Ajouter les droits de lecture et d'exécution au propriétaire ».
Code : Console | chmod g+w,o-w rapport.txt |
Signification : « Ajouter le droit d'écriture au groupe et l'enlever aux autres ».
Code : Console
Signification : « Enlever le droit de lecture au groupe et aux autres ».
Code : Console
Signification : « Ajouter le droit d'exécution à tout le monde ».
Code : Console | chmod u=rwx,g=r,o=- rapport.txt |
Signification : « Affecter tous les droits au propriétaire, juste la lecture au groupe, rien aux autres ».
Voilà, ouf ! J'ai préféré vous expliquer le fonctionnement à travers des exemples concrets plutôt que de faire un cours théorique sur la syntaxe d'une des utilisations possibles de
chmod.
Normalement si vous suivez mes exemples vous devriez être capables de tout faire !
Et toujours… -R pour affecter récursivement
Le paramètre
-R existe aussi pour
chmod. Si vous affectez des droits sur un dossier avec
-R, tous ses fichiers et sous-dossiers récupèreront le même droit.
Si je veux être le seul à pouvoir lire, éditer et exécuter les fichiers de mon répertoire personnel et de tous ses fichiers, j'ai juste besoin d'écrire :
Code : Console | chmod -R 700 /home/mateo21 |
C'est tout !