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:
- 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 |
pour désigner un Répertoire / Dossier | |
l |
pour désigner un Lien Symbolique (/raccourci) | |
c |
pour désigner un périphérique de type caractère | |
b |
pour désigner un périphérique de type bloc | |
p |
FIFO | pour désigner un FIFO |
s |
pour désigner une Socket |
3 flags r
, w
et x
pour les droits de Fichiers/Dossiers⚓︎
caractère | Signification | Détails |
---|---|---|
r |
= droit de lecture = droit d'ouverture |
ou bien, un tiret - pour indiquer PAS de droit de lecture |
w |
= droit d'écriture |
- pour indiquer PAS de droit d'écriture |
x |
e = droit d'exécution |
- pour indiquer PAS de droit d'exécution |
On dit quelquefois que r
, w
, et x
sont des
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 = 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 = 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 où t = s |
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):
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):
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)
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⚓︎
- 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
- 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 |
777 | |
drwxr-xr-x |
755 | |
-rwxrw-r-x |
765 | |
-rwxrw-rw- |
766 | |
drw-rw-rw- |
666 | |
-rw-r-xrw- |
656 | |
lrw-r-xr-x |
655 | |
drw-r-xr-- |
654 | |
-r--r--r-- |
444 |
- 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 |
---|---|
rwxrwx--- | 770 |
rwxr-xr-- | 754 |
rwxr-x--- | 750 |
rw-r--r-- | 644 |
rw-r----- | 640 |
rw--wx-wx | 633 |
rw--w--w- | 622 |
rw------- | 600 |
r---w---- | 420 |
r-------- | 400 |
chown = CH ange OWN er : 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 = CH ange MOD ification 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)
- Dans le dossier
/home/eleve
créer un dossierMesVacances
- Dans le dossier
MesVacances
, créer un sous-dossierPhotosPerso
+ Créer et/ou Télécharger deux Photos (libres de droits) et placez-les dansPhotosPerso
: image1.png et image2.png - Dans le dossier
MesVacances
, créer un sous-dossierPhotosAmis
+ Créer et/ou Télécharger deux Photos (libres de droits) et placez-les dansPhotosAmis
: image3.png et image4.png - Dans le dossier
MesVacances
, créer un sous-dossierPhotosFamille
+ Créer et/ou Télécharger deux Photos (libres de droits) et placez-les dansPhotosFamille
: image5.png et image6.png - Configurer les droits des fichiers et dossiers de la manière suivante:
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
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 |
,
:
chmod u-x,g+w,o-r monFichier/monDossier
umask
\(\,\) ( 0022
par défaut )
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.
chmod +(droits demandés)
ouchmod -(droits demandés)
ouchmod =(droits demandés)
Nous appellerons 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 umask
de la manière suivante :
D'abord : calculer umask
\()\)
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-- |