Lorsqu'on affiche les détails d'un fichier à l'aide de la commande ls -la, on voit, entre autres, les droits associés aux fichiers de même que le nom du propriétaire du fichier :
Les droits sont attribués à trois catégories d'usagers :
On parlera des droits UGO : User, Group, Others.
On pourra aussi spécifier a pour All (incluant l'usager propriétaire, le groupe propriétaire et les autres usagers).
Pour chaque fichier, on doit déterminer les niveaux de droits :
Lorsqu'on liste les fichiers avec leurs détails, les droits sont affichés selon la séquence suivante :
Les droits non attribués sont représentés par un tiret. Ainsi, dans la liste de droits suivante :
rw-r--r--
on voit que l'usager propriétaire a les droits de lecture et d'écriture mais pas d'exécution et que le groupe propriétaire ainsi que tous les autres n'ont que le droit de lecture.
Voici une représentation graphique intéressante des droits sur un fichier. On y voit les trois catégories d'usager (User, Group, World - ou Others) et les trois niveaux de droits (Read, Write et Execute). En bonus, on y voit le résultat en notation octale.
Peu importe l'outil que vous utilisez pour modifier les droits d'un fichier, rappelez-vous que seuls le propriétaire du fichier et l'usager root peuvent modifier les droits.
Au shell, il est possible de modifier les droits en utilisant la notation symbolique ou la notation octale. Les deux notations pourront être utilisées à l'aide de la commande chmod.
La notation symbolique utilise les caractères u, g, o ou a pour représenter les catégories d'usagers et les caractères r, w et x pour représenter les niveaux de droits.
chmod categories_usagers +|-|= niveaux_de_droits[,caterogies +|-|= niveaux] nom_fichier
Vous utiliserez au choix l'opérateur + pour ajouter un droit aux droits existants, l'opérateur - pour supprimer un droit ou l'opérateur = pour changer les droits. Donc, avec les opérateurs + et -, les droits non listés ne seront pas modifiés tandis qu'avec l'opérateur =, seuls les droits listés seront disponibles.
Remarquez qu'il y a seulement deux espaces dans cette commande : un après le nom de la commande et un autre avant le nom du fichier.
Ex :
chmod u+x test.sh -> ajoute le droit d'exécution au fichier test.sh pour l'usager propriétaire sans modifier les droits de lecture et d'écriture.
chmod o-w test.sh -> enlève le droit d'écriture aux autres usagers sans modifier les droits de lecture et d'exécution.
chmod ugo=r test.sh -> tous les usagers n'ont que le droit de lecture. Les droits d'écriture et d'exécution sont enlevés.
chmod o=x test.sh -> les autres usagers n'ont que le droit d'exécution. Les droits de lecture et d'écriture sont enlevés.
chmod u=rw test.sh -> les usagers du groupe propriétaire ont les droits de lecture et d'écriture. Le droit d'exécution est enlevé.
chmod o=- test.sh -> Les autres usagers n'ont aucun droit sur le fichier.
chmod u+x,o=- test.sh -> Ajoute le droit d'exécution à l'usager propriétaire et retire tous les droits aux autres usagers
La notation octale n'utilise que des nombres pour représenter les droits attribués. Les droits octaux fonctionnent comme suit :
Si le nombre représentant les droits a trois chiffres :
Si le nombre représentant les droits a quatre chiffres :
Pour chacun des chiffres, les droits se définissent comme suit :
Ex :
chmod 740 test.sh
Dans cet exemple, on a attribué les droits suivants sur le fichier test.sh :
usager proprio : lecture, écriture et exécution
groupe proprio : lecture
autres : aucun droit
Le tableau suivant donne la correspondance entre la notation symbolique et la notation octale.
Nombre octal | Représentation binaire | Représentation symbolique |
---|---|---|
0 | 000 | - - - |
1 | 001 | - - x |
2 | 010 | - w - |
3 | 011 | - w x |
4 | 100 | r - - |
5 | 101 | r - x |
6 | 110 | r w - |
7 | 111 | r w x |
Pour que les droits donnés à un dossier s'appliquent également à tous les sous-dossiers et à leurs fichiers, il faut utiliser l'attribut -R.
chmod -R 740 mondossier
Voici une autre technique pour changer les droits de façon restrictive. Elle utilise la commande find combinée à -exec afin d'exécuter une commande sur chaque élément trouvé.
Dans cet exemple, on donne le droit 644 (u: rw, g: r, o: r) à tous les fichiers du dossier courant et de ses sous-dossiers. Les droits sur les dossiers ne seront pas touchés.
find . -type f -exec chmod 644 {} \;
Il est possible d'affecter un droit spécial à un répertoire. Ce droit, connu généralement sous le nom « sticky bit », fait en sorte qu'un usager peut effacer un fichier du répertoire seulement s'il en est le propriétaire ou s'il fait partie du groupe propriétaire. Avec le « sticky bit », un usager ne peut effacer un fichier dont il n'est pas propriétaire même s'il a le droit d'écriture sur ce fichier. Sans le « sticky bit », un usager ayant le droit d'écriture sur un répertoire peut en effacer tous les fichiers.
Quand le « sticky bit » est activé, les droits du répertoire sont listés comme suit :
rwxrwxrwt
Le t remplace le x final et indique que, même si tous les usagers ont tous les droits sur ce répertoire, ils doivent être propriétaires d'un fichier pour pouvoir l'effacer.
Le « sticky bit » ne fonctionne pas bien en notation symbolique. Pour qu'il soit correctement mis, il faut s'assurer que les autres usagers aient tous les droits sur le répertoire en plus d'activer le « sticky bit ».
Ex :
chmod o=rwxt repertoire -> active le « sticky bit »
chmod -t repertoire -> désactive le « sticky bit »
En notation octale, on active ou désactive « sticky bit » en utilisant un nombre à quatre chiffres. Le premier chiffre représente alors l'état du « sticky bit » (1 pour activé et 0 pour désactivé) et les autres représentent respectivement les droits pour l'usager propriétaire, pour le groupe propriétaire et pour les autres usagers.
Ex :
chmod 1777 test.sh
Dans cet exemple :
le « sticky bit » activé.
usager proprio : lecture, écriture et exécution
groupe proprio : lecture, écriture et exécution
autres : lecture, écriture et exécution
Pour le désactiver :
chmod 0774 test.sh
Pour une raison de sécurité, il est d'usage de retirer en même temps le droit d'écriture et d'exécution pour les autres usagers.
Il est dangereux de donner les droits rwx sur un dossier pour les autres usagers à moins d'utiliser le « sticky bit ». Ceci ouvrirait une porte aux utilisateurs malveillants.
La commande umask permet de connaître et de modifier les droits par défaut attribués aux nouveaux fichiers.
Si aucun masque n'est précisé, umask affiche les droits par défaut actuels.
Ex :
umask -S -> affiche les droits par défaut en notation symbolique
umask -> affiche les droits par défaut en notation octale
Le masque est obtenu en soustrayant le masque octal désiré de la valeur 666. Il n'est pas possible de donner le droit d'exécution par défaut.
Ex : pour donner par défaut les droits rw- r-- --- :
On part de 666 : 6 6 6
Moins masque désiré : - 6 4 0
---------------------- --------
Valeur de umask : 0 2 6
Donc : umask 026 -> le masque par défaut sera 640
usager proprio : lecture et écriture
groupe proprio : lecture
autres : aucun droit
La commande umask, si elle est entrée sur la ligne de commande, ne modifie les droits par défaut que pour la session de travail actuelle. Pour modifier les droits par défaut de façon permanente, il faut inclure la commande umask dans un fichier de démarrage.
Lorsqu'un fichier est créé, l'usager qui l'a créé en est automatiquement le propriétaire et son groupe principal est le groupe propriétaire. On peut par la suite changer le propriétaire ou le groupe propriétaire d'un fichier.
Notez qu'il n'est pas nécessaire que l'usager propriétaire du fichier fasse partie du groupe propriétaire du fichier.
Seul l'usager root peut modifier le propriétaire d'un fichier.
Pour modifier le propriétaire d'un fichier et/ou le groupe propriétaire d'un fichier, vous pouvez utiliser la commande chown :
chown [propriétaire][:groupe] nom_fichier
Attention : il n'y a aucun espace de chaque côté des deux points.
Ex :
chown etudiant test.sh -> change l'usager propriétaire
chown etudiant:info test.sh -> change l'usager et le groupe propriétaire
chown :info test.sh -> change seulement le groupe propriétaire
Notez que dans cet exemple, etudiant n'est pas nécessairement un usager du groupe info.
La commande chgrp permet de changer le groupe propriétaire :
Ex :
chgrp info test.sh
Parallèlement aux droits, un fichier possède des attributs. Les attributs permettront de gérer la façon dont le fichier peut être édité ou effacé. Bien que les attributs soient peu utilisés sous Linux, il pourrait arriver qu'ils vous soient très utiles.
Vous pouvez voir la liste des attributs d'un ou plusieurs fichiers à l'aide de la commande lsattr :
Ex :
lsattr test.sh
Cette commande affichera : ----ia-A----- test.sh
Les attributs sont modifiés à l'aide de la commande chattr :
Ex :
chattr [-options] +|-|= attributs nom_fichier
Plusieurs attributs sont disponibles. Certains ne peuvent être attribués que par root. Voici ceux qui vous seront les plus utiles :
Ex :
chattr +i fichier_important.conf
▼Publicité