Droits d'accès aux fichiers
Notion de droits
Les droits d'accès aux fichiers (appelés encore modes
ou permissions)
sont un point essentiel du système Unix. Ils permettent de définir des
droits différents sur un même fichier selon la catégorie
d'utilisateurs.
Ainsi les manipulations de fichiers sont restreintes selon les
droits
alloués à chaque fichier. A chaque catégorie d'utilisateur correspond
des droits spécifiques sur un fichier.
Affichage des droits (ls)
Pour afficher à l'écran les droits alloués à un fichier, il
faut
utiliser la commande ls -l qui
permet de lister les
fichiers d'un répertoire avec toutes les informations connexes
possibles dont les droits du fichier.
Exemple :
ls -l
-rw-r--r--
drwxr-xr-x
-rw-r--r--
-rw-------
|
frank
frank
frank
frank
|
live
live
live
live
|
oiseaux.txt
Bureau
courrier.doc
aTunes
|
Ici n'ont été reproduites que les informations intéressantes
affichées
par la commande (certaines ont été effacées). Sont affichés : la liste des droits puis le nom du
propriétaire de chaque fichier, le nom du
groupe d'utilisateurs auquel appartient le propriétaire des
fichier et enfin le nom du fichier.
En préfixe des droits (et ici en noir) est affiché le type du
fichier (d pour
les répertoires et - pour les
fichiers normaux et les
exécutables).
On peut voir dans cet exemple que tous les fichiers sont du
même propriétaire dont le nom est frank
. Ce propriétaire faisant partie du groupe
appelé live.
Vous apprendrez
par la suite la significations des lettres r, w et x.
Droits d'accès
Les droits d'accès d'un fichier sont au
nombre de trois:
Lecture
L'accès en lecture autorise la lecture du fichier,
c'est-à-dire qu'il
est possible d'éditer ce fichier avec une application quelconque pour
en voir le contenu. Cet accès est désigné par la lettre r
(read).
Alloué à un répertoire, ce droit permet de lister les fichiers
qu'il contient.
Ecriture
L'accès en écriture permet de modifier un fichier et de le
supprimer.
Il est désigné par la lettre w (write).
Alloué à un répertoire, il autorise la modification et la
suppression
des fichiers qu'il contient quelques soient les droits d'accès des
fichiers de ce répertoire (mêmes s'ils ne possèdent pas eux-même le
droit en écriture). Donc attention!
Exécution
L'accès en exécution permet à un fichier exécutable d'être
lancé et à
un répertoire d'être ouvert. Il est désigné par la lettre x
(execute).
Pour qu'un programme puisse être exécuté, il est indispensable
que le droit en exécution sur ce fichier soit autorisé pour
l'utilisateur qui souhaite le lancer.
Quant à un répertoire, il est tout aussi indispensable que son
droit en exécution soit autorisé pour qu'on puisse accèder aux fichiers
qu'il contient.
Ce droit en exécution est sans effet lorsqu'il est affecté à
un fichier qui n'est pas un exécutable.
Catégories d'utilisateurs
A un fichier on affecte les droits correspondants à trois
catégories
d'utilisateurs : les droits du propriétaire du fichier, les permissions
du groupe d'utilisateurs auquel appartient le propriétaire et celles
concédées à tous les autres.
Propriétaire
Le propriétaire d'un fichier est la personne qui le crée. Il
est
désigné par la lettre u (owner).
Le UID
désigne par un identificateur numérique unique le
propriétaire d'un fichier.
Groupe
Un groupe d'utilisateur est un ensemble d'utilisateurs
privilégiés
ayant en général des permissions moindre que le propriétaire d'un
fichier mais plus grandes que la catégorie qui suit. Cette catégorie
est désignée par la lettre g (group).
Le GID
désigne par un identificateur numérique unique le
groupe auquel appartient le propriétaire d'un fichier.
Autres
Cette catégorie regroupe tous les utilisateurs qui ne sont ni
le
propriétaire d'un fichier ni faisant partir du même groupe que le
propriétaire. On les désignent par la lettre a (other).
Modèle concentrique des droits d'accès
Le schéma ci-dessus montre qu'un ensemble de propriétaires
forme
un
groupe, qu'un ensemble de groupes forme la catégorie "autres" (qui sont
tous ceux qui prétendent à accéder aux données).
L'accès à un sous ensemble concentrique suppose a priori
d'obtenir des droits supplémentaires.
Identification des droits
Identification globale
A chaque catégorie d'utilisateur on associe un triplet de
droits :
lecture, écriture et exécution. Au total 9 droits (3*3) sont affectés à
chaque fichier.
Lorsqu'un droit est alloué, on voit la lettre correspondante (r, w ou x). Si le
droit est refusé, on
voit un tiret (- ).
Dans l'exemple ci-contre, le propriétaire dispose des droits
de
lecture et d'écriture. Tandit que le groupe ainsi que les autres ne
disposent que du droit de lecture.
Combinaisons des droits
A chacune des 3 catégories d'utilisateur, on associe d'une des
8
combinaisons différentes possibles pour l'allocation des droits que le
tableau ci-dessous récapitule.
Triplet |
Droits correspondants |
--- |
aucun |
--x |
exécution |
-w- |
écriture |
-wx |
écriture et exécution |
r-- |
lecture |
r-x |
lecture et exécution |
rw- |
lecture et écriture |
rwx |
lecture, écriture et exécution |
Or les droits globaux d'un fichier sont identifiés par
l'association de
3 triplets de droits. Ce qui nous fait 83=512 combinaisons
différentes. Le tableau suivant regroupe quelques unes de ces
combinaisons possibles.
Droits globaux |
Description |
rwxr-xr-x |
Le propriétaire a tous les droits, et le groupe ainsi
que les autres n'ont pas accès en écriture. |
rwxr--r-- |
Le propriétaire a tous les droits, et le groupe ainsi
que les autres n'ont accès qu'en lecture. |
rwxr-x--- |
Le propriétaire a tous les
droits, le groupe possède les droits de lecture et d'exécution alors
que les autres n'ont aucun droit. |
rwx------ |
Le propriétaire a tous les droits mais le groupe et les
autres aucun. |
rw-r--r-- |
Le propriétaire possède les droits de lecture, écriture
mais pas exécution. Et le groupe et les autres ont le droit en lecture. |
rw-rw---- |
Le propriétaire et le groupe ont le droit en lecture et
écriture mais les autres n'ont aucun droit. |
Changement des droits (chmod)
Il est offert au propriétaire d'un fichier (et seulement à lui
seul) de
modifier les droits du fichier. C'est-à-dire qu'il peut supprimer des
droits ou bien en rajouter de nouveaux à chacune des trois catégories
d'utilisateur.
Pour cela, on utilise la commande chmod (change
mode) selon la syntaxe suivante :
chmod droits fichier.
On peut utiliser cette commande de deux façons différentes
pour les
mêmes résultats. On choisit soit la notation symbolique soit la
notation numérique.
Notation symbolique
Pour affecter à chaque catégorie les droits voulus, on peut
utiliser
une notation symbolique selon la syntaxe :
chmod catégorie+opération+liste-des-droits
fichier
Où les termes catégorie, opération et liste des droits doivent
êtres respectivement remplacés par leur notation décrite dans les
tableaux suivants.
Catégorie |
Description |
u |
propriétaire |
g |
groupe |
a |
autres |
Opération |
Description |
+ |
ajouter |
- |
retirer |
= |
définir |
Droit |
Description |
r |
lecture |
w |
écriture |
x |
exécution |
Comme le montre le tableau ci-dessous, la commande chmod
lorsqu'elle est utilisée en notation symbolique ne permet de modifier
les droits que pour une catégorie d'utilisateurs à la fois.
On peut retirer, ajouter ou définir un ou plusieurs droits en
même temps.
Exemple |
Description |
chmod
g=rwx fichier.txt |
Alloue au groupe tous les droits. |
chmod
g-w fichier.txt |
Retire au groupe le droit
d'écriture. |
chmod
a-rwx fichier.txt |
Retire aux autres tous les droits. |
chmod
u=rw fichier.txt |
Alloue au propriétaire les droits
en lecture et en
écriture. |
chmod
a+r fichier.txt |
Rajoute aux autres le droit en
lecture. |
Notation numérique
L'avantage de la notation numérique sur la précédente est de
permettre sur un fichier la définition absolue des droits de toutes les
catégories en même temps selon la syntaxe :
chmod serie-de-3-chiffres fichier
Ainsi on remplace chacun des triplets par un nombre compris
entre 0 et 7. Ce qui nous fait un nombre à trois chiffres en guise de
notation numérique.
Le tableau ci-après permet de faire la convertion entre les
différents triplets possibles et leur notation octale (nombre en base
8).
Triplet |
Nombre binaire |
Nombre octal |
--- |
000 |
0 |
--x |
001 |
1 |
-w- |
010 |
2 |
-wx |
011 |
3 |
r-- |
100 |
4 |
r-x |
101 |
5 |
rw- |
110 |
6 |
rwx |
111 |
7 |
L'emploi de cette numérotion suppose de connaître ou de savoir
retrouver aisément le nombre octal associé à chaque triplet. Ce qui est
assez simple, puisque cette numérotation est la convertion en octal de
la représentation binaire du triplet. Considérez la présence d'un droit
comme un booléen valant 1 et son
absence comme 0,
vous obtenez alors un nombre binaire qu'il est aisé de convertir en
octal (ce qui revient à du décimal car on ne passe pas aux dizaines
dans la base 8).
Exemple |
Droits globaux associés |
chmod
640 fichier.txt |
rw-r----- |
chmod
700 fichier.txt |
rwx------ |
chmod
661 fichier.txt |
rw-rw-r-- |
chmod
761 fichier.txt |
rwxrw-r-- |
chmod
610 fichier.txt |
rw-r----- |
Remarques importantes
Exécutable
Un programme ne peut être exécuté que si le fichier exécutable
correspondant possède le droit d'exécution dans la catégorie à laquelle
appartient l'utilisateur.
Répertoire
On ne peut accèder à un fichier que si les répertoires
successifs
constitutifs du chemin absolu de ce fichier possèdent le droit en
exécution.
Pour pouvoir lister les fichiers d'un répertoire, ce dernier
doit être accessible en lecture.
Fichier
Le droit en exécution n'a aucune incidence sur un fichier non
exécutable.
Par contre, un script (c'est-à-dire un fichier texte contenant
des commandes du Shell) doit avoir les droits en lecture et en
exécution pour pouvoir être interprété et exécuté par le Shell.
Masque de protection des fichiers (umask)
Le masque de protection de fichier permet de définir les
droits par
défaut de tout fichier créé.
Manipulation
Ce masque se comporte comme un filtre et utilise la notation
numérique. On parle de filtre car il ne contient pas la série des 3
chiffres octaux correspondants aux droits à allouer aux fichiers, mais
celle correspondant aux droits à ne
pas allouer.
Le système Unix affecte à un fichier les droits globaux
résultant de la soustraction des droits maxima 777 par le masque de
protection.
Exemple : si le masque de protection
vaut 037 alors 740 (=777-037) seront les droits alloués à tout nouveau
fichier.
La commande permettant de définir un nouveau masque de
protection est umask.
Syntaxe : umask droits
Exemple : umask 037
777
- 037
= 740
|
=
=
=
|
rwx rwx
rwx
---
-wx rwx
rwx
r-- ---
|
=
=
=
|
111 111 111
000 011 111
111 100 000
|
D'après cet exemple, tout nouveau
fichier aura les droits 740 (rwxr-----)
car le masque de
protection vaudra 037 (----wxrwx).
Pour connaître la valeur du masque de protection, tapez umask
sans attribut.
Remarque
Lors de la création d'un fichier, même si le masque de
protection
spécifie le droit en exécution, ce dernier ne sera pas affecté au
fichier nouvellement créé mais seulement à un répertoire. Donc, si vous
créez un fichier exécutable ou un script il faudra lui rajouter
manuellement le droit en exécution.
Droits étendus
SUID
Définition
Nous avons vu plus haut que chaque catégorie d'utlisateurs
dispose
de droits différenciés sur les fichiers. Et seul le propriétaire d'un
fichier a le pouvoir de céder des droits à d'autres utilisateurs.
Lorsqu'un utilisateur lance un programme, ce programme
s'approprie les droits de l'utilisateur pour la manipulation des
fichiers et non pas ceux du propriétaire du fichier (sinon quel souk!).
Mais il est quelque fois nécessaire de permettre à d'autres
utilisateurs l'accès à des données normalement protégées. Ce droit SUID
permet de préter à un utilisateur de façon temporaire, des droits
suplémentaires par l'intermédiaire d'un programme (fichier exécutable).
En exécutant un programme possédant un droit SUID, un
utilisateur s'approprie les droits du propriétaire du fichier
exécutable
durant le temps d'exécution du programme. Ces droits supplémentaires ne
sont valables que sur les fichiers appelés par le programme et les
opérations effectuées par le programme et que durant le temps
d'exécution du programme.
Son utilité vient du fait qu'il n'est pas besoin d'accorder
durablement des droits étendus à n'importe qui sur des fichiers
sensibles. Puisque l'accès à ces fichiers est filtré par un programme
qui est seul à prendre des initiatives sur ces fichiers.
Exemple
L'exemple le plus flagrant est celui du programme /usr/bin/passwd
(rws--x--x)
qui appartient à l'utilisateur root.
Ce programme possède le droit s
en lieu et place du droit en exécution du triplet du propriétaire. Ce
programme sert à modifier votre mot de passe personnel qui est stocké
dans le fichier /etc/passwd
(rw-r--r--)
appartenant à root
dont vous n'avez pas les droits en
écriture.
Comment donc modifier votre mot de passe si vous n'êtes pas
autorisé à
écrire sur le fichier stockant les mots passes ?!! Pour des raisons de
sécurité évidentes, le root interdit
à quiconque de
pouvoir modifier ou supprimer ce fichier. Par contre le programme /usr/bin/passwd
vous y autorise grace au droit SUID : vous utilisez le droit en
écriture du root
durant l'exécution du programme qui
change votre mot de passe.
Manipulation
Pour ajouter un droit SUID à un programme, utiliser la
commande chmod
de la même manière que vous procéderiez pour un droit normal.
Notation symbolique
Syntaxe : chmod u+s fichier-exécutable.
Exemple : chmod u+s
data/hotprog.
Notation numérique
La valeur numérique d'un SIUD est 4000 et
s'ajoute à la
valeur de la série numérique globale.
Syntaxe : chmod 4+droits fichier-exécutable.
Exemple : chmod 4755 monprog.
Dans cet exemple on donne les droits rwsr-xr-x
au fichier monprog.
Ne pas oublier que le droit SUID
s'affiche à la place du droit en exécution du propriétaire sans que ce
dernier soit supprimé!
Nota : la présence du droit SUID suppose la présence du droit
en exécution qui permet de lancer le fichier exécutable.
SGID
Le droit SGID fonctionne différemment selon qu'il est affecté
à un
fichier exécutable ou à un répertoire.
Exécutable
Sur un fichier exécutable, le SGID est similaire au droit SUID
vu
précédemment sauf qu'il donne à un utilisateur les droits du groupe
auquel appartient le propriétaire de l'exécutable et non plus les
droits du propriétaire.
Répertoire
Tout fichier créé porte les droits du masque de protection de
son
propriétaire. De plus, tout fichier porte un UID (identificateur de
propriétaire) et un GID (identificateur de groupe). C'est-à-dire qu'un
fichier est toujours identifié par le nom de son propriétaire ainsi que
par le nom du groupe auquel appartient le propriétaire.
Le droit SGID, lorsqu'il est affecté à un répertoire, casse
cette logique. Puisque tout nouveau fichier créé dans un répertoire
marqué par le SGID sera de groupe non pas celui du propriétaire du
fichier mais celui du propriétaire du répertoire.
Ainsi, tout fichier créé dans un répertoire portant le SGID,
héritera du groupe du propriétaire du répertoire.
Manipulation
La valeur numérique du droit SGID est 2000, il
est
symbolisé par la lettre s et est
affiché à la place du
droit d'exécution du groupe.
Notation symbolique
Syntaxe : chmod g+s fichier-exécutable|répertoire.
Exemple : chmod g+s data/.
Notation numérique
Syntaxe : chmod 2+droits
fichier-exécutable|répertoire.
Exemple : chmod 2755 monprog.
Dans cet exemple on donne les droits rwxr-sr-x
au fichier monprog.
Ne pas oublier que le droit GUID
s'affiche à la place du droit en exécution du groupe sans que ce
dernier soit supprimé!
Sticky Bit
Le droit Sticky Bit (appellé aussi bit collant) est
alloué à la
catégorie autres d'un répertoire.
Il permet d'interdire à tout utilisateur (sauf le root)
de supprimer un fichier dont il n'est pas le propriétaire, quelque
soient ses droits.
Si le répertoire en question est accessible en écriture par
n'importe quel utilisateur (rwxrwxrwx),
n'importe qui peut poser ce bit collant qui protège tous les fichiers
d'une suppression ou modification de la part d'un utilisateur autre que
son propriétaire.
Ce bit collant permet donc d'aller à l'encontre du droit en
écriture d'un répertoire dont héritent les fichiers du répertoire.
Sa valeur numérique est 1000 et est
représenté
symboliquement par t.
Exemple : chmod 1755 tmp/.
Exemple : chmod a+t tmp/.
Ce droit s'affiche en lieu et place du droit en exécution de
la catégorie autres.
|