So überprüfen Sie, ob ein Kernel-Taint-Flag in Linux vorhanden ist

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie den Taint-Status (Verunreinigungsstatus) des Linux-Kernels überprüfen können. Wir werden untersuchen, wie Sie feststellen können, ob der Kernel in einem möglicherweise nicht unterstützten oder modifizierten Zustand läuft, indem Sie die Datei /proc/sys/kernel/tainted untersuchen.

Nach der ersten Überprüfung lernen Sie, wie Sie die spezifischen Gründe für eine eventuelle Kernel-Taint (Verunreinigung) überprüfen können, indem Sie den Kernel-Meldungspuffer mit dem Befehl dmesg untersuchen. Abschließend werden Sie untersuchen, wie Sie Kernel-Symbole mit /proc/kallsyms untersuchen können, was hilfreich sein kann, um den Zustand des Kernels und die geladenen Module zu verstehen.


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{{"So überprüfen Sie, ob ein Kernel-Taint-Flag in Linux vorhanden ist"}} linux/grep -.-> lab-558725{{"So überprüfen Sie, ob ein Kernel-Taint-Flag in Linux vorhanden ist"}} end

Überprüfen des Taint-Status mit cat /proc/sys/kernel/tainted

In diesem Schritt lernen wir, wie man den "Taint"-Status (Verunreinigungsstatus) des Linux-Kernels überprüft. Der Kernel kann "verunreinigt" (tainted) werden, wenn nicht-GPL (General Public License)-Module geladen werden oder wenn bestimmte Ereignisse auftreten, die auf ein Problem oder eine nicht-standardmäßige Konfiguration hinweisen könnten. Das Überprüfen des Taint-Status ist ein schneller Weg, um festzustellen, ob Ihr Kernel in einem möglicherweise nicht unterstützten oder modifizierten Zustand läuft.

Wir können den Taint-Status des Kernels überprüfen, indem wir den Inhalt einer speziellen Datei im /proc-Dateisystem lesen. Das /proc-Dateisystem ist ein virtuelles Dateisystem, das Informationen über Prozesse und andere Systeminformationen bereitstellt.

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist. Sie können dies tun, indem Sie auf das Symbol Xfce Terminal auf der linken Seite des Desktops klicken.

Verwenden Sie jetzt den Befehl cat, um den Inhalt der Datei /proc/sys/kernel/tainted anzuzeigen. Der cat-Befehl wird verwendet, um Dateiinhalte zu verketten und anzuzeigen.

Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

cat /proc/sys/kernel/tainted

Die Ausgabe wird eine einzelne Zahl sein.

0
  • Ein Wert von 0 bedeutet, dass der Kernel nicht verunreinigt ist.
  • Jeder von Null verschiedene Wert zeigt an, dass der Kernel verunreinigt ist. Die spezifische Zahl ist eine Bitmaske, bei der jedes Bit einen anderen Grund für die Verunreinigung darstellt.

Beispielsweise würde eine Ausgabe von 1 darauf hinweisen, dass ein proprietäres Modul geladen wurde. Wenn die Ausgabe 4 wäre, könnte dies darauf hinweisen, dass eine Kernel-Warnung aufgetreten ist.

In unserer LabEx-Umgebung sollte der Kernel zunächst nicht verunreinigt sein, sodass Sie 0 sehen sollten. Dies ist ein gutes Zeichen, das auf einen sauberen Kernel-Zustand hinweist.

Das Verständnis des Taint-Status ist wichtig für die Fehlersuche bei Kernel-Problemen oder um sicherzustellen, dass Sie eine Standard-Kernel-Konfiguration verwenden.

Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Überprüfen der Taint-Details mit dmesg

Im vorherigen Schritt haben wir den Taint-Status (Verunreinigungsstatus) des Kernels mithilfe von /proc/sys/kernel/tainted überprüft. Diese Datei gibt uns zwar einen numerischen Code, der anzeigt, ob der Kernel verunreinigt ist, aber sie sagt uns nicht warum er verunreinigt ist. Für detailliertere Informationen über Kernel-Meldungen, einschließlich der Gründe für die Verunreinigung, können wir den Befehl dmesg verwenden.

Der Befehl dmesg wird verwendet, um den Kernel-Ringpuffer (Kernel ring buffer) zu untersuchen. Dieser Puffer speichert Meldungen vom Kernel, einschließlich Informationen über Gerätetreiber, Fehler und Warnungen. Wenn der Kernel verunreinigt wird, wird normalerweise eine Meldung im Ringpuffer protokolliert, die den Grund erklärt.

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist.

Geben Sie jetzt den folgenden Befehl ein und drücken Sie die Eingabetaste:

dmesg

Dieser Befehl gibt möglicherweise eine große Menge an Text aus und zeigt alle Kernel-Meldungen seit dem Systemstart an.

Um spezifische Informationen im Zusammenhang mit der Verunreinigung zu finden, können wir dmesg mit dem Befehl grep kombinieren. grep ist ein leistungsstarkes Tool zum Suchen von Textmustern. Wir werden nach Zeilen suchen, die das Wort "taint" enthalten.

Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

dmesg | grep taint

Das Symbol | wird als Pipe bezeichnet. Es nimmt die Ausgabe des Befehls auf der linken Seite (dmesg) und gibt sie als Eingabe an den Befehl auf der rechten Seite (grep) weiter. Dieser Befehl ruft also zunächst alle Kernel-Meldungen ab und filtert sie dann, um nur die Zeilen anzuzeigen, die das Wort "taint" enthalten.

