Live Patches: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Entwickler-Tutorial=
+
*[[Allgemein live patches]]
==Live-Patching des Debian 10 Linux-Kernels mit Kpatch==
+
*[[fedora live patches]]
*Aus dem Englischen von Stephan Venter
+
*[[ubuntu live patches]]
 
 
Live-Patching ist eine Methode zum Aktualisieren eines Linux-Kernels, ohne den Kernel neu zu starten - und daher ohne die Notwendigkeit, die Maschine neu zu booten. Live-Patching wird häufig verwendet, um schwerwiegende Linux-Kernel-Sicherheitslücken ohne Verzögerung zu patchen, da Live-Patching keine Unterbrechung verursacht und kein Wartungsfenster erfordert.
 
 
 
Es gibt einige Live-Patching-Tools da draußen, und Benutzer des Debian-Betriebssystems greifen manchmal auf Kpatch zurück, um Live-Patching durchzuführen - oder um den Kernel anzupassen.
 
 
 
Dieses Tutorial ist eine praktische Demonstration von Kpatch. Wir zeigen, wie man Kpatch verwendet, um das Verhalten eines laufenden Debian 10-Kernels ohne Anhalten zu ändern. Dabei ändern wir den Inhalt von /proc/uptime (und des uptime-Befehls), sodass die gemeldete Betriebszeit des Systems um 10 Jahre erhöht wird.
 
 
 
Kpatch wurde von Red Hat entwickelt und funktioniert auf Red Hat Enterprise Linux (RHEL) und seinen Derivaten. Red Hat bietet diesen kommerziellen Live-Patching-Service für RHEL-Kunden an. Bei TuxCare bieten wir KernelCare Enterprise an, das sowohl RHEL als auch jede andere gängige Enterprise-Linux-Distribution live patchen kann.
 
 
 
Ich habe mich für Kpatch in diesem Tutorial entschieden, weil der Quellcode frei verfügbar und regelmäßig aktualisiert wird.
 
 
 
=Voraussetzungen=
 
Hier sind die Systemvoraussetzungen, um diesem Tutorial zu folgen:
 
 
 
*Ein Testsystem (nicht für die Produktion) mit Debian Bullseye (für diese Demo wurde 11.6 verwendet) auf einer x86_64/amd64-Architektur
 
 
 
*20 GB freier Festplattenspeicher (der Linux-Kernel-Quellcode belegt auf der Festplatte etwa 909 MB und wächst beim Kompilieren auf 17 GB an)
 
 
 
Ihr Kernel wurde nicht angepasst; Sie verwenden den Standard-Kernel, der von Debian bereitgestellt wird
 
Ihr Kernel verfügt über eingebautes Live-Patching. Verwenden Sie diesen Befehl und erwarten Sie, dass für CONFIG_HAVE_LIVEPATCH und CONFIG_LIVEPATCH zwei Werte auf "y" gesetzt sind:
 
grep LIVEPATCH /boot/config-$(uname -r)
 
 
 
Die installierte Version von gcc entspricht der Version, mit der der ursprüngliche Kernel kompiliert wurde (Der kpatch-build-Befehl schlägt fehl, wenn die Versionen nicht übereinstimmen. Dies kann mit der Option --skip-gcc-check außer Kraft gesetzt werden, aber deren Verwendung wird nicht empfohlen.)
 
 
 
Die installierte Version von gcc finden Sie mit: gcc --version
 
 
 
Die Version von gcc, die zur Kompilierung des aktuellen Kernels verwendet wurde, finden Sie mit: cat /proc/version
 
Installieren der Abhängigkeitspakete
 
Installieren und Konfigurieren von sudo
 
 
 
Als Root:
 
 
 
apt-get install sudo
 
 
 
(sudo sollte bereits installiert sein, aber dies stellt sicher, dass es vorhanden ist)
 
 
 
adduser <user> sudo
 
wobei <user> der Benutzername für einen normalen Benutzer ist (alle nachfolgenden Befehle sollten als dieser Benutzer ausgeführt werden)
 
