Aller au contenu

1NSI : Permissions / Droits des Dossiers et Fichiers Linux⚓︎

Chaque dossier / fichier est la propriété :

  • d'un Utilisateur, dit propriétaire
  • d'un Groupe, dit propriétaire

En fait, chaque fichier/dossier dispose d'une liste de permissions ou droits qui déterminent ce qu'un utilisateur / un groupe a le droit de faire avec ce fichier / dossier.

Représentation Symbolique ugo des Utilisateurs⚓︎

Plus précisément, pour un fichier/dossier spécifique, on définit usuellement les définitions suivantes:

Notation Désigne... Détails
u Utilisateur Propriétaire l'Utilisateur Propriétaire du Fichier / Dossier
g Groupe Propriétaire le Groupe Propriétaire du Fichier / Dossier
o les Autres
(le reste du monde)
(**O**thers) :uk:
toute autre personne ou groupe,
autre que u et
ne faisant pas partie de g
a Tous (**A**ll :uk:) Tout utilisateur et/ou groupe
donc l'addition des 3 précédents
a = u+g+o

Représentation Symbolique rwx des Droits des Fichiers et Dossiers⚓︎

Notation Longue des droits d'un fichier/dossier⚓︎

La notation longue détaillant les droits d'un Fichier/Dossier se décomposent en 4 parties:

Gcluster0rwxOther3 caractères pour Other orwxGroup3 caractères pour Group grwxUser3 caractères pour User ud1 caractère pour Type de Fichier - / d/ l / etc...

  • 1 caractère pour le type de fichier/dossier
  • 3 composantes:
  • 1 composante pour u contenant 3 caractères, et détaillant les droits de l'Utilisateur Propriétaire du Fichier/Dossier
  • 1 composante pour g contenant 3 caractères, et détaillant les droits du Groupe Propriétaire du Fichier/Dossier
  • 1 composante pour o contenant 3 caractères, et détaillant les droits des Autres (reste du monde) sur ce Fichier/Dossier

1 caractère pour le type de Fichier/Dossier⚓︎

Pour désigner le type de fichier/dossier, on utilise 1 caractère :

caractère Signification Détails
- (vide) pour désigner un Fichier régulier
d Directory pour désigner un Répertoire / Dossier
l Link pour désigner un Lien Symbolique (/raccourci)
c Caracter pour désigner un périphérique de type caractère
b Block pour désigner un périphérique de type bloc
p FIFO pour désigner un FIFO
s Socket pour désigner une Socket

3 flags r, w et x pour les droits de Fichiers/Dossiers⚓︎

caractère Signification Détails
r Read
= droit de lecture
= droit d'ouverture
  • d'un fichier : comprendre lire le contenu du fichier avec un logiciel/Terminal
  • d'un dossier : comprendre afficher/lister son contenu: noms, tailles, etc..
    des fichiers/sous-dossiers


ou bien, un tiret - pour indiquer PAS de droit de lecture
w Write
= droit d'écriture
  • d'un fichier : comprendre modifier le contenu du fichier avec un logiciel/Terminal,
    et aussi droit de le vider de son contenu
  • d'un dossier : comprendre autorise la création, suppression, changement de nom
    des fichiers inclus dans le dossier - quels que soient les droits d'accès x au dossier
ou bien, un tiret - pour indiquer PAS de droit d'écriture
x eXecute
= droit d'exécution
  • d'un fichier : comprendre lorsque cela a un sens, par exemple, s'il s'agit d'un
    fichier exécutable (programme ou script)
  • d'un dossier : comprendre droit d'accès/d'entrée dans le dossier, ou d'ouverture du dossier
ou bien, un tiret - pour indiquer PAS de droit d'exécution

On dit quelquefois que r, w, et x sont des flags ou drapeaux.

Aller plus loin : Droits Spéciaux (CULTURE) (à la place de x dans u, g, o )
Il existe d'autres flags, ayant une signification spéciale, lorsqu'ils remplacent x à sa position dans u, g, o

