Formation PUB110 : Linux, 2018 Travailler avec les fichiers

4.3 La protection des fichiers


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 :

ls -la

Catégories d'usagers

Les droits sont attribués à trois catégories d'usagers :

  • L'usager propriétaire du fichier (User)
  • Le groupe propriétaire du fichier. Notez que le groupe propriétaire n'est pas nécessairement le groupe principale de l'usager propriétaire (Group)
  • Les autres usagers : ceux qui ne sont pas le propriéraire du fichier et qui ne font pas partie du groupe propriétaire du ficher (Others)

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 :

  • Le droit de lecture (r pour Read)
  • Le droit d'écriture (w pourWrite)
  • Le droit d'exécution, ou de passage pour un répertoire (x pour eXecute)
  • Aucun droit (noté par un trait d'union)

Lorsqu'on liste les fichiers avec leurs détails, les droits sont affichés selon la séquence suivante :

À qui sont les droits

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.

Permissions sur un fichier

Modification des droits

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.

Notation symbolique

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.

Syntaxe de commande Linux

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 :

Commande Linux

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

Notation octale

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 :

  • Le premier chiffre représente les droits attribués à l'usager propriétaire
  • Le deuxième chiffre représente les droits attribués au groupe propriétaire
  • Le troisième chiffre représente les droits attribués aux autres usagers

Si le nombre représentant les droits a quatre chiffres :

  • Le premier chiffre est utilisé pour le « sticky bit » (voir section suivante)
  • Le deuxième chiffre représente les droits attribués à l'usager propriétaire
  • Le troisième chiffre représente les droits attribués au groupe propriétaire
  • Le quatrième chiffre représente les droits attribués aux autres usagers

Pour chacun des chiffres, les droits se définissent comme suit :

  • La permission de lecture est représentée par le chiffre 4
  • La permission d'écriture est représentée par le chiffre 2
  • La permission d'exécution est représentée par le chiffre 1
  • Si une catégorie d'usagers a plus d'une permisson, on additionne les chiffres représentant les permissions
  • Si aucune permission n'est accordée à une catégorie d'usagers, son chiffre est 0

Ex :

Commande Linux

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

Droits récursifs

Pour que les droits donnés à un dossier s'appliquent également à tous les sous-dossiers et à leurs fichiers, il faut utiliser l'attribut -R.

Terminal

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.

Résultat à l'écran

find . -type f -exec chmod 644 {} \;

« Sticky bit »

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.

Notation symbolique

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 :

Commande Linux

chmod o=rwxt repertoire -> active le « sticky bit »

chmod -t repertoire     -> désactive le « sticky bit »

Notation octale

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 :

Commande Linux

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 :

Commande Linux

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.

Droits par défaut pour les nouveaux fichiers

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 :

Commande Linux

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.

Modification du propriétaire

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 :

Syntaxe de commande Linux

chown [propriétaire][:groupe] nom_fichier

Attention : il n'y a aucun espace de chaque côté des deux points.

Ex :

Commande Linux

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 :

Commande Linux

chgrp info test.sh

Attributs de fichiers

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 :

Commande Linux

lsattr test.sh

Cette commande affichera : ----ia-A----- test.sh

Les attributs sont modifiés à l'aide de la commande chattr :

Ex :

Syntaxe de commande Linux

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 :

  • a (Append) : on ne peut modifier le contenu actuel du fichier. On peut cependant ajouter du texte à la fin du fichier. Ceci pourra être fait principalement avec l'opérateur de redirection >>. Seul root peut mettre ou enlever cet attribut.
  • A : les dates du fichier ne sont pas mises à jour lorsque le fichier est modifié.
  • i (Immutable) : le fichier ne peut pas être modifié ni renommé ni effacé. Seul root peut mettre ou enlever cet attribut.

Ex :

Console Git Bash

chattr +i fichier_important.conf

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre