Les permissions des fichiers sous Linux

Comme évoqué la semaine dernière dans mon Live High-Tech #15, j'ai décidé de mettre fin à mon Wiki (dont tout le monde ignorait l'existence 😀 ) pour intégrer petit à petit son contenu sur JusteGeek.fr. Notez au passage que certains contenus sont déjà présents sur ce site et étaient en doublons ici et sur le Wiki. Allez, on commence donc aujourd'hui avec une publication concernant les permissions des fichiers sous Linux.

Sous linux, il est en effet possible de gérer les permissions sur les fichiers grâce à la commande chmod. Pour commencer, précisons qui sont les utilisateurs, et quels sont les droits dont on parle.

Attribution des Permissions des fichiers sous Linux

Attribution des Permissions des fichiers sous Linux

 

Les utilisateurs

Un fichier sous linux appartient à un utilisateur et à un groupe. Il existe trois types d'utilisateurs différents pour lesquels on va pouvoir gérer les droits :

  • u (pour user) : l'utilisateur auquel appartient le fichier/dossier
  • g (pour group) : le groupe auquel appartient le fichier/dossier
  • o (pour other) : les autres utilisateurs

 

Les droits

Plusieurs permissions peuvent être appliquées sur les fichiers/dossiers :

  • r (pour read) : droit de lire le fichier/dossier
  • w (pour write) : droit de modifier le fichier/dossier
  • x (pour execute) : droit d’exécuter le fichier
  • - (pour rien) : aucun droit sur le fichier/dossier

 

L'attribution des permissions

Pour assigner des permissions sur les fichiers/dossiers, il convient de combiner utilisateurs et droits. Voici quelques exemples. Pour donner les droits à l'utilisateur en lecture écriture sur un fichier texte.txt, il convient d'entrer la commande suivante :

chmod u+rw texte.txt

Pour enlever le droit en écriture au groupe et aux autres utilisateurs, il convient de faire :

chmod go-w texte.txt

 

L'attribution des permissions en octal

L'attribution des permissions peut également être faite en utilisant la notation octale. Cela donne par exemple :

chmod 700 texte.txt

Cette commande assigne alors les droits (rwx) à l'utilisateur sur le fichier texte.txt. Voici un tableau pour comprendre la notation octale :

usergroupother
Read=4XXX
Write=2X
Exec=1XXX
Octal755

Ainsi, on attribuera une valeur 755 avec la commande chmod.

 

Voici un second tableau expliquant les différentes valeurs alphanumériques et octales :

PermissionsValeur AlphanumériqueValeur Octale
aucun droit- - -0
exécution seulement- - x1
écriture seulement- w -2
écriture et execution- w x3
lecture seulementr - - 4
lecture et exécutionr - x5
lecture et écriturer w -6
lecture, écriture et exécutionr w x7

 

Les droits spéciaux

En plus des permissions des fichiers que l'on vient de voir, il existe 3 droits spéciaux : SUID, SGID et Sticky Bit. Ces permissions sont également attribuées avec la commande chmod. Elles peuvent aussi être définies en octal : on les place alors devant les permissions vues plus haut. On parle alors du groupe des droits spéciaux.

 

SUID

SUID signifie 'Set User ID'. Si ce bit est positionné, la commande se lancera avec l'UID de l'utilisateur. Pour positionner ce bit, on utilise l'option s de la commande chmod.

chmod u+s /bin/cat

Mais on peut aussi positionner le SUID en octal, de la manière suivante: on met à 1 le premier bit du groupe des droits spéciaux

chmod 4755 /bin/cat

Le “4” correspond ici au SUID.

Et pour retirer ce bit :

chmod u-s /bin/cat

 

SGID

SGID signifie 'Set Group ID'. Cela fonctionne de la même façon que le SUID, sauf que dans ce cas, il s'agit de l'ID du groupe. Pour positionner ce bit, on utilise l'option s de la commande chmod.

chmod g+s /bin/cat

Mais on peut aussi positionner le SGID en octal, en mettant à 1 le second bit du groupe des droits spéciaux :

chmod 2755 /bin/cat

Le “2” correspond ici au SGID.

 

Et pour retirer ce bit :

chmod g-s /bin/cat

 

Il est bien sur possible de positionner en même temps le bit SUID et le bit SGID :

chmod ug+s /bin/cat

ou

chmod 6755 /bin/cat

 

Sticky bit

Si ce bit est positionné sur un dossier, seul le propriétaire d'un fichier contenu dans ce dossier pourra le supprimer ou le renommer. Tous les utilisateurs auront cependant accès au fichier en question. Nativement, sous linux, on trouve un exemple concret d'utilisation du Sticky Bit sur le dossier /tmp. Pour positionner le Sticky Bit on utilise l'option t de la commande chmod, ou bien on positionne à 1 le troisième bit du groupe de droits spéciaux.

chmod o+t /home/justegeek/communs

ou

chmod 1666 /home/justegeek/communs

 

Considérations relatives aux bits SUID et SGID

Les bits SUID et SGID doivent être utilisés en connaissances de cause car ils peuvent être la cause d'escalade de privilèges. Le mieux est de les réserver à certaines applications pour lesquelles ils sont nécessaires. Il est préférables d'utiliser les programmes su et sudo plutôt que ces bits spéciaux.

