Comment vérifier si un indicateur de contamination (taint flag) du noyau est présent sous Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à vérifier l'état de contamination (taint status) du noyau Linux. Nous allons explorer comment déterminer si le noyau fonctionne dans un état potentiellement non pris en charge ou modifié en examinant le fichier /proc/sys/kernel/tainted.

Après la vérification initiale, vous apprendrez à vérifier les raisons spécifiques de toute contamination du noyau en inspectant le tampon de messages du noyau à l'aide de la commande dmesg. Enfin, vous explorerez comment inspecter les symboles du noyau à l'aide de /proc/kallsyms, ce qui peut être utile pour comprendre l'état du noyau et les modules chargés.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558725{{"Comment vérifier si un indicateur de contamination (taint flag) du noyau est présent sous Linux"}} linux/grep -.-> lab-558725{{"Comment vérifier si un indicateur de contamination (taint flag) du noyau est présent sous Linux"}} end

Vérifier l'état de contamination (taint status) avec cat /proc/sys/kernel/tainted

Dans cette étape, nous allons apprendre à vérifier l'état de "contamination" (taint status) du noyau Linux. Le noyau peut devenir "contaminé" si des modules non sous GPL (General Public License) sont chargés ou si certains événements se produisent, indiquant peut-être un problème ou une configuration non standard. Vérifier l'état de contamination est un moyen rapide de savoir si votre noyau fonctionne dans un état potentiellement non pris en charge ou modifié.

Nous pouvons vérifier l'état de contamination du noyau en lisant le contenu d'un fichier spécial dans le système de fichiers /proc. Le système de fichiers /proc est un système de fichiers virtuel qui fournit des informations sur les processus et d'autres informations système.

Ouvrez votre terminal s'il n'est pas déjà ouvert. Vous pouvez le faire en cliquant sur l'icône Xfce Terminal sur le côté gauche du bureau.

Maintenant, utilisez la commande cat pour afficher le contenu du fichier /proc/sys/kernel/tainted. La commande cat est utilisée pour concaténer et afficher le contenu de fichiers.

Tapez la commande suivante et appuyez sur Entrée :

cat /proc/sys/kernel/tainted

La sortie sera un seul nombre.

0
  • Une valeur de 0 signifie que le noyau n'est pas contaminé.
  • Toute valeur non nulle indique que le noyau est contaminé. Le nombre spécifique est un masque de bits où chaque bit représente une raison différente pour la contamination.

Par exemple, si la sortie était 1, cela indiquerait qu'un module propriétaire a été chargé. Si c'était 4, cela pourrait indiquer qu'un avertissement du noyau s'est produit.

Dans notre environnement LabEx, le noyau ne devrait pas être contaminé au départ, vous devriez donc voir 0. C'est un bon signe, indiquant un état propre du noyau.

Comprendre l'état de contamination est important pour le débogage de problèmes liés au noyau ou pour vous assurer que vous exécutez une configuration standard du noyau.

Cliquez sur Continuer pour passer à l'étape suivante.

Vérifier les détails de la contamination (taint) dans dmesg

Dans l'étape précédente, nous avons vérifié l'état de contamination (taint status) du noyau en utilisant /proc/sys/kernel/tainted. Bien que ce fichier nous donne un code numérique indiquant si le noyau est contaminé, il ne nous dit pas pourquoi il est contaminé. Pour obtenir des informations plus détaillées sur les messages du noyau, y compris les raisons de la contamination, nous pouvons utiliser la commande dmesg.

La commande dmesg est utilisée pour examiner le tampon circulaire (ring buffer) du noyau. Ce tampon stocke les messages du noyau, y compris les informations sur les pilotes de périphériques, les erreurs et les avertissements. Lorsque le noyau devient contaminé, un message est généralement enregistré dans le tampon circulaire expliquant la raison.

Ouvrez votre terminal s'il n'est pas déjà ouvert.

Maintenant, tapez la commande suivante et appuyez sur Entrée :

dmesg

Cette commande affichera potentiellement une grande quantité de texte, montrant tous les messages du noyau depuis le démarrage du système.

Pour trouver des informations spécifiques liées à la contamination, nous pouvons combiner dmesg avec la commande grep. grep est un outil puissant pour rechercher des motifs de texte. Nous allons rechercher les lignes contenant le mot "taint".

Tapez la commande suivante et appuyez sur Entrée :

dmesg | grep taint

Le symbole | s'appelle un tuyau (pipe). Il prend la sortie de la commande de gauche (dmesg) et l'envoie en tant qu'entrée à la commande de droite (grep). Ainsi, cette commande récupère d'abord tous les messages du noyau, puis les filtre pour n'afficher que les lignes contenant le mot "taint".

