Encore un article sur les droits Linux ? Pffff j’en ai déjà lu plein et franchement….
Allez essayez quand même de lire celui-ci, j’ai essayé de faire au plus simple ! En particulier vous trouverez TOUS les droits résumés en un seul tableau (à la fin de l’article).
Alors, vous me suivez ? …
A qui s’adresse cet article ?
Comme l’indique le bandeau sur l’image en tête d’article : aux débutants…. Vous venez de découvrir le Raspberry Pi et son système Linux, vous vous êtes déjà frotté à Linux, mais en mode graphique uniquement, vous n’êtes pas sûr(e) de vos connaissances sur les droits des fichiers et des dossiers sous Linux ? Alors faisons un bout de chemin ensemble.
Découvrir les droits Linux
Tout(e) content(e) d’avoir reçu votre Raspberry Pi, vous le mettez sous tension, les LEDs clignotent, l’écran s’illumine… Vous tapez quelques commandes trouvées dans The MagPi
ls -al
par exemple, et ….
![Copie d'écran Raspberri Pi - Droits Linux - File permissions Copie d'écran Raspberri Pi - Droits Linux - File permissions]()
Copie d’écran Raspberri Pi – Droits Linux
Vous voilà tout(e) pensif(ve) devant cet écran. Qu’est-ce que c’est que tous ces trucs? Puisque vous êtes là, on va regarder ça ensemble.
A quoi ça sert les droits sous Linux?
Utilité des droits sous Linux
Linux est un système très utilisé par les professionnels, en particulier comme serveur. Lorsqu’un système est utilisé par plusieurs utilisateurs, il est souvent nécessaire de les empêcher d’exécuter n’importe quelle application, ou d’accéder à n’importe quel document pour le lire, le modifier ou le détruire. Il faut également interdire aux utilisateurs ou groupes d’utilisateurs de copier leurs fichiers dans les répertoires des autres. Ainsi, tout fichier ou répertoire sous Linux possède un propriétaire et des droits d’accès différents pour l’utilisateur, le groupe, ou tout le monde.
Identifier le propriétaire
![Copie d'écran Raspberri Pi - Droits Linux - File permissions Copie d'écran Raspberri Pi - Droits Linux - File permissions]()
Le propriétaire d’un dossier ou d’un fichier est par défaut la personne qui a créé ce dossier / ce fichier. Le nom du propriétaire se trouve dans la 3ème colonne en partant de la gauche.
Identifier le groupe propriétaire
C’est le groupe d’utilisateurs auquel appartient le fichier. Le nom du groupe se trouve dans la 4ème colonne en partant de la gauche.Tous les utilisateurs qui sont membres du groupe auquel appartient le fichier auront les mêmes droits d’accès au fichier. Ceci est utile si, par exemple, vous avez un projet qui nécessite que certains utilisateurs accèdent à certains fichiers, alors que d’autres utilisateurs ne le peuvent pas. Dans ce cas, ajoutez tous les utilisateurs qui peuvent accéder aux fichiers dans le même groupe, assurez-vous que les fichiers requis sont détenus par ce groupe, et définissez les permissions de groupe des fichiers en conséquence.
Identifier les autres
Il existe une troisième catégorie d’utilisateurs qui ne sont pas mentionnés sur la copie d’écran, car ils ne sont ni propriétaires du dossier/fichier, ni membres du groupe propriétaire. Ce sont… tous les autres.
Maintenant que nous avons identifié les acteurs, voyons ce que sont ces fameux droits Linux (file permissions pour nos voisins grand-bretons).
Comment s’appelle le fichier ?
![Copie d'écran Raspberri Pi - Droits Linux - File permissions]()
Le nom du fichier ou du dossier se trouve dans la colonne la plus à droite. On remarque sur cette copie d’écran deux noms de fichiers exotiques : . et ..
Le premier . permet au système de mémoriser l’endroit où il se trouve (le répertoire courant ou répertoire de travail)
Le second .. permet au système de mémoriser le dossier parent du dossier où il se trouve. Le dossier parent est le dossier dans lequel vous avez créé le dossier courant.
On utilise le premier pour exécuter un fichier shell par exemple : . /commande
et le second pour dire au système de remonter au dossier parent : cd ..
Les droits Linux
Il existe trois types de permissions d’accès aux fichiers/dossiers en Linux : lecture, écriture et exécution. Ces autorisations sont définies séparément pour le propriétaire du fichier, le groupe propriétaire et tous les autres utilisateurs.
Comment connaître les droits sur un fichier ?
![Copie d'écran Raspberri Pi - Droits Linux - File permissions Copie d'écran Raspberri Pi - Droits Linux - File permissions]()
Ils sont indiqués dans la première colonne à gauche sur la copie d’écran.
Droit de lecture
Sur un fichier normal, la permission de lecture signifie que le fichier peut être ouvert et lu. Sur un répertoire, la permission de lecture signifie que vous pouvez lister (afficher) le contenu du répertoire.
Le droit de lecture est symbolisé par la présence d’une lettre r (read)
Droit d’écriture
Sur un fichier normal, cela signifie que vous pouvez modifier le fichier, ou écrire de nouvelles données dans le fichier. Dans le cas d’un répertoire, l’autorisation d’écriture signifie que vous pouvez ajouter, supprimer et renommer des fichiers dans le répertoire.
Cela signifie que si un fichier est autorisé en écriture, vous êtes autorisé(e) à modifier le contenu du fichier, mais vous n’êtes autorisé(e) à renommer ou supprimer le fichier que si les permissions du répertoire dans lequel se trouve ce fichier fichier vous permettent de le faire.
Le droit d’écriture est symbolisé par la présence d’une lettre w (write)
Droit d’exécution
Dans le cas d’un fichier normal, cela signifie que vous pouvez exécuter le fichier comme un programme ou un script shell. Sur un répertoire, la permission d’exécution vous permet de « transiter » par ce répertoire, c’est-à-dire de le faire figurer dans une succession de répertoires, dans un chemin, ou bien d’en faire le répertoire courant. Ceci est totalement indépendant des deux droits précédents. En effet, si le droit d’exécution sur un répertoire vous permet d’entrer dans le répertoire, vous ne serez pas autorisé(e) à lister (afficher) son contenu, sauf si vous avez également le droit de lecture sur ce répertoire. ![:roll:]()
Le droit d’exécution est symbolisé par la présence d’une lettre x (execute)
Les droits en détail
Le type de fichiers
Si on examine la première colonne de la copie d’écran, on s’aperçoit qu’il est possible de regrouper les 10 signes en plusieurs groupes.
Le premier groupe, en partant de la gauche, est constitué d’un seul caractère. Il affiche le type du fichier. Par exemple, d signifie un répertoire et – signifie un fichier normal.
![Copie d'écran Raspberri Pi - Droits Linux - File permissions Copie d'écran Raspberri Pi - Droits Linux - File permissions]()
Sur la copie d’écran ci-dessus, vous voyez que francois est un fichier puisque le premier signe à gauche est un – , et que pi est un répertoire, puisque le premier signe à gauche est un d.
Le premier caractère peut être l’un de ceux-ci :
d = répertoire
– = fichier normal
l = lien symbolique
s = socket Unix
p = tube nommé
c = fichier de périphérique caractère
b = fichier de périphérique en mode bloc
On continue ?
Les droits du propriétaire, du groupe propriétaire, de tous les autres
![Droits Linux sur le Raspberry Pi - File Permissions howto Droits Linux sur le Raspberry Pi - File Permissions howto]()
Le reste des droits se compose de 3 groupes de trois caractères. Chaque groupe représente les droits (de gauche à droite)
- du propriétaire du fichier
- du groupe propriétaire du fichier
- de tous les autres utilisateurs
Signification des lettres
Les lettres sont assez faciles à retenir.
r = permission de lire (read)
w = permission d’écrire (write)
x = permission d’exécuter (execute)
– = Pas de permission
Les droits du propriétaire
Le deuxième groupe (le premier bloc rwx à droite du d que nous venons de voir) représente les droits du propriétaire. Si la lettre est présente, c’est que le droit est attribué. Sinon ? Eh bien la lettre est remplacée par un tiret.
![Les droits Linux sur le Raspberry Pi - File Permissions howto Les droits Linux sur le Raspberry Pi - File Permissions howto]()
Dans l’exemple ci dessus :
Les droits s’appliquent-ils à un dossier ou à un fichier ?
Les droits du propriétaire sont ? Regardez bien …
…
C’est un fichier normal car le premier signe à gauche est un –
Les droits du propriétaire sont r w – Ce qui veut dire que le propriétaire du fichier a le droit de lire et écrire le fichier (le supprimer, le modifier) mais pas de l’exécuter.
Les droits du groupe
Le troisième groupe (ici en jaune) représente les droits du groupe propriétaire. Si la lettre est présente, c’est que le droit est attribué. Sinon la lettre est remplacée par un tiret.
Dans l’exemple ci-dessus, les droits du groupe sont r – – : Les membres du groupe propriétaire ne peuvent que lire ce fichier ! Ils ne peuvent pas le modifier.
Les droits de tous les autres
Le quatrième groupe (en bleu) représente les droits de tous les autres. Si la lettre est présente, c’est que le droit est attribué. Sinon la lettre est remplacée par un tiret.
![Les droits Linux sur le Raspberry Pi - File Permissions howto Les droits Linux sur le Raspberry Pi - File Permissions howto]()
Dans l’exemple ci-dessus, les droits de tous les autres utilisateurs sont r – – : Les membres qui ne sont ni le propriétaire, ni membres du groupe propriétaire ne peuvent que lire ce fichier ! Ils ne peuvent pas le modifier.
Modifier les droits d’un dossier, d’un fichier
Bon, tout ça c’est bien joli, mais je souhaiterais que « les autres » n’aient aucun droit sur mes fichiers, je n’accepte en lecture que les membres de mon groupe.
La commande chmod
Pour réaliser cette modification, il faut changer les droits du fichier :
regardez le fichier francois : dans le premier ls -al, les droits des autres sont à r – –, dans le second, ils sont à – – – .
Que s’est-il passé entre temps ? j’ai tapé la commande
chmod o-r francois
Détaillons le fonctionnement de chmod :
L’utilisateur root ainsi que le propriétaire d’un dossier/fichier sont habilités à modifier les droits avec la commande chmod. chmod peut travailler de deux façons :
- en mode symbolique
- en mode numérique
Le mode symbolique utilise des lettres uniquement pour ajouter/enlever des droits, alors que le mode numérique utilise le fait que chaque lettre rwx est en fait un bit positionné à 1 lorsque le droit existe, et positionné à zéro lorsque le droit n’est pas attribué. Comme on travaille avec trois bits (rwx), le système octal est utilisé pour gérer les droits en mode numérique.
chmod en mode symbolique
Le mode symbolique est assez facile à retenir. Tout d’abord, décidez pour qui vous définissez les autorisations :
- pour l’utilisateur (u),
- le groupe (g),
- tous les autres (o),
- ou pour les trois (a).
Ensuite, vous pouvez soit ajouter une autorisation (+), la supprimer (-), ou encore effacer les autorisations précédentes et en ajouter une nouvelle (=).
Enfin, vous décidez si vous définissez la permission de lecture (r), la permission d’écriture (w), ou la permission d’exécution (x).
La ligne de commande se termine par le nom du fichier/dossier auquel vous souhaitez appliquer les modifications.
Prenons quelques exemples:
Supposons que vous ayez un fichier normal appelée testfile, et que ce fichier dispose des autorisations d’accès pour tous les groupes (-rwxrwxrwx).
Pour effacer toutes les autorisations, et ajouter la permission de lecture pour tout le monde:
chmod a = r testfile
Après la commande, les autorisations du fichier seront – r – – r – – r – –
Pour ajouter l’autorisation d’exécution au groupe propriétaire :
chmod g+ x testfile
Maintenant, les autorisations du fichier sont – r – – r – x r – –
Pour ajouter à la fois les droits d’écriture et d’exécution au propriétaire du fichier. (Vous pouvez définir plus d’une permission en même temps) :
chmod u + wx testfile
Après cela, les permissions du fichier sont – r w x r – x r – –
Pour retirer l’autorisation d’exécuter à la fois au propriétaire et au groupe propriétaire du fichier. (Encore une fois, notez qu’il est possible de configurer plusieurs permissions à la fois) :
chmod ug-x testfile
Maintenant, les autorisations sont – r w – r – – r – –
Essayez de « tritouiller » les droits d’un fichier par vous même, ça ne risque rien au niveau du système, et ça vous permettra de mémoriser cette commande, souvent utilisée.
Le tableau ci-dessous résume les permissions de fichiers en mode symbolique. J’ai laissé l’appellation anglaise pour faciliter la mise en relation du symbole et de sa fonction :
![Les droits Linux sur le Raspberry Pi - File Permissions howto Les droits Linux sur le Raspberry Pi - File Permissions howto]()
chmod en mode numérique
En mode numérique, on va utiliser la numération en octal pour gérer les droits. Chaque lettre de la série rwxrwxrwx représente un bit. Le bit est à 1 si la lettre existe il est à 0 si c’est un –.
Chaque groupe de trois lettres reçoit une valeur numérique pour chacune des positions :
- r vaut 4
- w vaut 2
- x vaut 1
Pour convertir en octal, il suffit d’ajouter le(s) chiffre(s) correspondant à la (aux) lettres existantes. Exemples :
- r w – vaut 4 + 2 = 6
- r w x vaut 4+ 2 + 1 = 7
En résumé :
![Les droits Linux sur le Raspberry Pi - File Permissions howto Les droits Linux sur le Raspberry Pi - File Permissions howto]()
Ave un (tout petit) peu d’entraînement, ce mode de calcul est très vite acquis et est souvent utilisé par le linuxiens… Pourquoi ? Parce qu’à l’usage il se révèle bien plus rapide et efficace. Vous verrez quand vous y aurez goûté !
On se fait un exemple ?
chmod 755 testfile
Cela met en un coup les permissions sur testfile à 755, soit -rwxr-xr-x. Le propriétaire a un accès en lecture, écriture et exécution (7 = 4 +2 +1), le groupe a le droit de lecture et d’exécution (5 = 4 +1), et le reste du monde peut également lire et exécuter..
Prenons un autre exemple :
chmod 640 testfile
Dans ce cas, les autorisations de testfile deviennent – rw- r– —. Le propriétaire a les permissions de lecture et d’écriture (6 = 4 +2) , le groupe propriétaire est en lecture seule (4), et les autres n’ont aucune autorisation d’accès (0).
Une petite pause …
Si vous voulez bien, je vous propose de faire une courte pause.
Nous avons parcouru ensemble les notions de droits sous Linux, l’identification des différents groupes (propriétaire, groupe propriétaire, autres). Nous avons ensuite détaillé ces droits et vu comment les modifier.
Si vous êtes débutant en Linux, vous venez « d’ingurgiter » un certain nombre d’informations qu’il va falloir « digérer », la meilleure façon étant … de les mettre en application. Jouez avec les droits, créez deux ou trois utilisateurs sur votre Raspberry Pi et essayez de voir les interactions possibles avec les fichiers des autres utilisateurs quand vous êtes connecté comme l’un d’eux. Voyez la différence quand vous êtes connecté en root. Le but de cet article n’est pas de vous donner de « TP » au sens scolaire du terme, mais de vous donner suffisamment de « billes » pour vous en sortir. Alors allez-y, vous ne risquez rien, votre système non plus ! On apprend en faisant des conn… bêtises, et en comprenant les bêtises pour ne plus les refaire !
Si vous « flinguez » votre système (si, si ça arrive !), vous remettrez une image sur la carte SD et hop! c’est reparti. Avant de passer à la suite de cet article (si ça vous dit), entrainez vous un peu sur les notions du début. Vous verrez, le reste sera bien plus simple à aborder..
On se retrouve dans un moment ?
Les droits spéciaux
C’est quoi encore ce truc ?
Imaginez… Vous utilisez un Raspberry Pi avec votre fille qui s’en sert pour préparer du travail scolaire. En tant que root, vous avez un programme de sauvegarde et vous le lui indiquez, pour qu’elle sauvegarde ses fichiers en lieu sûr (un dossier sur un disque dur où vous stockez vos fichiers personnels). Super ! Sauf que quand elle exécute votre programme… il se produit des erreurs car le programme essaye d’accéder à un endroit où votre fille n’a pas le droit d’accéder… Pourtant vous avez bien installé ce programme en tant que root. D’ailleurs quand vous vérifiez, le propriétaire est bien root et le groupe root également. Alors ? En fait, le système exécute un programme avec les droits de celui qui le lance ! Donc votre programme de sauvegarde s’exécute avec les droits de votre fille.
La solution ? Vous pourriez lui donner les droits sur le disque dur. Mmmmouais, même sans le faire exprès (si ça arrive aussi !), elle pourrait supprimer/déplacer/endommager un de vos fichiers. Bon alors donnez lui le mot de passe root, elle fera un su et voilà
. Quoi encore ? Utiliser les droits d’endossement (vous voyez, on y arrive…).
On va dire au système que le fichier de sauvegarde doit s’exécuter non pas avec les droits de celui qui le lance, mais avec les droits de celui qui en est propriétaire (root en l’occurrence). Comme ça votre fille pourra lancer sa sauvegarde tout simplement. Comme elle ne fait pas partie du groupe root elle ne pourra pas modifier le logiciel de sauvegarde pour vous faire des blagues (vous savez comment sont les enfants).
Si vous voyez l’utilité de ces droits, attardons nous un peu. Il y en a trois, le Sticky bit, le SUID et le GUID.
Le Sticky bit
A l’origine il était utilisé pour laisser un programme dans le swap après son utilisation. Il s’appliquait à un fichier et permettait d’optimiser la gestion mémoire. Aujourd’hui Linux n’en tient plus compte.
Dans les distributions Linux, le sticky bit est utilisé sur les répertoires. Sa valeur est 1000, et il est indiqué par une lettre t ou T qui ne remplace pas le x, mais le surcharge dans le groupe others . (si le x est positionné ce sera t, si x est absent, ce sera T)
Lorsque ce droit est positionné sur un répertoire, seul le propriétaire d’un fichier contenu dans ce répertoire pourra supprimer ce fichier. Cependant, un utilisateur possédant les droits d’écriture sur ce fichier peut le modifier (par exemple de le transformer en un fichier vide). La création de nouveaux fichiers est toujours possible pour tous les utilisateurs possédant le droit d’écriture sur ce répertoire.
J’ai créé un dossier sauvegarde. Il a les droits 755, soit rwxr-xr-x. Protégeons le dossier sauvegarde par le Sticky bit :
chmod 1777 sauvegarde
Repérez le x du groupe others qui devient un t lorsque le sticky bit est positionné. Si on enlève le droit x à tous les autres, le sticky bit est indiqué par un T.
![stickybit]()
Les droits d’endossement
Le droit SUID
On a parfois besoin qu’un processus s’exécute non pas avec les droits de celui qui le lance mais avec d’autres droits. Reprenons l’exemple du logiciel de sauvegarde : Vous l’avez installé avec les droits de root, il est donc propriété de root. Mais si votre fille l’exécute, le processus s’exécutera avec ses droits à elle…
Pour que le processus se lance avec les droits du propriétaire du fichier, au lieu de ceux de l’utilisateur qui le lance, il faut positionner SUID. Si vous positionnez le bit SUID, lorsque votre fille le lancera, le processus créé aura « endossé » les droits du propriétaire du fichier (root), et pas ceux de votre fille, utilisateur normal.
SUID n’a pas d’effet sur les répertoires. Sa valeur est 4000, et il est indiqué par une lettre s ou S qui ne remplace pas le x, mais le surcharge dans les droits du propriétaire. (si le x est positionné ce sera s, si x est absent, ce sera S).
Par exemple si un fichier sauve dont les droits sont rwxr-xr-x et dont le propriétaire et le groupe propriétaire sont root se voit affecté du SUID :
c
chmod 4755 sauve
Les droits de sauve deviennent rwsr-xr-x
Le droit GUID
Appliqué à un fichier
Normalement sous Linux quand un programme est exécuté, il hérite des autorisations d’accès de l’utilisateur connecté. SGID permet de donner des autorisations temporaires à un utilisateur pour exécuter un programme avec les permissions du groupe propriétaire.
Appliqué à un répertoire
SGID appliqué à un répertoire modifie le groupe propriétaire des fichiers créés dans ce répertoire. Ce n’est plus le groupe de l’utilisateur connecté (celui qui qui crée le fichier) qui en est le groupe propriétaire, mais le groupe propriétaire du répertoire.
A quoi ça sert ?
Lorsque plusieurs membres d’une équipe partagent un dossier, le fait de positionner le SGID sur ce dossier fait que lorsqu’un membre de l’équipe crée un fichier dans ce dossier, le fichier appartient au groupe propriétaire du répertoire dans lequel ce fichier est créé. Même si les différents membres de l’équipe appartiennent à des groupes principaux différents, pourvu qu’ils aient en commun le groupe propriétaire du répertoire, ils accèderont aux fichiers.
La valeur de SGID est 2000, et il est indiqué par une lettre s ou S qui ne remplace pas le x, mais le surcharge dans les droits du groupe propriétaire. (si le x est positionné ce sera s, si x est absent, ce sera S).
Par exemple si un fichier sauve dont les droits sont rwxr-xr-x et dont le propriétaire et le groupe propriétaire sont root se voit affecté du GUID :
c
chmod 2755 sauve
Les droits de sauve deviennent rwxr-sr-x
Tableau récapitulatif des droits Linux
![Tableau récapitulatif des droits Linux pour le Raspberry Pi Tableau récapitulatif des droits Linux pour le Raspberry Pi]()
Tableau récapitulatif des droits Linux pour le Raspberry Pi
Nous voici arrivés au bout du chemin. Vous devriez pouvoir vous en sortir avec les droits Linux sur votre Raspberry Pi. N’hésitez pas à revenir sur cet article, imprimez le tableau récapitulatif et gardez le sous la main.
Si vous avez relevé des erreurs, je les corrigerai volontiers (vous n’en faites jamais, vous ?).
Si vous avez apprécié, dites-le, d’autres articles de base pourront suivre celui-ci, par exemple les autres commandes utilisées pour modifier les propriétaires ou groupes propriétaires de fichiers/répertoires… Ou les commandes intéressantes pour dépanner/déverminer/débugger un Raspberry Pi récalcitrant.
Si vous n’avez pas aimé dites le aussi, mais SVP, dites pourquoi, ça évitera de renouveler l’expérience ![:roll:]()
Références