Caractère Spécial remplace x dans ... Signification Détails
s ou S u (User)
ici : s = SetUID
Exemple : -rwsr-xr-x
le fichier/dossier doit être exécuté
avec les droits de l'Utilisateur Propriétaire
Exemple : C'est le cas du binaire (fichier exécutable)
sudo situé dans /usr/bin :
-rwsr-xr-x 1 root root 158K 12 mai 15:14 sudo
^ g (Group)
ici : s = SetGID
Exemple : -rwxr-sr-x
le fichier/dossier doit être exécuté
avec les droits du Groupe Propriétaire
Exemple : C’est le cas du binaire (fichier exécutable)
locate situé dans /usr/bin :
-rwxr-sr-x 1 root locate 43K 2 avril 19:02 locate
t ou T
t = sTicky Bit
o (Others)
Exemple : drwxrwxrwt
seul l’Utilisateur propriétaire du
fichier/dossier peut le supprimer
Exemple : C’est le cas du répertoire /tmp :
drwxrwxrwt 18 root root 660 17 juin 15:20 tmp

Exp

Voici un répertoire/dossier (à cause de la 1ère lettre d) sur lequel chaque composante U, G et O a tous les droits (R+W+X = Lecture+Écriture+Exécution): drwxrwxrwx

On se donne les droits drwxrwxrwx pour un fichier/dossier. On peut dire que :

  • le 1er caractère égal à d \(\Rightarrow\) il s'agit d'un dossier
  • les 3 caractères suivants sont rwx \(\Rightarrow\) l'Utilisateur Propriétaire U a tous les droits sur le dossier (R+W+X = Lecture+Écriture+Exécution):
  • les 3 caractères suivants sont rwx \(\Rightarrow\) le Groupe Propriétaire G a tous les droits sur le dossier (R+W+X = Lecture+Écriture+Exécution):
  • les 3 caractères suivants sont rwx \(\Rightarrow\) les Autres O ont tous les droits sur le dossier (R+W+X = Lecture+Écriture+Exécution):

Gcluster0cluster1ddrwxUserrwxtypeOfFiletype of file: d/l/-d->typeOfFilerwxGrouprwxUserUserrwxUser->UserrwxOtherrwxGroupGrouprwxGroup->GroupOtherOtherrwxOther->Other

Exp

On se donne les droits -rwxr-xr-- pour un fichier/dossier. On peut dire que :

  • le 1er caractère égal à un tiret - \(\Rightarrow\) il s'agit d'un fichier
  • les 3 caractères suivants sont rwx \(\Rightarrow\) l'Utilisateur Propriétaire U a tous les droits sur le fichier (R+W+X = Lecture+Écriture+Exécution):
  • les 3 caractères suivants sont r-x \(\Rightarrow\) le Groupe Propriétaire G a des droits sur le fichier (R+X = Lecture+Exécution):
  • les 3 caractères suivants sont r-- \(\Rightarrow\) les Autres O ont des droits sur le fichier (R = Lecture):

Gcluster0cluster1--rwxUserrwxtypeOfFiletype of file: d/l/--->typeOfFilerwxGroupr-xUserUserrwxUser->UserrwxOtherr--GroupGrouprwxGroup->GroupOtherOtherrwxOther->Other

Exp

$ ls -l
[...]
drwxr-xr--  Musique emma emma    
  • d donc désigne un dossier, nommé Musique, dont:
  • l'Utilisateur Propriétaire (U) est emma
  • le Groupe Propriétaire (G) est emma De plus:
  • U=RWX (les 3 premiers) => L'Utilisateur Emma a les droits de Lire ( R ) et d'Ecrire (W) et d'Exécuter ce dossier (d'entrer dedans): les 3 premiers RWX
  • G=R-X (les 3 du milieu) => Le Groupe Emma a les droits de Lire ( R ), mais PAS d'Ecrire (un - à la place du W), néanmoins il peut Exécuter ce dossier (d'entrer dedans)
  • O=R-- (les 3 derniers) => Tous Les Autres (le reste du monde) ont les droits de Lire ( R ), et c'est tout (- donc pas le droit d'écrire, et un deuxième - donc pas le droit d'exécuter non plus)

