Acte V-III :
Organisation des données - droits d'accès,
liens et i-node
Protection des fichiers
Lors de l'utilisation d'un système informatique en réseau, il paraît
important de considérer les droits qu'ont les autres utilisateurs du
système par rapport à vos fichiers. En effet, dans bien des cas, on ne
voudrait pas que les gens puissent modifier nos fichiers. Par contre
on peut tout à fait envisager le fait de vouloir les faire lire à un
ensemble de personnes. Unix nous permet de dissocier les droits en
écriture (w), lecture (r) et exécution (x)
vis-à-vis de trois groupes différents: le propriétaire (u), le groupe auquel il appartient, à l'exception de
lui-même (g) et enfin les autres (o).
Les trois espaces de protection sont disjoints, ainsi, si le fichier en
cause n'est pas en autorisation d'exécution pour le propriétaire mais
est en autorisation d'éxécution pour les autres, le
propriétaire ne peut exécuter son fichier.
Voir les droits d'un fichier
On peut obtenir l'ensemble des renseignements sur un fichier ou sur un
répertoire en utilisant l'option -l de la
commande ls et en
spécifiant le fichier pour lequel vous voulez connaître les droits
(si vous ne spécifiez pas de fichier, vous obtiendrez ces informations
pour tous les fichiers du répertoire), i.e. vous utilisez la commande :
ls -l nom_de_fichier
Vous obtenez une ligne donnant une série d'informations sur le
fichier du type :
-rw-r--r-- 1 klimann institut 966 aoû 30 18:09 toto
En particulier, tout d'abord, vous aurez une chaîne de dix
caractères. Le premier caractère donne le type de
fichier. Ensuite, les neufs caractères restant peuvent être
décomposés en trois groupes de trois caractères. Le premier
groupe concerne les droits du propriétaire du fichier sur ce
fichier, le deuxième ceux du groupe auquel appartient le
propriétaire du fichier et enfin le troisième les droits de tous
les autres utilisateurs. Selon les lettres qui apparaissent dans
ces groupes, on connaît alors les droits sur le fichier.
Sur l'exemple donné plus haut, on voit que le fichier toto est
autorisé en lecture et en écriture pour son propriétaire,
klimann en l'occurence et juste en lecture aussi bien pour son groupe,
institut dans ce cas, que pour les autres.
Exercices
- Déterminez à quel groupe vous appartenez
- déterminez quels sont, par défaut, les droits sur un fichier
Modifier les droits sur un fichier
Pour modifier les droits sur un fichier (toute méthode décrite ici
convient aussi pour les répertoires), il est nécessaire de posséder
les droits d'exécution dans le répertoire contenant le fichier pour
effectuer cette modification.
On modifie les droits d'un fichier en se servant de la commande chmod.
La syntaxe de cette commande est:
chmod nouveau_mode nom_de_fichier
On peut exprimer le nouveau mode de deux manières: la manière
symbolique et la manière absolue.
- Méthode symbolique
On utilisera une expression de la forme:
allocataire(s) opérateur permission(s)
Les différents allocataires sont:
- u : propriétaire
- g : groupe
- o : autres
On peut composer des séquences d'allocataire pour modifier
simultanément les droits de plusieurs groupes. Par contre, les deux
seront modifiés de même manière. La lettre a peut
remplacer la séquence ugo.
Les différents opérateurs sont:
- + : ajout
- - : suppression
- = : affectation absolue (les droits ne
tiennent pas compte des affectations passées)
Les différentes permissions sont:
- r : lecture
- w : écriture
- x : exécution
Exemple : si on écrit la commande
chmod go+w toto
cela autorise le groupe et les autres à écrire dans le fichier
toto. Ces autorisations viennent s'ajouter à celles précédemment
données pour le fichier.
!Attention, donner les droits en écriture
permet en particulier d'effacer le fichier concerné.
- Méthode absolue
Dans cette méthode, on décrit les droits par une valeur
numérique octale obtenue par l'addition des valeurs suivantes:
- 400 : autorisation de lecture pour le propriétaire
- 200 : autorisation d'écriture pour le propriétaire
- 100 : autorisation d'exécution pour le propriétaire
- 0a0 : a : combinaison sur le même principe pour le groupe
(4:lecture, 2:écriture, 1:exécution)
- 00a : a : combinaison sur le même principe pour les autres
(4:lecture, 2:écriture, 1:exécution)
Exemple : La commande
chmod 22 toto
va autoriser le groupe et les autres à écrire dans le fichier
toto. Ces permissions seront les seules prises en compte, i.e. si
après cette commande, on tape ls -l
toto, on obtient:
-----w--w- ..... toto ....
Exercices
- Créez un fichier mode quelconque
- changez les droits d'accès sur le fichier mode en
utilisant la méthode symbolique afin d'obtenir les droits suivants :
rw-rwx--x
en utilisant la méthode absolue, rétablissez les
droits de départ
- changez les droits d'accès sur le fichier mode en
utilisant la méthode absolue afin d'obtenir les droits suivants :
rw--wx---
En utilisant la méthode symbolique, rétablissez les
droits de départ
- effectuez les mêmes manipulations sur votre répertoire Stage_Unix/
- que se passe-t-il si sur un fichier vous avez les droits
d'écriture et non pas les droits de lecture? Faites des essais et
voyez ce que vous pouvez faire
- essayez de modifier les droits sur le répertoire ~stage60/. Que se
passe-t-il? Pourquoi?
- déterminez quels doivent être vos droits sur un fichier et/ou sur le
répertoire contenant ce fichier pour pouvoir supprimer le fichier
- modifiez les droits du fichier ir1_file_prog que vous aviez chargé pendant le cours
sur Netscape, de façon à avoir les droits en exécution
dessus. Déplacez ce fichier dans le répertoire Stage_Unix et
exécutez-le (il suffit de tapez son nom et d'appuyer sur la touche
Entrée). Effacez les fichiers nouvellement créés (pensez aussi aux
fichiers dont le nom commence par le signe ".")
Fichiers, i-nodes et liens
Le disque dur est partagé en blocs physiques de 512 octets en
général ce qui permet de stocker 512 caractères de texte par
exemple. Pour différentes raisons ces blocs physiques sont
regroupés en blocs logiques par 2, 4 ou 8.
Un bloc logique fait donc 1ko, 2ko voir 4 ko. Nous supposerons dans la
suite que le système utilisé a des blocs logiques de 2 ko.
Ainsi on ne peut stocker un fichier supérieur à 2 ko dans un
bloc. Donc un fichier est regroupé sur plusieurs blocs
logiques. Pour un fichier donné la liste des blocs logiques sur
lesquels il est enregistré est mise dans une structure de données
appelée i-node.
Un i-node contient outre ces adresses, le type et le mode d'accès du
fichier (rwx), le nombre de référenciation de cet i-node, le
propriétaire du fichier, le groupe auquel le fichier appartient, la
date de création, de dernière modification et de dernier accès
au fichier. Il comprend également la taille du fichier et le nombre
de blocs physiques utilisés par le fichier. Le nom du fichier
n'étant pas unique, il n'est pas stocké dans l'i-node.
Un répertoire est traité comme un fichier, c'est à dire qu'il
possède aussi un i-node, et les données de ce répertoire sont en
réalité l'ensemble des noms de fichiers qu'il contient associé
à un numéro d'i-node.
Par convention l'i-node numéro 2 est réservé au répertoire
racine qui n'est contenu dans aucun autre répertoire.
Exercice
Créez par exemple un fichier que vous appellerez
toto. Ensuite, regardez les informations du fichiers à l'aide de la
commande ls -il. Vous devriez obtenir une ligne
avec en premier le numéro d'i-node correspondant à vote fichier puis
les informations contenues dans cet i-node à savoir :
- le nombre de références à cet i-node
- les droits d'accès au fichier ainsi que le type du fichier
- le nombre de liens sur le fichier
- le propriétaire et le groupe propriétaire
- la taille
- la date de dernière modification
- le nom du fichier
Sur le fichier toto d'exemple, on obtient :
448779 -rw-r--r-- 1 klimann institut 966 aoû 30 18:09 toto
Maintenant tapez la commande ln -s toto
titi et regardez à nouveau vos fichiers. Vous remarquez
qu'un fichier titi a été créé de type lien (l) et que ce fichier pointe vers toto. Modifiez le
fichier titi. Est-ce que toto a changé ?
Vous venez de créer un lien symbolique.
Tapez ensuite la commande ln toto
tete. Regardez à nouveau la
liste de vos fichiers. Faites attention au nombre de liens et aux
numéros d'i-node.
Maintenant modifiez tete et regardez les changements pour toto et
titi. Effacez le fichier toto. Regardez le
contenu de titi et de tete. Avez-vous réellement
effacé le fichier ?
Si non, que faut-il faire pour effacer le fichier du disque ?
Vous venez de construire un lien hard.