========================================================= Système de fichiers, utilisateurs et gestion des droits ========================================================= Système de fichiers =================== Le système de fichiers désigne la façon d'organiser les données sur un support de stockage physique. Sous GNU/Linux, le système de fichiers est une arborescence dont la racine est ``/`` (*root*), et qui contient des répertoires. L'organisation des répertoires varie selon les distributions, mais on retrouve souvent la même chose : * ``/bin`` contient les binaires (les exécutables) * ``/boot`` contient le noyau et les fichiers de démarrage * ``/dev`` contient les points de montage des périphériques * ``/etc`` contient les fichiers de configuration du système * ``/home`` contient les répertoires personnels de chacun des utilisateurs * ``/lib`` contient les bibliothèques (*libraires*) * ``/root`` est le répertoire du super-utilisateur (admin) root * ``/usr`` contient les programmes accessibles aux utilisateurs * ``/var`` contient des données de fonctionnement, dont les logs des différents services. On parle d'arborescence de fichiers car le système de fichier a une racine unique et contient des répertoires qui peuvent eux-mêmes contenir d'autres répertoires ou des fichiers... ce qui constitue un arbre de contenu (c'est tout à fait classique et c'est comme le système de fichiers sous Windows). On distingue deux façons d'accéder à un fichier ou à un répertoire : en utilisant son **chemin relatif** ou son **chemin absolu**. Le chemin relatif est exprimé depuis le répertoire où l'on se trouve, tandis que le chemin absolu est exprimé depuis la racine du système de fichiers, et commence donc par ``/``. De plus, le ``.`` désigne le répertoire courant, tandis que ``..`` désigne le répertoire parent. Le répertoire ``~`` est le répertoire d'accueil de l'utilisateur connecté. Par exemple, si l'utilisateur s'appelle bb8, son répertoire ``~`` sera très probablement ``/home/bb8/``. On appelle répertoire courant le répertoire dans lequel on se trouve à un moment donné. Son raccourci est ``.``. Pour connaître le chemin absolu du répertoire courant, il suffit de taper la commande ``pwd``(*print name of working directory*). À chaque fois que l'on se déplace avec la commande ``cd``, on change de répertoire courant. Il est **essentiel** de savoir se déplacer dans une arborescence en utilisant les chemins relatifs tout autant que les chemins absolus. Voyez les exercices pour vous familiariser avec cela. Utilisateurs ============ GNU/Linux permet de gérer des utilisateurs qui ont tous un login (texte) et un UID (*user ID*, numéro). Les utilisateurs peuvent appartenir à des groupes qui ont également un nom (texte) et un GID (*group ID*, numéro). Un utilisateur peut appartenir à plusieurs groupes, et un groupe peut bien entendu contenir plusieurs utilisateurs. Chaque utilisateur possède un répertoire, souvent appelé *HOME*, qui se trouve dans le répertoire ``/home`` sur système de fichiers. Le super-utilisateur, appelé *root* est celui qui a tous les droits sur l'administration du système. Certaines actions ne peuvent être exécutées que par le super-utilisateur... ou par un utilisateur standard s'il a les privilèges nécessaires, en utilisant avec prudence la commande ``sudo``. Cette commande permet en effet, si l'on y est autorisé, d'exécuter un processus en tant que *root*. Gestion des droits ================== Chaque fichier ou répertoire appartient à un utilisateur et un seul, ainsi qu'à un groupe et un seul. Pour chaque fichier et chaque répertoire, on peut définir des permissions pour l'utilisateur, le groupe, et le reste du monde (le reste du monde caractérisant tous les utilisateurs qui ne sont pas l'utilisateur propriétaire, et qui n'appartiennent pas non plus au groupe propriétaire). En résumé, des droits sont affectés pour : * le propriétaire du fichier (u, pour *user*) * le groupe auquel le fichier appartient (g, pour *group*) * les autres utilisateurs de la machine (o, pour *other*) Pour chaque fichier ou répertoire, on peut définir des permissions de trois types différents : * lecture (r, pour *read*) * écriture (w, pour *write*) * exécution (x, pour *execute*) Le droit en exécution est un peu particulier. Sur un fichier, mettre un droit d'exécution signifie que l'on donne le droit d'exécuter le programme qu'il contient. Pour un répertoire, mettre le droit en exécution signifie que l'on autorise à parcourir ce répertoire. Pour afficher les droits associés aux fichiers et aux répertoires, il faut utiliser la commande ``ls -l``. Pour attribuer et modifier les permissions, on utilise la commande ``chmod``. Il existe deux façons d'utiliser chmod : * Soit en utilisant le mode classique, de la forme ugoa+-=rwx (*user, group, other, all, read, write, execute) * Soit en utilisant la forme octale, qui consiste à préciser les trois valeurs (les centaines pour u, les dizaines pour g et les unités pour o) de la façon suivante : * 0 aucun droit * 1 exécution seule * 2 écriture seulement * 3 exécution + écriture * 4 lecture seulement * 5 lecture +exécution * 6 lecture + écriture * 7 tous les droits Par défaut, les permissions sur les fichiers créés sont fixées à 666 et sur les répertoires à 777. Pour changer le propriétaire d'un fichier, on utilise la commande ``chown`` et pour changer son groupe, la commande ``chgrp``. Voyons tout cela plus en détails avec les exercices. .. toctree:: :maxdepth: 2 droits_exos.rst