Si votre noyau n'est pas contaminé (comme prévu dans cet environnement), cette commande peut ne produire aucun résultat. C'est normal et indique qu'aucun événement de contamination n'a été enregistré.

Si le noyau était contaminé, vous verriez des lignes similaires à celles-ci (le message exact dépend de la raison de la contamination) :

[  ... ] kernel: Linux version ... (tainted: G)
[  ... ] kernel: Disabling lock debugging due to kernel taint

La partie (tainted: G) indique que le noyau est contaminé, et la lettre G signifie plus précisément qu'un module propriétaire a été chargé. D'autres lettres indiquent différentes raisons de contamination (par exemple, P pour un module propriétaire, F pour un chargement forcé de module, R pour un module sous licence restreinte, etc.).

L'utilisation de dmesg | grep taint est une étape cruciale pour diagnostiquer les problèmes liés au noyau lorsque /proc/sys/kernel/tainted affiche une valeur non nulle.

Cliquez sur Continuer pour passer à l'étape suivante.

Inspecter les symboles du noyau avec cat /proc/kallsyms

Dans cette étape, nous allons explorer un autre fichier important du système de fichiers /proc : /proc/kallsyms. Ce fichier contient les adresses et les noms de tous les symboles du noyau (fonctions et variables) qui ne sont pas explicitement marqués comme static. C'est un outil essentiel pour le débogage du noyau et la compréhension du fonctionnement interne du noyau.

Le fichier /proc/kallsyms liste chaque symbole du noyau avec son adresse mémoire, son type et son nom. Le format de chaque ligne est généralement le suivant :

<address> <type> <symbol_name>
  • <address> : L'adresse mémoire où le symbole est situé.
  • <type> : Un seul caractère indiquant le type de symbole (par exemple, t ou T pour le texte/code, d ou D pour les données, b ou B pour le BSS, r ou R pour les données en lecture seule, w ou W pour un symbole faible, U pour un symbole indéfini). Les minuscules indiquent un symbole local, les majuscules indiquent un symbole global.
  • <symbol_name> : Le nom de la fonction ou de la variable du noyau.

Ouvrez votre terminal s'il n'est pas déjà ouvert.

Maintenant, affichons le contenu de /proc/kallsyms en utilisant la commande cat. Sachez que ce fichier est très volumineux, donc la sortie défilera rapidement.

Tapez la commande suivante et appuyez sur Entrée :

cat /proc/kallsyms

Vous verrez une longue liste de lignes, chacune représentant un symbole du noyau.

...
ffffffff... T sys_read
ffffffff... T sys_write
ffffffff... D jiffies
...

Pour rendre cette sortie plus gérable et trouver des symboles spécifiques, nous pouvons à nouveau utiliser grep. Par exemple, recherchons des symboles liés à "schedule", qui est une fonction de base du noyau pour la gestion des processus.

Tapez la commande suivante et appuyez sur Entrée :

cat /proc/kallsyms | grep schedule

Cela filtrera la sortie pour n'afficher que les lignes contenant le mot "schedule".

ffffffff... T schedule
ffffffff... T schedule_timeout
ffffffff... T schedule_hrtimeout_range
...

Cette sortie filtrée est beaucoup plus facile à lire et vous permet de trouver les adresses et les types de fonctions ou de variables spécifiques du noyau qui pourraient vous intéresser.

L'exploration de /proc/kallsyms offre un aperçu précieux de la structure du noyau et des fonctions disponibles. C'est une ressource fondamentale pour tout développeur de noyau ou tout personne effectuant un débogage avancé.

Vous avez maintenant appris à vérifier l'état de contamination (taint status) du noyau et à inspecter les symboles du noyau en utilisant le système de fichiers /proc et les commandes de base de Linux.

Cliquez sur Continuer pour terminer ce laboratoire.

Résumé

Dans ce laboratoire, nous avons appris à vérifier l'état de contamination (taint status) du noyau Linux. Nous avons commencé par utiliser la commande cat /proc/sys/kernel/tainted pour déterminer rapidement si le noyau est contaminé, en comprenant qu'une valeur de 0 indique un état propre et toute valeur non nulle signifie qu'il est contaminé, le nombre spécifique représentant un masque de bits des raisons.

Nous avons ensuite vérifié les détails de toute contamination en examinant le tampon de messages du noyau à l'aide de dmesg. Cela nous permet de voir des messages spécifiques liés aux événements qui ont rendu le noyau contaminé, fournissant plus de contexte que le code numérique seul. Enfin, nous avons exploré comment inspecter les symboles du noyau en utilisant cat /proc/kallsyms, ce qui peut être utile pour le débogage avancé et la compréhension de l'état interne du noyau, bien que cette étape n'ait pas été entièrement détaillée dans le contenu fourni.