Remarque
Usuellement, mais non obligatoirement, les droits d'un fichier/dossier spécifique vont dans le sens décroissant (au sens large, c'est à dire avec égalité possible) du "plus grand droit" pour User (U) vers le "plus petit droit" pour Other (O = le reste du monde). Le contraire, est informatiquement possible, mais intuitivement bizarre/à bien réfléchir...

Représentation Octale des droits⚓︎

Principe de la Représentation Octale

  • La représentation Octale des droits d'un fichier/dossier est une manière de représenter les droits de ce fichier/dossier, mais en utilisant des nombres entiers compris entre 0 et 7 inclus (donc en base 8: en octal), au lieu des flags r,w,x.
  • Chacune des 3 composantes u, g et o se traduit en un nombre entre 0 et 7.
  • Les droits d'un fichier/dossier peuvent donc s'écrire en octal, avec 3 nombres entiers entre 0 et 7 Exemple: 777 ou bien 750 ou bien 644, etc..
  • Plus précisément, les flags r,w et x se traduisent de manière additive selon la convention suivante :

Droit Chiffre
r 4
w 2
x 1

d'où le Tableau de Conversion :

Notation Symbolique RWX Notation Octale Détail Calcul Permissions
rwx 7 = 4+2+1 Lire, Écrire, et Éxécuter
rw- 6 = 4+2+0 Lire, et Écrire
r-x 5 = 4+0+1 Lire, et Éxécuter
r-- 4 = 4+0+0 Lire
-wx 3 = 0+2+1 Écrire, et Éxécuter
-w- 2 = 0+2+0 Écrire
--x 1 = 0+0+1 Éxécuter
--- 0 = 0+0+0 (Aucun Droit)

Ex

  1. Convertir en notation octale, les droits donnés en représentation symbolique rwx suivants, correspondant aux droits de certains fichiers/dossiers/etc..

Notation Symbolique RWX Notation Octale Fichier? Dossier?Autre?
-rwxrwxrwx  
drwxr-xr-x  
-rwxrw-r-x  
-rwxrw-rw-  
drw-rw-rw-  
-rw-r-xrw-  
lrw-r-xr-x  
drw-r-xr--  
-r--r--r--  

  1. Convertir en représentaion symbolique rwx, les droits donnés en notation octale suivants, correspondant aux droits de certains fichiers.

Notation Symbolique RWX Notation Octale
770
754
750
644
640
633
622
600
420
400

chown = CHange OWNer : Modification du Propriétaire de Dossiers et Fichiers⚓︎

⚠ ATTENTION : ⚠ Pour changer le propriétaire d'un fichier et/ou dossier, vous DEVEZ être root

Modifier le Propriétaire et le Groupe Propriétaire d'un fichier

Syntaxe : chown (droits en octal) nomFichier

$ touch monfichier    # créer un fichier
$ ls -l monfichier    # afficher les droits de monfichier
$ su
Mot de Passe:
# chown newuser:newgroup monfichier       # newuser devient le nouveau propriétaire du fichier/dossier
                                        # newgroup devient le nouveau groupe propriétaire du fichier/dossier
$ ls -l monfichier      # vérifier les nouveaux droits
-rw-rw-rw- 1 emma emma 0 27 juin  03:05 monfichier

chmod = CHange MODification rights : Modification des droits de Dossiers et Fichiers⚓︎

⚠ ATTENTION : ⚠ Par sécurité, Il n'est possible de modifier les droits d'un fichier et/ou d'un dossier QUE :

  • si vous êtes le propriétaire du fichier/dossier, ou bien
  • si vous disposez des droits pour le faire: donc si vous faites partie du groupe propriétaire, ET ce groupe dispose des droits de modification (w), ou bien
  • si vous faites partie des autres (o) du fichier ET que les autres (o) ont des droits de modification (w), ou bien
  • si c'est root qui modifie ces droits

