Tutoriel du développeur : Live Patching Oracle Enterprise Linux 7 avec Kpatch - TuxCare

Les correctifs php2shell (CVE-2026-109618 et CVE-2026-109619) pour les versions de PHP en fin de vie sont désormais disponibles. Les réponses du service commercial étant plus lentes que d'habitude en raison d'une forte demande, le moyen le plus rapide d'obtenir les paquets corrigés est d'acheter ELS for Runtimes en ligne (s'ouvre dans un nouvel onglet). Consulter la FAQ sur les correctifs

Accédez directement au résumé généré par l'IA de cet article de blog

  • Résumez cet article avec Perplexity
  • Résume cet article avec Gemini

Développeur Tutorial-min

Le live patching vous permet de mettre à jour le noyau Linux sans redémarrer votre système. Cette approche est sans aucun doute une solution parfaite pour les grandes entreprises dont les services sont sensibles aux interruptions, lorsque les pauses peuvent avoir des effets toxiques sur l'ensemble de l'activité. Mais la mise à jour du noyau est indispensable dans le monde d'aujourd'hui, plein de vulnérabilités, de problèmes de sécurité et de lacunes. Seule une mise à jour anticipée du noyau peut garantir le bon fonctionnement de votre entreprise.

Vous avez peut-être déjà lu nos tutoriels sur le live patching du noyau : Live patching Debian 10 Linux kernel with Kpatch et Live patching Ubuntu 20.04 LTS Focal Fossa Linux kernel with Kpatch. Si ce n'est pas le cas, considérez-les comme des documents utiles à partager avec vos collègues et amis.

Dans ce tutoriel, je vais vous montrer comment patcher le noyau Linux Oracle Enterprise Linux 7 - UEK4 à l'aide de Kpatch sans le redémarrer.

Kpatch est un projet de Red Hat et fonctionne sur RHEL et ses dérivés. Red Hat propose un service commercial de correctifs en direct pour les clients RHEL, tout comme les entreprises suivantes, qui se concentrent chacune sur des distributions différentes :

Nous avons choisi Kpatch pour ce tutoriel car son code source est disponible gratuitement et est régulièrement mis à jour

Conditions préalables

Voici les prérequis du système pour suivre ce tutoriel.

  • Un système de test (non productif) exécutant Oracle7 UEK4 sur une architecture x86_64/amd64.
  • 20 Go d'espace disque libre. (Le code source du noyau Linux occupe environ 909 Mo sur le disque, et passe à 17 Go une fois compilé).
  • Votre noyau n'a pas été personnalisé ; vous utilisez le noyau standard fourni par Debian.
  • Votre noyau dispose d'un correctif intégré. Utilisez cette commande et attendez-vous à voir deux valeurs fixées à y pour CONFIG_HAVE_LIVEPATCH et CONFIG_LIVEPATCH:
grep LIVEPATCH /boot/config-$(uname -r)
  • La version de gcc installée correspond à celle utilisée pour construire le noyau original. (Le kpatch-build échouera si les versions ne correspondent pas. Ceci peut être surchargé avec l'option --skip-gcc-check(bien que son utilisation soit découragée).
    • Pour connaître la version de gcc installée : gcc --version (if gcc not installed run ”sudo apt install gcc”)
    • Pour connaître la version de gcc utilisée pour compiler le noyau actuel : cat /proc/version

1. Installer les paquets de dépendances

  1. Installer et configurer sudoComme root:
    apt-get install sudo
    adduser <user> sudo

    où <user> est le nom d'utilisateur d'un utilisateur normal. (Toutes les commandes ultérieures doivent être effectuées sous cet utilisateur).

  2. Installer les paquets.
    sudo yum install elfutils elfutils-devel
    sudo yum install pesign yum-utils zlib-devel binutils-devel newt-devel python-devel 
    perl-ExtUtils-Embed audit-libs numactl-devel pciutils-devel bison patchutils bc rpm-build glib2-devel
  3. Téléchargez et installez libdtrace :
    wget https://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/x86_64/getPackage/libdtrace-ctf-0.8.0-1.el7.x86_64.rpm
    wget https://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/x86_64/getPackage/libdtrace-ctf-devel-0.8.0-1.el7.x86_64.rpm
    rpm -ivh libdtrace-ctf-0.8.0-1.el7.x86_64.rpm libdtrace-ctf-devel-0.8.0-1.el7.x86_64.rpm
  4. Télécharger et installer les sources du noyau et les paquets kernel-devel :
    wget https://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/x86_64/getPackageSource/kernel-uek-4.1.12-124.40.6.3.el7uek.src.rpm
    wget https://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/x86_64/getPackage/kernel-uek-devel-4.1.12-124.40.6.3.el7uek.x86_64.rpm
    rpm -ivh kernel-uek-4.1.12-124.40.6.3.el7uek.x86_64.rpm --nodeps
    rpm -ivh --nodeps kernel-uek-devel-4.1.12-124.40.6.3.el7uek.x86_64.rpm
  5. Téléchargez et installez les paquets debuginfo :
wget https://oss.oracle.com/ol7/debuginfo/kernel-uek-debuginfo-4.1.12-124.40.6.3.el7uek.x86_64.rpm
wget https://oss.oracle.com/ol7/debuginfo/kernel-uek-debuginfo-common-4.1.12-124.40.6.3.el7uek.x86_64.rpm
rpm -ivh kernel-uek-debuginfo-4.1.12-124.40.6.3.el7uek.x86_64.rpm kernel-uek-debuginfo-common-4.1.12-124.40.6.3.el7uek.x86_64.rpm

2. Installer Kpatch

git clone https://github.com/dynup/kpatch.git
cd kpatch && make && sudo make install
cd kmod && make
mkdir /lib/modules/`uname -r`/extra/kpatch
cp core/kpatch.ko /lib/modules/`uname -r`/extra/kpatch
cp core/Module.symvers /lib/modules/`uname -r`/extra/kpatch

3. Obtenir une copie du code source du noyau Linux

Décompressez les sources du noyau :

cd /root/rpmbuild/SOURCES
tar xfj linux-4.1.12.tar.bz2

4. Créer le fichier de configuration du noyau Linux

Le noyau Linux est compilé en utilisant les paramètres d'un fichier de configuration fourni avec votre distribution. Faites-en une copie et modifiez certains paramètres pour que kpatch-build puisse compiler un noyau Linux avec les mêmes paramètres que votre noyau en cours d'exécution.

cd linux-source-5.4.0/
cp /boot/config-$(uname -r) .config

Vérifiez que les paramètres requis du noyau sont activés pour l'utilisation de Kpatch. Tous devraient renvoyer 'y'.

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
scripts/config -s LIVEPATCH
scripts/config -s MODULES
scripts/config -s MODULE_SIG
scripts/config -s SYSFS
scripts/config -s SYSTEM_TRUSTED_KEYRING

Modifier la valeur d'un élément de configuration du noyau.

scripts/config --set-str SYSTEM_TRUSTED_KEYS ""

Quittez le répertoire source.

cd ..

5. Créer un patch

Un fichier source de correctif est le résultat de l'application diff exécutée sur les fichiers de code source originaux et modifiés.

L'exemple de correctif présenté dans la section "Démarrage rapide" de la page d'accueil du site Web de l'OMPI est un exemple de correctif. Page github de kpatch modifie la sortie de /proc/meminfo. De nombreux autres articles de Kpatch reproduisent cet exemple. Je voulais donc quelque chose de différent et d'un peu plus intéressant, tout en restant sûr.

Cet exemple modifie la sortie de la fonction uptime pour leur donner l'illusion que le temps de fonctionnement de votre serveur a augmenté de dix ans.

1. Toujours dans votre répertoire de travail, copiez un fichier.

cd /root/rpmbuild/SOURCES
cp linux-4.1.12/fs/proc/uptime.c .

2. Modifiez-le. À la ligne 26, modifiez :

(unsigned long) uptime.tv_sec,

à

(unsigned long) uptime.tv_sec + 315576000,

Enregistrer le fichier.

3. Créer le fichier patch.

diff -u linux-source-5.4.0/fs/proc/uptime.c ./uptime.c > uptime.patch

4. Créez le module de correction. (La première fois que vous faites cela, cela prendra quelques heures, car le code source du noyau doit être compilé. Les compilations suivantes sont beaucoup plus rapides, de l'ordre de quelques minutes).

kpatch-build -t vmlinux -v /usr/lib/debug/boot/vmlinux-5.4.0-37-generic uptime.patch

 

5. Une fois cette opération terminée, vous disposerez d'un fichier de module noyau chargeable Linux kpatch-uptime.ko pour le correctif.

 

6. Tester le patch

  1. Avant de charger le module de correctifs, vérifiez l'heure de disponibilité actuelle.
    cat /proc/uptime && uptime -p
  2. Charger le module de patch.
    # kpatch load kpatch-uptime.ko
    chargement du module patch : kpatch-uptime.ko
  3. Vérifiez à nouveau le temps de fonctionnement.
    cat /proc/uptime && uptime -p
  4. Déchargez le module de patch.
    # kpatch unload kpatch-uptime.ko
    désactivation du module de correctif : kpatch_uptime
    déchargement du module de correction : kpatch_uptime
  5. Vérifier que le temps de fonctionnement est revenu à sa valeur antérieure.
    # cat /proc/uptime && uptime -p
    7215.13 27930.41
    up 2 heures

Conclusion

Nous avons travaillé sur le processus de live patching du noyau Linux d'Oracle Enterprise Linux 7 - UEK4 avec Kpatch. Vous pouvez voir que le processus lui-même est assez simple mais qu'il n'est pas facile. La principale difficulté réside dans le développement d'un correctif. Le correctif ne doit pas endommager le système, il doit être compatible avec les paquets précédents et suivants. Ajoutez à cela les différentes distributions et versions du noyau, les tests et le support, et vous pouvez vous retrouver avec un prix considérable pour un outil de correctif vivant.

Obtenir un essai GRATUIT de 7 jours de KernelCare 

 

Notre guide détaillé vous présente trois méthodes différentes pour appliquer les correctifs de sécurité du noyau Linux. Cet article explique comment mettre à jour les noyaux Linux sans redémarrer, en présentant trois méthodes différentes pour certains des noyaux Linux les plus courants.

Rejoignez plus de 4 500 professionnels de Linux et de l'Open Source!

2 fois par mois. Pas de spam.

Table des matières
Obtenez les réponses à vos questions sur la sécurité des logiciels libres

Rejoignez plus de 4 500 professionnels de Linux et de l'Open Source!

2 fois par mois. Pas de spam.