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.
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 :
user | group | other | |
---|---|---|---|
Read=4 | X | X | X |
Write=2 | X | ||
Exec=1 | X | X | X |
Octal | 7 | 5 | 5 |
Ainsi, on attribuera une valeur 755 avec la commande chmod.
Voici un second tableau expliquant les différentes valeurs alphanumériques et octales :
Permissions | Valeur Alphanumérique | Valeur Octale |
---|---|---|
aucun droit | - - - | 0 |
exécution seulement | - - x | 1 |
écriture seulement | - w - | 2 |
écriture et execution | - w x | 3 |
lecture seulement | r - - | 4 |
lecture et exécution | r - x | 5 |
lecture et écriture | r w - | 6 |
lecture, écriture et exécution | r w x | 7 |
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.
Partager la publication "Les permissions des fichiers sous Linux"
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.
Merci pour ton commentaire ! J'ai effectivement pas été exhaustif, et j'ai pas parlé de la récursivité etc... 😉
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.
"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"
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.
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é.