Notes et transcriptions du cours “Administrez un système Linux” disponible sur la plateforme Openclassrooms.
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.
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 :
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 :
Prenons quelques exemples pour illustrer cette notion :
/boot
qui contient notamment le noyau Linux exploité sur l'équipement./boot
bien entendu, mais également /etc
, par exemple, qui contient traditionnellement les fichiers de configuration du système et des services./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/
/home
;..
(donc retour à /
) ;/home
;.
(c'est-à-dire /home
à ce moment-là) ;..
(donc retour à /
) ;/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 ?
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 :
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 ?
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 !
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.
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 :
/var
seront marqués variables unshareable (par exemple /var/log
) ;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.
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).
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 :
/sys/block
ou /sys/dev
;/sys/devices
;/sys/fs
;/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.
/root
et /home
sont facultatifs ;/proc
et /sys
;Dans le chapitre suivant, nous allons voir comment consulter des fichiers pour administrer votre serveur. C'est parti !