TP2 - Système de fichiers et permissions
Instructions
- On rappelle que dans tous les exercices le
$
en début de commande représente le prompt, il n'est pas à saisir lorsque vous écrivez une ligne de commande. - Pour chaque nouvelle commande, n'hésitez pas à consulter sa page de manuel avec la commande
man
, ou à utiliser l'option--help
(si elle est disponible) pour savoir ce qu'elle fait.
Système de fichiers
Le système de fichiers Linux
Le système de fichiers Linux est une arborescence ou une hiérarchie de fichiers et de répertoires. Le répertoire racine est /
et tous les autres répertoires sont des sous-répertoires de celui-ci. Les répertoires sont séparés par des /
et les fichiers sont des noms de fichiers.
Quand vous lancez un shell (i.e. ouvrez un terminal), celui-ci se trouve dans un répertoire. Ce répertoire est appelé votre répertoire courant ou répertoire de travail.
Un système Linux typique comporte des dixaines de milliers de répertoires système et de fichiers. La plupart de ces répertoires et fichiers sont cachés et ne sont pas visibles par défaut. Ces fichiers et répertoires cachés sont utilisés par le système d'exploitation pour stocker des informations de configuration et d'autres informations système.
Les sous-répertoires de la racine sont généralement réservés aux fichiers système. Les répertoires /home
et /tmp
sont utilisés pour stocker des fichiers temporaires et des fichiers personnels.
À moins d'être un administrateur système, vous n'avez pas besoin de vous soucier de la plupart des fichiers et répertoires système. Toutefois il est important de comprendre comment les répertoires et les fichiers sont organisés afin de pouvoir naviguer dans le système de fichiers et de pouvoir trouver les fichiers dont vous avez besoin.
Le tableau suivant décrit le contenu des principaux répertoires du système de fichiers Linux.
Répertoire | Description |
---|---|
/ |
Répertoire racine. Tous les autres répertoires sont des sous-répertoires de celui-ci. |
/bin |
Contient les programmes essentiels au fonctionnement du système. |
/boot |
Contient les fichiers nécessaires au démarrage du système. |
/dev |
Contient les fichiers représentant les périphériques. |
/etc |
Contient les fichiers de configuration du système. |
/home |
Contient les répertoires personnels des utilisateurs. |
/lib |
Contient les bibliothèques partagées et les modules du noyau. |
/media |
Contient les points de montage des périphériques amovibles. |
/mnt |
Contient les points de montage des systèmes de fichiers temporaires. |
/opt |
Contient les logiciels additionnels. |
/proc |
Contient les informations sur les processus et le système. |
/root |
Répertoire personnel de l'administrateur. |
/run |
Contient les fichiers d'exécution des applications. |
/sbin |
Contient les programmes essentiels au fonctionnement du système. |
/srv |
Contient les données des services fournis par le système. |
/sys |
Contient les informations sur les périphériques. |
/tmp |
Contient les fichiers temporaires. |
/usr |
Contient les programmes, les bibliothèques et les fichiers de configuration. |
/var |
Contient les fichiers variables comme les logs, les mails, les bases de données, etc. |
/lost+found |
Contient les fichiers récupérés lors d'un crash du système. |
Exercice 1 : id
et /etc/passwd
- Entrez les commandes suivantes dans un terminal et notez les résultats :
- Ensuite tapez la même commande, mais cette fois-ci avec l'argument
root
, notez les résultats. - Affichez ensuite le contenu du fichier
/etc/passwd
avec la commandecat
. - Recherchez les lignes où apparaîssent votre nom d'utilisateur et celui de l'utilisateur
root
. Quelles sont les différences ? - Pouvez-vous déduire à quoi sert le fichier
/etc/passwd
?
Permissions associées aux fichiers
Protection des fichiers
Un système Linux peut permettre à de nombreux utilisateurs d'accéder aux fichiers et aux répertoires. Pour protéger les fichiers et les répertoires, Linux utilise un système de permissions. Les permissions sont des droits d'accès aux fichiers et aux répertoires. Les permissions sont associées à des utilisateurs et à des groupes. Les utilisateurs sont des personnes qui ont un compte sur le système.
Pour les fichiers normaux, les permissions sont associées à trois catégories d'utilisateurs : le propriétaire du fichier (généralement celui qui a crée le fichier), le groupe propriétaire du fichier et les autres utilisateurs.
Les catégories de permissions pour un fichier sont les suivantes :
- read
r
: permet de lire le contenu du fichier. - write
w
: permet de modifier le contenu du fichier. - execute
x
: permet d'exécuter le fichier (si c'est un programme ou un script).
L'option -l
de la commande ls
affiche les méta-données associées à un fichier, son nom, sa taille, son propriétaire, son groupe, ... et en particuler ses permissions, par exemple :
La chaîne -rw-r--r--
représente les permissions associées au fichier. Le premier caractère désigne le type du fichier, les trois suivants représentent les permissions du propriétaire, les trois suivants celles du groupe propriétaire et les trois derniers celles des autres utilisateurs. Les permissions sont représentées par les caractères r
, w
et x
pour les permissions respectivement en lecture, écriture et exécution. Si la permission n'est pas accordée, le caractère -
est utilisé à la place.
Les permissions peuvent être représentées par des chiffres (représentation en octal) ou des lettres (représentation symbolique).
Le tableau suivant donne la correspondance entre les deux représentations :
Chiffre | Lettre | Description |
---|---|---|
0 | --- |
Aucune permission |
1 | --x |
Exécution |
2 | -w- |
Écriture |
3 | -wx |
Écriture et exécution |
4 | r-- |
Lecture |
5 | r-x |
Lecture et exécution |
6 | rw- |
Lecture et écriture |
7 | rwx |
Lecture, écriture et exécution |
C'est-à-dire que pour la chaîne -rw-r--r--
les permissions sont les suivantes :
Utilisateur | Groupe | Autres | |
---|---|---|---|
symbolique | rw- |
r-- |
r-- |
binaire | 110 | 100 | 100 |
octale | 6 | 4 | 4 |
Exercice 2 : Permissions associées aux fichiers
-
Créez un répertoire vide et un fichier vide (ces deux derniers doivent être au même niveau). Utilisez la commande
ls
et les options-l
et-d
sur chacun de ces deux nouveaux fichiers pour déterminer les permissions que vous (respectivement votre groupe et les autres) avez sur ces fichiers. Comment reconnaissez-vous un répertoire ? -
Les lignes suivantes donnent la réponse de la commande
Parmi ces fichiers, quels sont les répertoires ?ls -ld
sur un certain répertoire (pour les besoins de l'exercice nous n'avons reporté que le premier et le dernier champ du résultat dels -ld
). - Pour chacun des fichiers ci-dessus, donnez les permissions associées à chacun des utilisateurs (propriétaire, groupe propriétaire et autres utilisateurs) en utilisant la représentation symbolique et la représentation octale.
- Donnez la représentation symbolique et la représentation octale des permissions associées au fichier
/etc/passwd
, à la commandels
et à votre répertoire personnel.
Exercice 3 : Modification des permissions chmod
- Testez les commandes suivantes dans un terminal et essayez de comprendre comment fonctionne la commande
chmod
(avec la représentation symbolique). - Testez la commande
chmod 644 f; ls -l f
. Que fait cette commande ? - Avec les deux modes d'utilisation de
chmod
(octale et symbolique), modifiez les permissions du fichierf
de la manière suivante :- exécution pour tous, lecture et écriture uniquement pour le propriétaire.
- lecture et exécution pour tous, personne ne peut écrire.
- toutes les permissions pour tous, pas d'écriture pour les autres.
- lecture et écriture pour le propriétaire, exécution pour le groupe et aucune pour les autres.
Exercice 4 : Permissions associées aux fichiers normaux
- Dans un répertoire de votre choix, créer deux fichiers
f
etg
. Puis entrer (par exemple avec un éditeur de texte) du texte dans ces fichiers. - Pour vous (propriétaire), retirer la permission de lire dans le fichier
f
et la permission d'écrire dans le fichierg
. - Testez ensuite les commandes suivantes, puis notez les résultats :
- Essayer de modifier
g
avec un éditeur de texte. Que se passe-t-il ? - Tester les commandes:
Puis observer le contenu du fichier
h
ainsi que les permissions associées à ce fichier. - La commande suivante permet d'écrire la chaîne
toto
à la fin du fichierf
(nous la verrons plus en détail dans un prochain TP) : Tester cette commande, puis redonnez-vous les droits de lecture sur le fichierf
. Enfin affichez le contenu du fichierf
grâce à la commandecat
. - Tester la commande:
Tapez
n
pour refuser. Enfin tester la commande suivante: A-t-elle réussie ? Que pouvez vous en déduire ?
Permissions associées aux répertoires
Qu'est-ce qu'un répertoire ?
Un répertoire est une table de noms de fichiers associés à un numéro d'index appelé numéro d'inode qui permet de connaître les informations (contenues dans l'inode) concernant ce fichier (taille, permissions, horodatage, où trouver le contenu du fichier, ...).
Dans un répertoire, les permissions ne sont pas associées aux fichiers mais au répertoire lui-même. Les permissions associées à un répertoire sont :
- read
r
: permet de lister le contenu du répertoire. - write
w
: permet de modifier le contenu du répertoire (créer ou supprimer des fichiers). - execute
x
: permet d'ouvrir le répertoire (avec la commandecd
par exemple).
Exercice 5 : Permissions associées aux répertoires
- Créez un répertoire
rep
et deux fichiers normauxa
etb
à l'intérieur de ce répertoire. - Retirez toutes les permissions sur le répertoire
rep
et essayez les commandes suivantes : - Redonnez la permission read uniquement sur le répertoire
rep
et essayez les toutes les commandes de la question 2. Notez les différences. - Même question mais avec seulement la permission write sur
rep
. Notez les différences. - Cette fois-ci avec uniquement la permission execute sur
rep
. Testez les commandes suivantes : -
Avec l'ensemble de permissions
-wx
surrep
pour tous les utilisateurs, essayez de:- créer un fichier
d
dansrep
- renommer le fichier
b
- retirer toutes les permissions associées au fichier
d
- supprimer le fichier
d
- créer un fichier
Exercice 6 : Les répertoires du PATH
Attention
Cet exercice de type expérimentation est délicat et important. Il faut le traiter avec un soin particulier et en prenant son temps.
- Ouvrir un nouveau terminal et entrer la commande suivante :
Observer le résultat, à votre avis à quoi correspondent les éléments séparés par des
:
? - Créer un répertoire
bin
dans votre répertoire personnel et entrer les commandes suivantes: Quelle est la différence avec d'affichage avec le résultat de la question 1 ? - À l’aide de la commande
type
, chercher les chemin absolus des programmescat
etrm
et les noter. - Faire une copie de
cat
dans~/bin
en le renommantrm
. - Créer un fichier
fic
, y mettre quelques caractères et créer deux copiesfic2
etfic3
defic
. - Essayer de détruire
fic
avec la commanderm
. Que s’est-il passé ? - Entrer la commande
$ type rm
. - Lancer la commande
en remplaçant
<chemin vers rm>
par le chemin absolu vers la commanderm
noté à la question 3. Que s’est-il passé ? - Enlever la permission
x
sur le fichier~/bin/rm
et essayer de supprimerfic2
. - Demander au shell d’oublier les emplacements enregistrés (« hachés ») avec la commande
$ hash -r
, puis entrer les commandes - Remettre la permission
x
sur~/bin/rm
puis entrer les commandes suivantes (où<chemin vers rm>
désigne le chemin absolu noté à la question 3) : - Faire le bilan de cet exercice en répondant aux questions suivantes :
- Qu'est-ce qui est contenu dans
PATH
? - Dans quel cas est-ce qu’un nom de commande est cherché dans les répertoires du
PATH
? - S’il y a plusieurs programmes correspondants dans les répertoires du
PATH
, lequel est choisi ?
- Qu'est-ce qui est contenu dans
Récapitulatif sur permissions et permissions par défaut
Exercice 7: On lache le clavier
Consigne
Cet exercice est à faire à l’écrit, on lâche le clavier !
Pour chacune des commandes suivantes, dire quelles permissions sont nécessaires pour qu’elle réussisse (on suppose que tous les répertoires et fichiers existent, sauf ceux qu’on veut créer).
$ cat /usr/include/stdio.h
$ cd /usr/include/
$ ls /usr/include/
$ echo '/* fin */' >> /usr/include/stdio.h
$ rm /usr/include/stdio.h
$ touch /usr/include/ma_bib.h
$ chmod u+w /usr/include/stdio.h
$ /usr/bin/uname
Exercice 8 : Permissions par défaut et umask
(optionnel)
Tip
umask
est une commande qui permet de définir les permissions par défaut des fichiers et des répertoires que vous créez. La valeur de l'umask est une valeur octale qui est soustraite des permissions par défaut. Par exemple, si l'umask vaut 022, les permissions par défaut sont 755 pour les répertoires et 644 pour les fichiers.
- Dans un terminal, tapez la commande
umask
et notez le résultat. - Créez un répertoire
rep
et un fichierf
au même niveau querep
. Affichez les permissions associées àrep
etf
avec la commandels -ld rep f
. Convertissez ces permissions en représentation octale et notez-les. Enfin, supprimezrep
etf
. - Changez la valeur du masque avec la commande
- Changez la valeur du masque avec la commande puis refaites la question 2.
- Changez la valeur du masque avec la commande puis refaites la question 2.
- De toutes les questions précédentes, pouvez-vous déduire comment la valeur de l'umask agit sur les permissions associées aux répertoires et aux fichiers que vous créez ?
- Donnez à l'umask sa valeur initiale.