Installieren von Paketen
 
 
 
*sudo apt-get -y update
 
 
 
*sudo apt-get -y upgrade
 
 
 
*sudo apt-get -y install build-essential devscripts ccache gawk libelf-dev libssl-dev linux-source linux-image-$(uname -r)-dbg
 
 
 
=Kpatch installieren=
 
Wie bei den Paketen von Debian üblich gibt es eine Verzögerung zwischen den aktuellen Versionen und den Versionen, die als Updates über das reguläre apt angeboten werden. Holen wir uns den neuesten Kpatch-Code und bauen ihn aus dem Quellcode.
 
 
 
*git clone https://github.com/dynup/kpatch.git
 
*cd kpatch && make && sudo make install
 
 
 
=Eine Kopie des Linux-Kernel-Quellcodes erhalten=
 
(Optional) Erstellen Sie ein Arbeitsverzeichnis und wechseln Sie in dieses Verzeichnis
 
*mkdir kernel && cd $_
 
*Extrahieren Sie den Linux-Kernel-Quellcode
 
*tar xaf /usr/src/linux-source-5.10.tar.xz
 
 
 
Hinweis: 5.10 ist die Linux-Kernel-Version für Debian 11.6 zum Zeitpunkt des Schreibens. Sie sollten die neueste Version überprüfen und die vorhandene Version in /usr/src ersetzen
 
 
 
=Erstellen der Konfigurationsdatei des Linux-Kernels=
 
Der Linux-Kernel wird mit Einstellungen in einer Konfigurationsdatei kompiliert, die mit Ihrer Distribution geliefert wird. Erstellen Sie eine Kopie und ändern Sie einige Einstellungen, damit kpatch-build einen Linux-Kernel mit denselben Einstellungen wie Ihren laufenden Kernel kompilieren kann.
 
cd linux-source-5.10
 
cp /boot/config-$(uname -r) .config
 
 
 
Überprüfen Sie, ob die erforderlichen Kernel-Einstellungen für die Verwendung von Kpatch aktiviert sind. Alle sollten "y" zurückgeben.
 
scripts/config -s DYNAMIC_FTRACE_WITH_REGS
 
scripts/config -s FUNCTION_TRACER
 
scripts/config -s HAVE_DYNAMIC_FTRACE_WITH_REGS
 
scripts/config -s HAVE_FENTRY
 
scripts/config -s HAVE_LIVEPATCH
 
scripts/config -s KALLSYMS_ALL
 
scripts/config -s KALLSYMS_ALL
 
scripts/config -s LIVEPATCH
 
scripts/config -s MODULES
 
scripts/config -s MODULE_SIG
 
scripts/config -s SYSFS
 
scripts/config -s SYSTEM_TRUSTED_KEYRING
 
=Ändern Sie den Wert eines Kernel-Konfigurationselements
 
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
 
Verlassen Sie das Quellverzeichnis
 
cd ..
 
Ein Patch erstellen
 
Eine Patch-Quelldatei ist die Ausgabe des diff-Befehls, der auf den ursprünglichen und geänderten Quellcodedateien ausgeführt wird.
 
 
 
Das Patch-Beispiel, das im Abschnitt "Schnellstart" der Kpatch-Github-Seite gezeigt wird, ändert die Ausgabe von /proc/meminfo. Viele andere Kpatch-Artikel reproduzieren dieses Beispiel, daher wollte ich etwas anderes und etwas interessanteres, aber dennoch sicheres.
 
 
 
Dieses Beispiel ändert die Ausgabe des uptime-Befehls, um den Eindruck zu erwecken, dass die Betriebszeit Ihres Servers um ein Jahrzehnt erhöht wurde.
 
 
 
Kopieren Sie in Ihrem Arbeitsverzeichnis eine Datei
 
cp linux-source-4.19/fs/proc/uptime.c .
 
Bearbeiten Sie die Datei. Ändern Sie in Zeile 33:
 
(unsigned long) uptime.tv_sec,
 
in
 
 
 