chmod en Octal⚓︎

Modifier les droits d'un fichier

Syntaxe 1: chmod (droits en octal) nomFichier

$ touch monfichier      # créer un fichier texte
$ ls -l monfichier      # afficher les droits par défaut
-rw-r--r-- 1 eleve eleve 0 27 juin  03:05 monfichier
$ chmod 666 monfichier  # Donner des droits 666 pour 'monfichier'
$ ls -l monfichier      # vérifier les nouveaux droits
-rw-rw-rw- 1 eleve eleve 0 27 juin  03:05 monfichier

Modifier NON RÉCURSIVEMENT les droits d'un Dossier, donc SEULEMENT LE DOSSIER

Syntaxe 2: chmod (droits en octal) mondossier Cette syntaxe modifie bien les droits d'un dossier 'mondossier', MAIS PAS les droits de ses SOUS-DOSSIERS, NI les droits des fichiers inclus dans 'mondossier'

$ mkdir mondossier      # créer un dossier 'mondossier'
$ ls -l                 # afficher les droits de 'mondossier' par défaut
[...]
drwxr-xr-x  2 eleve eleve       4096 27 juin  03:21  mondossier
$ cd mondossier         # entrer dans "mondossier'
[mondossier]$ mkdir sousdossier # créer un 'sousdossier' dans 'mondossier'
[mondossier]$ touch monfichier  # créer un fichier 'monfichier' dans 'mondossier'
[mondossier]$ ls -l             # vérifier les droits de 'sousdossier' et 'monfichier'
[...]
-rw-r--r-- 1 eleve eleve    0 27 juin  03:52 monfichier
drwxr-xr-x 2 eleve eleve 4096 27 juin  03:52 sousdossier
[mondossier]$ cd ..             # remonte dans le dossier parent /home/eleve
$ ls -l                         # afficher les droits de 'mondossier'
[...]
drwxr-xr-x  3 eleve eleve       4096 27 juin  03:52  mondossier
$ chmod 777 mondossier  # Donner des droits 777 pour 'mondossier'
$ ls -l                 # vérifier les nouveaux droits de 'mondossier'
[...]
drwxrwxrwx  3 eleve eleve       4096 27 juin  04:16  mondossier
$ ls -l mondossier         # vérifier que les droits du 'sousdossier' et 'monfichier'
                            # n'ont PAS été modifiés
-rw-r--r-- 1 eleve eleve    0 27 juin  04:16 monfichier
drwxr-xr-x 2 eleve eleve 4096 27 juin  04:16 sousdossier       

Modifier RÉCURSIVEMENT les droits d'un Dossier, donc le DOSSIER ET les SOUS-DOSSIERS ET les FICHIERS

Syntaxe 3 : chmod -R (droits en octal) mondossier Cette syntaxe modifie RÉCURSIVEMENT ( -R ) les droits d'un dossier 'mondossier', ET AUSSI les droits de TOUS ses SOUS-DOSSIERS, ET AUSSI les droits de TOUS les fichiers inclus dans 'mondossier'

$ chmod -R 777 mondossier  # modifier RÉCURSIVEMENT les droits de 'mondossier'
$ ls -l mondossier      # vérifier que les droits du 'sousdossier'
                        # et 'monfichier' inclus dans 'mondossier'
                        # ONT BIEN été modifiés RÉCURSIVEMENT
-rwxrwxrwx 1 eleve eleve    0 27 juin  03:52 monfichier
drwxrwxrwx 2 eleve eleve 4096 27 juin  03:52 sousdossier

Ex

Toutes les questions suivantes sont à faire exclusivement en ligne de commande (sauf le téléchargement d'images)

  1. Dans le dossier /home/eleve créer un dossier MesVacances
  2. Dans le dossier MesVacances, créer un sous-dossier PhotosPerso + Créer et/ou Télécharger deux Photos (libres de droits) et placez-les dans PhotosPerso: image1.png et image2.png
  3. Dans le dossier MesVacances, créer un sous-dossier PhotosAmis + Créer et/ou Télécharger deux Photos (libres de droits) et placez-les dans PhotosAmis: image3.png et image4.png
  4. Dans le dossier MesVacances, créer un sous-dossier PhotosFamille + Créer et/ou Télécharger deux Photos (libres de droits) et placez-les dans PhotosFamille: image5.png et image6.png
  5. Configurer les droits des fichiers et dossiers de la manière suivante:

GMesVacancesMesVacancesdroits : 777ImagesPersoImagesPersodroits : 700MesVacances--ImagesPersoImagesAmisImagesAmisdroits : 755MesVacances--ImagesAmisImagesFamilleImagesFamilledroits : 777MesVacances--ImagesFamilleimage1.pngimage1.pngdroits : 700ImagesPerso--image1.pngimage2.pngimage2.pngdroits : 700ImagesPerso--image2.pngimage3.pngimage3.pngdroits : 755ImagesAmis--image3.pngimage4.pngimage4.pngdroits : 755ImagesAmis--image4.pngimage5.pngimage5.pngdroits : 777ImagesFamille--image5.pngimage6.pngimage6.pngdroits : 777ImagesFamille--image6.png

chmod en Droits Symboliques rwx⚓︎

Par rapport aux droits existants actuellement pour un fichier/dossier:

  • \(+\) : ajouter les droits suivants, par rapport aux droits actuels, ... au format rwx
  • \(-\) : enlever les droits suivants, par rapport aux droits actuels, ... au format rwx
  • \(=\) : affecter les droits égaux à... au format rwx

AVEC AU MOINS 1 flag u g o a \(\Longrightarrow\) IL NE FAUT JAMAIS UTILISER umask

Dit autrement, dans ce cas, le comportement est prévisible, sans surprises.

Notations Signification Exemples
+ Ajoute des droits
relativement aux droits courants
chmod u+x monFichier/monDossier
Ajoute les droits d'exécution x à l'utilisateur propriétaire u
chmod go+rx monFichier/monDossier
Ajoute les droits de lecture r et d'exécution x
au groupe propriétaire g et aux autres o
- Enlève des droits
relativement aux droits courants
chmod a-x monFichier/monDossier
Enlève les droits d'exécution x à tous a = u+g+o
chmod uo-rw monFichier/monDossier
Enlève les droits de lecture r et d'écriture w
à l'utilisateur propriétaire u et aux autres o
= Affecter les droits égaux à chmod u=x monFichier/monDossier
Affecte les droits d'exécution --x à l'utilisateur propriétaire u
chmod ug=rw monFichier/monDossier
Affecte les droits de lecture r et d'écriture w
à l'utilisateur u et au groupe g propriétaires

GÉNÉRALISATION Notez qu'il est possible de formuler en un seul coup, des demandes différentes pour plusieurs flags, en séparant les demandes par des vigules , : chmod u-x,g+w,o-r monFichier/monDossier

SANS AUCUN flag \(\Longrightarrow\) IL FAUT TOUJOURS UTILISER umask \(\,\) ( 0022 par défaut ) ( CULTURE )

Autrement dit, dans ce cas, l'application de umask provoque des comportements "inattendus" mais en théorie souhaitables, auxquels il faut réfléchir pour bien les comprendre.

Syntaxes Possibles et Mode Opératoire détaillé

  • chmod +(droits demandés) ou
  • chmod -(droits demandés) ou
  • chmod =(droits demandés)

1⃣ Nous appellerons droits demandés, les droits, au format rwx, que l'on souhaite à priori appliquer à CHAQUE flag : à u, à g et à o
⚠ Mais ce ne sont pas les droits demandés qui seront ultimement appliqués, et que nous appelerons les droits retenus ⚠, en effet on doit tenir compte de umask de la manière suivante :
2⃣ D'abord : calculer droits retenus = \((\) droits demandés \(-\) umask \()\)
3⃣ Ensuite : ajouter +, ou soustraire -, ou affecter = les droits retenus (selon la commande demandée)

Rappelons que la valeur par défaut du masque utilisateur umask = 0022 = - --- -w- -w-, Appliquer umask revient donc à ce que les droits d'écriture w sur g et o soient tous deux ramenés à zéro : - (s'ils ne le sont pas déjà)

