Outils pour utilisateurs

Outils du site


cours:informatique:sysadmin:administrer_un_systeme_linux:210_arborescence_systeme_linux

Notes et transcriptions du cours “Administrez un système Linux” disponible sur la plateforme Openclassrooms.

Adoptez l’arborescence des systèmes Linux

L'arborescence standard d'un système Linux peut vous paraître assez bizarre. Nous allons la parcourir et identifier les principaux objectifs des répertoires qui la composent.

Comprenez l’arborescence Linux

La fondation Linux est l'organisme responsable du maintien de la norme définissant l'arborescence des systèmes Unix/Linux. Cette norme est appelée FHS pour Filesystem Hierarchy Standard et est disponible sous plusieurs formats.

Ce document référence l'objectif primaire de tous les répertoires standard du système Linux pour faciliter leur exploitation.

Mais pourquoi a-t-on besoin de cette norme ?

Le respect de ce standard permet :

  • Aux administrateurs d'anticiper les répertoires contenant les informations recherchées, quelle que soit la distribution utilisée ;
  • Aux développeurs système d'utiliser une arborescence commune et connue pour déployer, installer ou configurer les programmes qu'ils éditent ;

Et quand on exploite plusieurs milliers de machines ou produit du code de manière industrielle, ce n’est pas du luxe !

Le document va donc :

  • Recenser les répertoires identifiables qui proposent un usage clair et défini,
  • Indiquer éventuellement la liste minimale des répertoires, sous-répertoires et fichiers attendus pour chacun.

Prenons quelques exemples pour illustrer cette notion :

  • Les répertoires contenant des informations stockées sur un équipement mais utilisées par d'autres équipements seront identifiés par le mot-clé “shareable” (partageables en français). Par exemple, le répertoire /home contient traditionnellement les répertoires personnels des comptes utilisateurs du système, et ces données peuvent être partagées entre utilisateurs sur le même serveur, voire entre utilisateurs sur un serveur différent ;
  • Les répertoires contenant des fichiers qui ne peuvent pas ou ne doivent pas être partagés entre plusieurs équipements seront marqués “unshareable” (non partageables en français). Nous pouvons citer ici /boot qui contient notamment le noyau Linux exploité sur l'équipement.
  • Les répertoires contenant des données qui ne peuvent pas changer d'elles-mêmes, ou sans l'intervention de l'administrateur, avec nécessité d'une élévation de privilèges sont marqués “static”. On peut à nouveau citer ici /boot bien entendu, mais également /etc, par exemple, qui contient traditionnellement les fichiers de configuration du système et des services.
  • Les répertoires qui ne sont pas marqués statiques sont marqués “variable” (variables). On peut retrouver ici le répertoire /home évidemment, mais également /var/www pour les sources d'un site web par exemple.

Tous les exemples de répertoires cités ici sont adressés de manière absolue, c'est-à-dire à partir de la racine du système /.

La norme FHS adresse ces recommandations à partir d'un système monté sur la racine /. L'administrateur peut quant à lui adresser les répertoires et les fichiers de manière relative à un emplacement courant. Pour cela, chaque répertoire sous la racine / possède deux fichiers spéciaux nommés . pour se désigner soi-même, et .. pour désigner son parent dans l'arborescence.

Ainsi, la commande cd suivante permet de vous déplacer :

