Cum să pătrundem kernel-ul fără a reporni livepatch, kpatch și canonical livepatch service,

Cel mai simplu exemplu: livepatch

Să începem cu un experiment foarte simplu. Pentru aceasta avem nevoie de orice distribuție Linux kernel-C versiunea 4.0 sau mai mare (în acest caz, Ubuntu 16.04, în continuare exemple de comenzi sunt în mod special pentru această distribuție). În noile versiuni de kernel, funcția de adăugare a patch-urilor "în zbor" (numită - livepatch) este activată în mod implicit.
Pentru a verifica modul în care funcționează, avem nevoie, în primul rând, să setăm anteturile kernel-ului:

Apoi, instalați simbolurile kernel-ului de depanare:

Când executați această comandă în Ubuntu 16.04, este posibil să primiți următorul mesaj de eroare:

După aceasta, comanda anterioară va fi executată fără erori.

Totul este gata pentru experiment, puteți începe:

Am descărcat codul modulului de kernel, care modifică codul principal al kernelului și modifică ieșirea comenzii cat / proc / cmdline. Acum acest modul trebuie asamblat. Pentru a face acest lucru, creați următorul set de fișiere:

Colectăm modulul și îl introducem în kernel:

Să vedem ce sa întâmplat. Să executăm:

În locul informațiilor standard despre parametrii kernelului, vom vedea următorul text:

După cum puteți vedea, plasturele a fost aplicat cu succes.

Toate informațiile despre patch-urile descărcate sunt stocate în directorul / sys / kernel / livepatch:

Puteți să dezactivați patch-ul cu comanda:

Să începem prin stabilirea dependențelor cerute:

Pentru munca deplină cu kpatch, este de dorit să instalați ccache.

Asta este, dependențele sunt fixe. Puteți instala kpatch:

În experimentul nostru, vom modifica sursele kernel-ului. Clonem repozitoriul cu codul sursă al versiunii curente a Ubuntu:

La finalizarea Clonarea va copia codul sursă într-un director ubuntu-kpatch-care se referă la oaspeți (este necesar să se facă modificări codului sursă și apoi creat pe baza acestor modificări, patch-uri):

Deschideți fișierul ubuntu-xenial-kpatch / ubuntu-xenial / fs / proc / version.c și efectuați următoarele modificări:

Creați un patch folosind comanda:

Patch-ul este un fișier text simplu, care prezintă modificările făcute:

Pentru a adăuga un patch la kernel, executați:

După cum puteți vedea din concluzia citată, la ieșire obținem modulul de kernel. Pentru a aplica un patch, trebuie doar să adăugați acest modul într-un mod standard:

Să vedem ce sa întâmplat ca rezultat:

Servicii Canon LivePatch

Cu câteva luni în urmă, Canonical a lansat serviciul oficial Canonical LivePatch Service, care permite patcharea kernel-ului "în zbor" cu ajutorul unor comenzi simple. Acest serviciu se concentrează în primul rând pe utilizatorii de la nivel de întreprindere și, prin urmare, este exigibil.
Dar utilizatorii obișnuiți pot primi rapid și toate cele mai recente actualizări ale kernel-ului. Pentru a face acest lucru, trebuie să vă înregistrați la Ubuntu One și să primiți un simbol. Token vă permite să instalați pe 3 mașini programul canonical-livepatch, care încarcă și adaugă patch-uri.

Să vedem cum funcționează serviciul Canonical Livepatch. Să trecem sub linkul de mai sus, vom primi un simbol și vom executa în continuare:

Când instalarea este finalizată, ieșim din sistem, apoi ne logam din nou și executăm:

Dacă totul a fost făcut corect, vom primi următorul mesaj:

Apoi rulați comanda:

Concluzia arată că canonical-livepatch funcționează și că toate cele mai recente actualizări sunt instalate în kernel. Pentru mai multe informații, utilizați opțiunea --verbose:

De asemenea, informațiile despre patch-urile instalate pot fi obținute prin căutarea în directorul / sys / kernel / livepatch deja menționat mai sus:

Kpatch_livepatch_Ubuntu_4_4_0_47_68_generic_14 - acesta este ultimul patch descarcat. Ultimele cifre din numele patch-urilor (14) sunt aceleași cu numărul de versiune specificat în ieșirea comenzii canonice-livepatch (vezi mai sus).

Asigurați-vă că noul patch a fost adăugat și puteți folosi comanda lsmod:

concluzie

Și dacă doriți să studiați mai profund acest subiect, acordați atenție următoarelor linkuri: