La gestion des permissions sous Linux

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Dans cet article nous allons nous intéresser aux permissions sous Linux. J’aborderai en passant deux petits points de sécurité pour vous montrer pourquoi il faut impérativement faire attention aux permissions attribuées.

Tout au long de cet article, nous n’utiliserons qu’un fichier :

file.png

Première chose à savoir, pour afficher les droits attribués au fichier permission, on utilise la commande :

ls -l permission

ls-l.png

Le résultat est composé de plusieurs champs. De gauche à droite :
-Les droits
-Le nombre de liens fait sur ce fichier
-Le propriétaire du fichier
-Le groupe propriétaire du fichier
-La taille du fichier
-La date et l’heure de la création du fichier
-Le nom du fichier

Ce qui va nous intéresser, c’est le premier champ. Ce champ est lui même composé de quatre sous champs :

droits.png

Le premier champ va nous renseigner sur la nature du fichier. Il a trois valeur principales : (c’est un fichier), d (c’est un répertoire), l (c’est un lien). Si vous voulez plus d’informations sur le fichier vous pouvez aussi lancer la commande « file » :

file.png

Bon là  le fichier est vide donc y’a rien à dire…  😅😅

Le deuxième champ décrit les permissions du propriétaire du fichier que l’on désigne par un u. Les permissions de base sont de trois types : read, write et execute abrégés : r, w et x. Du coup si on reprend le fichier permission on se rend compte que defte est le propriétaire et qu’il a les droits d’écriture et de lecture dessus.

Le troisième et le quatrième champ décrivent les permissions données au groupe propriétaire (désigné par un g) et aux autres utilisateurs/groupes (désigné par un o). Il existe un dernier type d’utilisateur : le groupe all désigné par un a.

Si on récapitule, on a trois types de droit différents :

Droits Abréviation
Read r
Write w
Execute x

Et quatre groupements d’utilisateurs :

Groupement Abréviation
User owner u
Group owner g
Others o
All a

Pour modifier les droits sur un fichier on utilise la commande chmod suivi des droits à ajouter (+) ou à enlever () suivant les différents groupes :

sudo chmod u+x,g-r,o-r permission

Ici j’ai ajouté à l'(u)tilisateur propriétaire les droits d’exécution (x), j’ai enlevé au (g)roupe propriétaire les droits de lecture et j’ai enlevé aux autres – (o)thers – les droits de lecture sur le fichier permission. Du coup les permissions sur le fichier deviennent :

permission.png

Seul le user owner peut lire, écrire ou exécuter le fichier. Tous les autres ne peuvent rien faire avec.

Il vous arrivera un jour ou l’autre de vouloir attribuer une série de droits à un répertoire entier. Deux solutions s’offriront à vous : soit vous attribuez les droits à chaque fichiers un à un. Soit vous utilisez la récursivité pour vous faciliter la vie.

Si je crée le répertoire test/ et que je donne les droits d’écriture, de lecture et d’exécution à tout le monde sur le répertoire :

test.png

Alors tout ce qui sera à dans ce répertoire aura aussi tous les droits pour tout le monde. Et ça c’est un énorme problème de sécurité ! En effet cela veut dire que n’importe qui peut lire, modifier et surtout exécuter tout ce qui est contenu dans ce répertoire. A méditer 😉😉 !

Maintenant si je veux supprimer tous les droits à tous les utilisateurs je peux aussi utiliser la commande suivante :

sudo chmod a-rwx permission

nomore.png

Le all signifie que les droits sont attribués à tous les utilisateurs/groupes sans exception.

Bon c’est rigolo de jouer avec des u des g des a des +/ et des lettres mais pour tout ce qui est affectation des droits on dispose d’une technique plus simple une fois maîtrisée : les valeurs octales !

L’idée est simple : pour chaque groupement de droits on va représenter ses droits par un nombre compris entre 0 et 7. Ce nombre sera différent en fonction des droits à attribuer.

En octal le droit de lecture vaut 4, le droit d’écriture vaut 2 et le droit d’exécution vaut 1. Pour cumuler des droits il suffit d’additionner les valeurs octales !

Du coup pour donner des droits d’écriture (4) et de lecture (2) au propriétaire il suffit d’entrer la commande suivante :

sudo chmod 600 permission

user

Ici j’ai mis 600, le 6 correspond au user owner, le premier 0 au group owner et le dernier 0 aux autres.

Si en plus on veut ajouter des droits de lecture (4) au groupe propriétaire et aux autres alors on lancera cette commande :

sudo chmod 644 permission

all.png

6=4+2 : l’utilisateur peut lire et écrire
4=4 : le groupe peut lire
4=4 : les autres peuvent lire

Dernière chose à voir : comment changer le propriétaire d’un fichier ? Pour ça on utilise la commande chown suivie du nom du nouveau propriétaire et du nom du fichier :

sudo chown root permission

owner.png

La même commande existe pour les modifier le groupe propriétaire : chgrp.

II/ Les permissions spéciales

  • Script SUID

Il existe une catégorie de permission très spéciale que l’on attribue à des scripts dits « SUID ».  Quand vous lancez un script, ce dernier tourne en utilisant vos droits. Du coup si vous lancez un script qui lance lui même un autre script alors ce dernier sera exécuté avec vos droits.

Avec un script SUID c’est différent puisque le script sera lancé avec les droits de la personne qui a créée le fichier. Autrement dit si Root crée le fichier delete.sh et lui donne des droits SUID alors si vous le lancez, ce sera avec les droits superadmin.

Pour donner les droits SUID à un fichier on utilise la commande suivante :

sudo chmod u+s permission

A partir de maintenant le fichier permission aura le droit SUID désigné par le « S » :

suid.png

La même chose existe pour les groupes :

sudo chmod g+s permission

L’utilisation de cette permission est à prendre avec des pincettes puisque la moindre erreur peut avoir de graves conséquences en terme de sécurité. Si vous voulez avoir un aperçu des possibilités de compromissions des scripts SUID je vous invite à lire cet article que j’ai trouvé absolument MON-STRU-EUX.

  • Le Sticky Bit

Le Sticky Bit a une trèèèèèèèèèèèès très longue histoire. A l’origine on donnait à un programme le Sticky Bit pour indiquer à la machine qu’une fois que le programme a fini de s’exécuter, il devait rester en mémoire. Cela permettait de réduire le temps d’exécution d’un programme.

Maintenant le Sticky Bit est utilisé afin d’empêcher n’importe qui de supprimer un fichier qui ne lui appartient pas. Imaginez la situation suivante, vous créez un fichier dans le répertoire /tmp. Par défaut tout le monde peut écrire dans ce répertoire et donc tout le monde peut aussi supprimer ce fichier. Ça serait chiant de se le faire supprimer nan ?

Bah justement en mettant le Sticky Bit vous empêcher tout le monde (sauf vous et root) de supprimer ou renommer ce fichier. Ça peut donc être intéressant.

Pour donner à un fichier le Sticky Bit il faut utiliser cette commande :

sudo chmod u+t permission

stickybit.png

Un fichier Sticky Bit aura un droit supplémentaire symbolisé par le « T« .


En résumé faites attention aux droits que vous donnez  et surtout n’utilisez jamais cette commande :

sudo chmod 777 permission

A moins que ce soit nécessaire ou réfléchis ! 😉😉

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s