seb@thor:~$ cd /home/../home/./../home/
  • dans /home ;
  • puis dans .. (donc retour à /) ;
  • puis à nouveau dans /home ;
  • puis dans . (c'est-à-dire /home à ce moment-là) ;
  • puis dans .. (donc retour à /) ;
  • et finalement dans /home.

Bon, ce n'est certes pas la commande la plus utile, on est d'accord… Mais elle illustre bien le rôle de ces deux fichiers dans l'adressage relatif / absolu.

FHS liste tous les éléments devant être présents directement sous la racine / :

Selon FHS, voici la liste minimale de tous les éléments devant être présents directement sous la racine / :

bin Répertoire contenant les commandes pouvant être utilisées à la fois par le système et par un administrateur.
boot Répertoire contenant tout le nécessaire pour démarrer le système : la configuration du bootloader, le noyau, les fichiers ramfs…
dev Répertoire contenant traditionnellement tous les points d'accès aux périphériques, terminaux, disques, supports amovibles etc.
etc Répertoire contenant les fichiers de configuration des programmes et services exploités sur le système
lib Répertoire contenant les librairies partagées par les différentes commandes de /bin ou /sbin
media Répertoire contenant les points de montage des périphériques amovibles (clé USB, disques externes, etc.)
mnt Répertoire contenant les points de montage temporaires de systèmes de fichiers requis à un instant donné par l'administrateur
opt Répertoire contenant les applications installées par-dessus le système d'exploitation minimal
run Répertoire contenant les données gérées par le système depuis le démarrage, ce répertoire est ré-initialisé entre chaque démarrage.
sbin Répertoire contenant les commandes utilisées uniquement par l'administrateur (pas par le système)
srv Répertoire contenant les données gérées par les services exploités sur le système.
tmp Répertoire servant de dépôt de fichiers temporaires pour le système, les utilisateurs et les administrateurs.
usr Répertoire complexe détaillé un peu plus loin dans le chapitre “Adoptez l’arborescence des systèmes Linux”.
var Répertoire contenant toutes les données variables du système, qu'elles soient produites par les utilisateurs, les administrateurs ou le système lui-même (comme les fichiers de traces).

Cette arborescence est un héritage des deux branches historiques (SystemV et BSD) des Unix. Selon la distribution exploitée, certains répertoires ont perdu de leur sens au profit d'autres.

Qu'en est-il de son implantation sur les systèmes Linux aujourd'hui ?

Découvrez les principaux répertoires de l’arborescence

Le répertoire /root

La norme ne stipule pas de répertoire /root. Or celui-ci est présent sur quasiment toutes les distributions Linux !

Le répertoire /root est créé pour stocker “les données personnelles de l'administrateur”, mais il n'est pas indispensable pour faire démarrer le système et l'exploiter. NB : Stocker dans ce répertoire des données critiques pour le système est effectivement une erreur.

Le compte root est le compte privilégié de Linux, il doit être réservé exclusivement aux tâches administratives sur le système.

Nous verrons plus loin dans ce cours comment utiliser les privilèges de ce compte à partir d'un autre compte. C’est tout à fait conseillé, afin notamment d'obtenir des traces d'exécution détaillées.

En aucun cas le compte root ne doit s'apparenter à un utilisateur “humain”, ainsi il n'est pas recommandé de stocker une boîte de messagerie pour root ou encore un environnement de travail pour ce compte. Le répertoire personnel de root n'est donc pas requis.

Chaque fois que j'ai rencontré des cas d'exploitation du répertoire /root, les administrateurs stockaient dans ce répertoire des données dites “sensibles”, inaccessibles des autres utilisateurs comme :

  • des fichiers sources,
  • des fichiers d'authentification,
  • des données applicatives…

Tous ces cas d'utilisation peuvent être corrigés en utilisant correctement les droits et l'arborescence des systèmes de fichiers Linux.

OK ! Alors qu'en est-il du répertoire /home ? N'est-il pas non plus mentionné dans la FHS ?

Le répertoire /home

En fait, il l'est, mais de manière facultative également, et à y réfléchir, c'est assez normal : la FHS tend à normaliser l'emplacement des ressources exploitées par le système.

Le répertoire /home est, par définition, très contextuel, ce qui le rend impossible à normaliser. Ainsi, sur tel serveur, vous n'aurez peut-être tout simplement pas de compte utilisateur… Du moins pas de compte nécessitant un répertoire personnel de stockage de données. Sur tel autre serveur à objectif de partage de fichier, au contraire, vous en aurez une multitude.

FHS précise néanmoins que les fichiers de configuration nécessaires aux utilisateurs qui souhaitent exploiter des applications et des programmes doivent être stockés dans un sous-répertoire de /home désigné par le login du compte utilisateur, préfixé d'un point ..

Oui ! Souvenez-vous un peu plus haut dans le cours du fichier /home/user/.bash_history!

Bon soyons clairs, le répertoire /home a beau être facultatif, il est installé sur quasiment toutes les distributions et c'est très bien comme ça !

Le répertoire /usr

Ce répertoire est devenu avec le temps une arborescence majeure des distributions Linux. Il contient lui-même des répertoires bin et sbin dans lesquels se situent également des commandes !

Résumons un peu la logique de tous ces répertoires contenant des commandes :

  • /bin: ce sont les commandes critiques pour le bon fonctionnement du système, quel que soit son objectif. Elles sont lancées par le système et par l'administrateur ;
  • /sbin: ce sont les commandes uniquement à destination de l'administrateur pour la gestion du système.
  • /usr/bin: ce répertoire contient majoritairement les commandes à destination de tous les utilisateurs du système, privilégiés ou non.
  • /usr/sbin: ce sont des commandes à nouveau à destination unique de l'administrateur, mais non critiques pour le bon fonctionnement du système.

Maintenant il existe aussi un répertoire /usr/local/bin! Ce dernier de la famille va contenir tous les binaires qui sont compilés manuellement par l'administrateur après l'installation du système.

Le répertoire /usr est très important, il est marqué “shareable” et “static”, ce qui implique que d'un système à l'autre, les éléments contenus dans ce répertoire sont censés fonctionner exactement de la même manière.

Le répertoire /var

L'objectif de ce répertoire est simple : stocker toutes les informations utilisateurs, administrateurs et systèmes variables.

Normalement, avec une utilisation classique de /var, /usr devrait pouvoir être utilisé en lecture seule ! Ce qui est un gage de sécurité très important.

Il y a quelques sous-répertoires de /var qu'il est important de mentionner :

  • /var/log: répertoire contenant l'arborescence de toutes les traces systèmes et applicatives. C'est dans ce répertoire qu'il est possible de consulter les traces des historiques de démarrage du système, de connexion des comptes utilisateurs, d'activité des services réseaux (SSH, HTTPD, SMTP, etc.) ainsi que les traces du noyau. Généralement les applications installées sur le système disposent de leur propre sous-répertoire ( /var/log/apache2 par exemple pour le serveur web Apache).
  • /var/run: répertoire contenant toutes les données relatives aux processus en cours d'exécution, les sémaphores, les données applicatives, les fichiers numéro de processus, etc.
  • /var/spool: répertoire contenant des données stockées de manière temporaire entre processus. Souvent, ce répertoire est utilisé pour stocker des données relatives à des actions ou tâches à effectuer dans un futur proche par les processus en cours d'exécution.
  • /var/mail: c'est le répertoire de stockage des messageries électroniques locales des comptes utilisateurs du système.

Certains programmes vont stocker par défaut leurs données temporaires dans l'arborescence /var. Ainsi, le serveur web Apache HTTPD par exemple, lorsqu'il est installé via les packages des distributions majeures est configuré avec un docroot(répertoire contenant par défaut les sources des sites web) pointant vers /var/www.

Ce qui fait que :

  • Certains sous-répertoires de /var seront marqués variables unshareable (par exemple /var/log) ;
  • Alors que d'autres seront marqués variables shareable(comme/var/mail ou /var/www par exemple).

Identifiez le rôle des systèmes de fichiers virtuels de Linux

Traditionnellement, il existe aussi sur les systèmes Linux des arborescences un peu particulières. Elles correspondent à une organisation des informations maintenues en temps réel par le noyau Linux, sous la forme d'une arborescence.

Imaginez la vitrine d'un magasin : le noyau met à disposition beaucoup d'informations : elles sont visibles (certaines accessibles uniquement en lecture seule). Mais pour certaines d'entre elles, il est possible de rentrer dans la boutique pour les manipuler.

Il est ainsi possible de changer certaines variables du noyau, et donc certains comportements du système global en modifiant le contenu de ces fichiers “virtuels” placés dans ces arborescences.

Ces arborescences n'existent pas sur périphérique physique de type bloc, et l'analyse indépendante du disque d'un système Linux ne les fera pas apparaître. Elles existent uniquement parce que le noyau vous les propose gracieusement pendant son exécution.

Le répertoire /proc

Cette arborescence contient toutes les informations concernant le processus ! Et il y en a beaucoup…

Pour lister le contenu de cette arborescence, lancez la commande suivante :

ls /proc

on peut y voir de nombreuses informations, des fichiers et des répertoires que l'on va présenter plus en détails dans la suite du chapitre.

Vous pouvez remarquer que /proc présente aussi des fichiers et des répertoires. Je vous propose d'observer un peu plus dans le détail quelques fichiers intéressants.

Par exemple, /proc/cpuinfo contient les informations sur le(s) processeur(s) maintenues par le noyau. Pour consulter ce fichier, utilisez la commande cat telle que :

seb@thor:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz
...

Et pourtant, lorsque vous lancez la commande file sur ce même fichier :

seb@thor:~$ file /proc/cpuinfo
/proc/cpuinfo: empty

Ces fichiers étant virtuels, ils ont une taille de 0.

D'autres fichiers sont intéressants à relever dans cette arborescence :

  • /proc/version contient la version exacte du noyau en exécution ;
  • /proc/meminfo, les informations détaillés sur la mémoire vive gérée par le noyau ;
  • /proc/uptime, le temps d'exécution cumulé ;
  • /proc/cmdline, les paramètres passés au démarrage du noyau, etc.

/proc contient également beaucoup de répertoires, dont la grande majorité porte des noms à base de chiffres. En effet, tous les processus en exécution sur le système sont identifiés par un numéro unique géré par le noyau.

Ainsi ce dernier met à disposition les informations concernant chaque processus dans le répertoire portant son numéro associé.

Observons par exemple le contenu du répertoire /proc/1 qui est le premier processus du noyau :

seb@thor:~$ cat /proc/1/cmdline
/lib/systemd/systemd--system--deserialize18

Vous obtenez ici le premier processus lancé par le noyau : systemd, le programme d'initialisation principal de Linux (le résultat de cette commande peut varier en fonction des distributions).

Le répertoire /sys

Cette seconde arborescence fonctionne sur le même principe que sa petite sœur /proc. Elle présente des informations maintenues en temps réel par le noyau. À une différence fondamentale près : certains éléments de cette arborescence sont accessibles en écriture aux comptes privilégiés du système et notamment les variables systèmes du noyau dans le répertoire kernel.

Cette arborescence contient les informations sur les périphériques gérés par le noyau, notamment :

  • les périphériques de type bloc ou caractères dans les répertoires /sys/block ou /sys/dev ;
  • les drivers dans /sys/devices ;
  • les différents systèmes de fichiers dans /sys/fs ;
  • les modules du noyau dans /sys/module.

Le répertoire /sys/kernel contient une arborescence de fichiers représentant des variables du noyau accessibles en écriture et permettant de modifier le comportement à chaud du système. Par exemple, le répertoire /sys/kernel/debug contient des fichiers permettant d'activer des fonctions de traces et de débogage du noyau.

Sur les distributions principales de Linux, le répertoire /proc/sys/ est également accessible en écriture sur certains paramètres. En effet, d'un point de vue historique, seule l'arborescence /proc existait. /sys a été ajoutée à partir des versions 2.6 du noyau, notamment pour différencier la gestion des informations concernant les périphériques.

En résumé

  • L'arborescence des systèmes Unix/Linux est normalisée par la FHS (Filesystem Hierarchy Standard) ;
  • Certains répertoires possèdent des caractéristiques shareable / unshareable et/ou static / variable en fonction des données qu'ils contiennent ;
  • Vous pouvez adresser un répertoire et/ou un fichier de manière absolue ou relative ;
  • Les répertoires /root et /home sont facultatifs ;
  • Linux maintient en temps réel les arborescences virtuelles /proc et /sys ;

Dans le chapitre suivant, nous allons voir comment consulter des fichiers pour administrer votre serveur. C'est parti !

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/sysadmin/administrer_un_systeme_linux/210_arborescence_systeme_linux.txt · Dernière modification : 2024/01/22 10:52 de yoann