Notations Signification Exemples
+ Ajoute à tous, des droits
relativement aux droits courants
mais en apppliquant d'abord umask
chmod +x monFichier/monDossier
Droits demandés = Ajoute à TOUS ( u+g+o ) des droits d'exécution x
Droits demandés = Ajoute - --x --x --x
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(ici, rien à faire car les w de g et o des droits demandés sont déjà à vide -)
Droits retenus = Ajoute \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Ajoute - --x --x --x
^ ^ chmod +w monFichier/monDossier
Droits demandés = Ajoute à TOUS ( u+g+o ) des droits d'écriture w
Droits demandés = Ajoute - -w- -w- -w-
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(les w de g et o des droits demandés doivent être ramenés à vide -)
Droits retenus = Ajoute \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Ajoute - -w- --- ---
^ ^ chmod +rw monFichier/monDossier
Droits demandés = Ajoute à TOUS ( u+g+o ) des droits de lecture r et d'écriture w
Droits demandés = Ajoute - rw- rw- rw-
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(les w de g et o des droits demandés doivent être ramenés à vide -)
Droits retenus = Ajoute \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Ajout - rw- r-- r--

Notations Signification Exemples
- Enlève à tous, des droits
relativement aux droits courants
mais en apppliquant d'abord umask
chmod -x monFichier/monDossier
Droits demandés = Enlève des droits d'exécution x à tous u+g+o
Droits demandés = Enlève - --x --x --x
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(ici, rien à faire car les w de g et o des droits demandés sont déjà à vide -)
Droits retenus = Enlève de \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Enlève - --x --x --x
^ ^ chmod -w monFichier/monDossier
Droits demandés = Enlève des droits d'écriture w à tous u+g+o
Droits demandés = Enlève - -w- -w- -w-
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(les w de g et o des droits demandés doivent être ramenés à vide -)
Droits retenus = Enlève \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Enlève - -w- --- ---
^ ^ chmod -wx monFichier/monDossier
Droits demandés = Enlève à TOUS ( u+g+o ) des droits d'écriture w et d'exécution x
Droits demandés = Enlève - -wx -wx -wx
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(les w de g et o des droits demandés doivent être ramenés à vide -)
Droits retenus = Enlève \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Enlève - -wx --x --x

Notations Signification Exemples
= Affecter à tous, des droits égaux à...
mais en apppliquant d'abord umask
chmod =r monFichier/monDossier
Droits demandés = Affecter des droits de lecture r à tous u+g+o
Droits demandés = Affecter - r-- r-- r--
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(ici, rien à faire car les w de g et o des droits demandés sont déjà à vide -)
Droits retenus = Affecter de \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Affecter - r-- r-- r--
^ ^ chmod =w monFichier/monDossier
Droits demandés = Affecter à TOUS ( u+g+o ) des droits d'écriture w
Droits demandés = Affecter - -w- -w- -w-
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(les w de g et o des droits demandés doivent être ramenés à vide -)
Droits retenus = Affecter \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Affecter - -w- --- ---
^ ^ chmod =rw monFichier/monDossier
Droits demandés = Affecter à TOUS ( u+g+o ) des droits de lecture r et d'écriture w
Droits demandés = Affecter - rw- rw- rw-
MAIS il faut commencer par leur enlever umask = - --- -w- -w-
(les w de g et o des droits demandés doivent être ramenés à vide -)
Droits retenus = Affecter \((\) droits demandés \(-\) umask \()\)
Droits retenus \(=\) Affecter les droits - rw- r-- r--