Wenn Ihr Kernel nicht verunreinigt ist (wie in dieser Umgebung zu erwarten), gibt dieser Befehl möglicherweise keine Ausgabe. Dies ist normal und zeigt an, dass keine Verunreinigungsereignisse protokolliert wurden.

Wenn der Kernel tatsächlich verunreinigt wäre, würden Sie Zeilen ähnlich wie diese sehen (die genaue Meldung hängt vom Grund für die Verunreinigung ab):

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

Der Teil (tainted: G) zeigt an, dass der Kernel verunreinigt ist, und der Buchstabe G bedeutet speziell, dass ein proprietäres Modul geladen wurde. Andere Buchstaben geben verschiedene Verunreinigungsgründe an (z. B. P für proprietäres Modul, F für erzwungene Modulladung, R für Modul mit eingeschränkter Lizenz usw.).

Die Verwendung von dmesg | grep taint ist ein entscheidender Schritt bei der Diagnose von Kernel-Problemen, wenn /proc/sys/kernel/tainted einen von Null verschiedenen Wert anzeigt.

Klicken Sie auf Weiter, um fortzufahren.

Untersuchung von Kernel-Symbolen mit cat /proc/kallsyms

In diesem Schritt werden wir eine weitere wichtige Datei im /proc-Dateisystem erkunden: /proc/kallsyms. Diese Datei enthält die Adressen und Namen aller Kernel-Symbole (Funktionen und Variablen), die nicht explizit als static markiert sind. Sie ist ein wichtiges Werkzeug für die Kernel-Debugging und zum Verständnis der internen Funktionsweise des Kernels.

Die Datei /proc/kallsyms listet jedes Kernel-Symbol mit seiner Speicheradresse, seinem Typ und seinem Namen auf. Das Format jeder Zeile ist typischerweise:

<address> <type> <symbol_name>
  • <address>: Die Speicheradresse, an der sich das Symbol befindet.
  • <type>: Ein einzelnes Zeichen, das den Typ des Symbols angibt (z. B. t oder T für Text/Code, d oder D für Daten, b oder B für BSS, r oder R für schreibgeschützte Daten, w oder W für schwache Symbole, U für undefinierte Symbole). Kleinbuchstaben geben ein lokales Symbol an, Großbuchstaben ein globales Symbol.
  • <symbol_name>: Der Name der Kernel-Funktion oder -Variable.

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist.

Lassen Sie uns nun den Inhalt von /proc/kallsyms mithilfe des cat-Befehls anzeigen. Beachten Sie, dass diese Datei sehr groß ist, sodass die Ausgabe schnell nach unten scrollt.

Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

cat /proc/kallsyms

Sie werden eine lange Liste von Zeilen sehen, wobei jede Zeile ein Kernel-Symbol darstellt.

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

Um diese Ausgabe besser zu verwalten und bestimmte Symbole zu finden, können wir erneut grep verwenden. Beispielsweise suchen wir nach Symbolen, die mit "schedule" in Verbindung stehen, einer Kernfunktion des Kernels zur Prozessverwaltung.

Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

cat /proc/kallsyms | grep schedule

Dies filtert die Ausgabe und zeigt nur die Zeilen an, die das Wort "schedule" enthalten.

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

Diese gefilterte Ausgabe ist viel einfacher zu lesen und ermöglicht es Ihnen, die Adressen und Typen bestimmter Kernel-Funktionen oder -Variablen zu finden, an denen Sie interessiert sein könnten.

Das Erkunden von /proc/kallsyms gibt wertvolle Einblicke in die Struktur des Kernels und die verfügbaren Funktionen. Es ist eine grundlegende Ressource für alle, die Kernel-Entwicklung oder fortgeschrittenes Debugging betreiben.

Sie haben nun gelernt, wie Sie den Taint-Status des Kernels überprüfen und Kernel-Symbole mithilfe des /proc-Dateisystems und grundlegender Linux-Befehle untersuchen können.

Klicken Sie auf Weiter, um dieses Lab abzuschließen.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Taint-Status (Verunreinigungsstatus) des Linux-Kernels überprüft. Wir haben begonnen, indem wir den Befehl cat /proc/sys/kernel/tainted verwendet haben, um schnell festzustellen, ob der Kernel verunreinigt ist. Wir haben verstanden, dass ein Wert von 0 einen sauberen Zustand anzeigt, während jeder von Null verschiedene Wert einen verunreinigten Kernel bedeutet, wobei die spezifische Zahl eine Bitmaske der Gründe darstellt.

Anschließend haben wir die Details einer eventuellen Verunreinigung überprüft, indem wir den Kernel-Meldungspuffer mit dmesg untersucht haben. Dies ermöglicht es uns, spezifische Meldungen im Zusammenhang mit den Ereignissen zu sehen, die dazu geführt haben, dass der Kernel verunreinigt wurde, und liefert mehr Kontext als nur der numerische Code. Schließlich haben wir untersucht, wie man Kernel-Symbole mit cat /proc/kallsyms untersucht, was für fortgeschrittenes Debugging und zum Verständnis des internen Zustands des Kernels nützlich sein kann, obwohl dieser Schritt in den bereitgestellten Inhalten nicht vollständig detailliert wurde.