Si vous souhaitez lister l’ensemble des setuid/setgid présents sur le système, vous pouvez utiliser la commande suivante :

find / -type f -perm /6000 -ls 2>/dev/null

 

Considérations relatives au sitcky bit

Le sticky bit à son importance et l'une des bonnes pratiques est de toujours le positionner sur les dossiers accessibles en écriture par tous. De plus, il convient de s'assurer que les dossiers accessibles à tous en écriture appartiennent bien à l'utilisateur root, et ce afin d'empecher l'utilisateur de propriétaire de pouvoir modifier tout, malgré la présence  du sticky bit.

 

Sandstorm

Ingénieur Systèmes passionné d'informatique et de High-Tech, Sandstorm a créé JusteGeek.fr en 2013. Il aime les geekeries en tout genre. "Si un produit s'allume c'est un bon point. S'il est connecté, c'est encore mieux !"

Vous aimerez aussi...

6 réponses

  1. Bon résumé !

    J’ajoute juste une info concernant les dossiers :
    Sous linux, tout est un fichier (aussi bien un fichier, qu’un dossier, que ta carte wifi, un flux audio, un processus dans le gestionnaire des tâches…).

    De plus, l’action « ouvrir un dossier » équivaut à « exécuter le fichier "dossier" ».

    Par conséquent :
    – avoir le droit de lire un dossier permet juste de voir la liste des fichiers dedans.
    – pour lire les fichiers d’un dossier, il faut pouvoir exécuter et lire le dossier (permission +rx) ET avoir le droit en lecture sur le fichier qu’on veut lire (+r).
    – pour pouvoir ajouter un fichier dans un dossier, il faut pouvoir exécuter ET écrire le dossier (permission +wx)

    On peut ajouter un fichier dans dans un dossier qu’on n’a pas le droit de lire. Cette séquence fonctionne :

    $ mkdir dossier # on crée un dossier
    $ chmod +wx dossier # on se donne les droit en écriture et en exécution
    $ chmod -r dossier # on se retire les droits en lecture
    $ touch dossier/fichier # on crée un fichier dans le dossier

    On ne pourra pas voir le fichier, car on ne peut pas lire le dossier, mais il est là.
    Si on se redonne les droits de lire le dossier, on le voit :

    $ chmod +r dossier
    $ ls dossier

    Changer le mode (chmod) d’un dossier permet de changer le mode de ce dossier seulement. Ça ne touche pas au mode des fichiers à l’intérieur. Pour ça il faut utiliser l’option "R" (pour « récursive ») :

    $ chmod -R +r dossier # donne les permissions de lecture aux fichiers dans le dossier.

  2. seb dit :

    Venant de Windows j'ai toujours trouvé ça compliqué les droits sous Linux.
    Sous Windows, je vais dans les propriétés de texte.txt, j'ajoute un compte utilisateur, je lui ajoute les droits Contrôle total et j'applique.
    Sous Linux je lance la commande: chmod u+rw texte.txt
    Résultat, sous Windows, je sais qui a les droits sur texte.txt, sous Linux, j'ai ajouté les droits à un utilisateur sans savoir lequel donc au final je ne sais pas qui a les droits dessus.

    Sous Linux, à quel moment je choisis à quel utilisateur je donne le droit? Il faut lancer le terminal en tant que toto, il y a une commande dans le même style que su pour root, il faut ouvrir une session avec l'utilisateur toto? Bref, il y a un truc qui m'échappe.

  3. Erwann dit :

    "Sous Linux, à quel moment je choisis à quel utilisateur je donne le droit? Il faut lancer le terminal en tant que toto, il y a une commande dans le même style que su pour root, il faut ouvrir une session avec l'utilisateur toto? Bref, il y a un truc qui m'échappe."
    Sous Linux/Unix, le propriétaire du fichier ainsi que le groupe utilisateur doivent être définis.
    chown . change owner
    chgrp : change groupe

    Sous Linux, "ls -al" indique directement les droits, le propriétaire et le groupe !!!
    Sous Windows, il faut utiliser l'explorateur de fichier, ensuite clique-droit sur le nom du fichier > propriétés > détails, pour CHAQUE fichier
    ou bien faire en ligne de commande "dir /Q"

    • seb dit :

      Merci pour ces précisions.
      Si il n'y a qu'un groupe et un propriétaire de possible sur un fichier, il faut penser les droits différemment les droits que sur Windows. Par exemple, dans une entreprise on a régulièrement des fichiers qui peuvent être lu par plusieurs personnes et modifiable par plusieurs autres personnes.

  4. Erwann dit :

    Sous Linux, un utilisateur peut être membre de plusieurs groupes : son groupe primaire + des groupes secondaires.
    C'est ce mécanisme qui permet par exemple d'autoriser l'accès à des fonctions particulières - e.g. sudo - à des équipements spécifiques - e.g. CDROM - ou à des parties particulières de l'arborescence - e.g. vboxusers pour le dépôt des VM VirtualBox - en ajoutant simplement l'utilisateur au groupe concerné.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.