(unsigned long) uptime.tv_sec + 315576000,
 
 
 
Speichern Sie die Datei
 
Erstellen Sie die Patch-Datei
 
 
 
diff -u linux-source-5.10/fs/proc/uptime.c ./uptime.c > uptime.patch
 
 
 
Erstellen Sie das Patch-Modul. (Beim ersten Mal dauert dies einige Zeit, da der Kernel-Quellcode kompiliert werden muss. Nachfolgende Builds sind erheblich schneller, im Bereich von Minuten. Dies ist eine dieser Operationen, bei denen es hilft, mehr (virtuelle) CPUs zu haben, um den Prozess zu beschleunigen. Es handelt sich um eine CPU-intensive Aufgabe).
 
 
 
*kpatch-build -s linux-source-5.10 -v /usr/lib/debug/lib/modules/$(uname -r)/vmlinux uptime.patch
 
Wenn der Vorgang abgeschlossen ist, haben Sie eine Linux Loadable Kernel Module-Datei (.ko) für den Patch
 
ls -l *.ko
 
=Den Patch testen=
 
Vor dem Laden des Patch-Moduls überprüfen Sie die aktuelle Betriebszeit
 
*cat /proc/uptime && uptime -p
 
Laden Sie das Patch-Modul
 
*sudo kpatch load livepatch-uptime.ko
 
Überprüfen Sie erneut die Betriebszeit
 
*cat /proc/uptime && uptime -p
 
Sie sollten feststellen, dass Ihre Betriebszeit um zehn Jahre verbessert wurde (der interne Wert wurde nicht geändert, nur das, was gedruckt wird)
 
 
 
=Entladen Sie das Patch-Modul=
 
*sudo kpatch unload livepatch-uptime.ko
 
Überprüfen Sie, ob die Betriebszeit zu ihrem früheren Wert zurückgekehrt ist
 
*cat /proc/uptime && uptime -p
 
 
 
=Fazit=
 
Das Live-Patching des Linux-Kernels mit Kpatch ist nicht schwierig. Die Schwierigkeit besteht darin, einen Patch zu schreiben, der das System nicht zum Absturz bringt und mit anderen Patches funktioniert, die später kommen. Die meisten Patches werden aus mehr als einem einfachen diff erstellt und müssen gründlich auf verschiedenen Kernelversionen und Distributionen getestet werden.
 
 
 
Patch-Autoren müssen sowohl erfahrene C-Programmierer als auch erfahrene Linux-Kernel-Entwickler sein. Das Kompilieren des Kernels und das Testen von Patches für jede Kernelversion erfordert eine große Investition in Hardware und Automatisierungswerkzeuge.
 
 
 
Die Seltenheit von Fähigkeiten und die Kosten für die Infrastruktur bedeuten, dass Anbieter für Live-Patching-Dienste Gebühren erheben müssen, die oft über teure Wartungsprogramme bereitgestellt werden.
 
 
 
Diese Kosten summieren sich zu beträchtlichen Summen, aber das gilt nicht für den Live-Patching-Service von TuxCare - der bereits ab 59,50 USD/Server/Jahr für Linux verfügbar ist. Klicken Sie hier, um mehr über das Angebot von TuxCare an Live-Patching-Diensten für den Linux-Kernel, Datenbanken, Shared Libraries, IoT-Geräte und Virtualisierungssysteme zu erfahren.
 
 
 
Und vergessen Sie nicht, unseren ausführlichen Leitfaden zum Anwenden von Linux-Kernel-Sicherheitspatches zu lesen: 3 verschiedene Methoden. Der Artikel erklärt, wie Sie Linux-Kernel aktualisieren können, ohne neu zu starten, und behandelt drei verschiedene Methoden für einige der beliebtesten Linux-Kernel.
 
 
 
=Quell=
 
*https://tuxcare.com/blog/developer-tutorial-live-patching-debian-10-linux-kernel-with-kpatch/#test
 

Aktuelle Version vom 27. Juni 2023, 05:02 Uhr