Canonical Livepatch patch di sicurezza senza riavvio

Bentornati nel nuovo episodio della saga relativa al patching del kernel Linux senza la necessità di riavviare il sistema per applicare gli aggiornamenti. In questo episodio vedremo Canonical Livepatch ossia la soluzione ideata per Ubuntu che, a differenza delle altre, è gratuita fino a 3 sistemi Ubuntu.

Il fatto che essa sia gratuita permette, a chiunque possieda un computer con Ubuntu o un server con Ubuntu, di usare la tecnologia al prezzo di un’iscrizione sul sito di Canonical.

Come Kernelcare, Livepatch applica solo patch di sicurezza e non di funzionalità, queste ultime vanno installate tramite la solita procedura (es. apt upgrade) e riavvio del sistema.

Livepatch è installabile a partire da Ubuntu 14.04 fino all’ultima versione. In questo tutorial installeremo Livepatch su un server con Ubuntu 18.04 Bionic Beaver.

Per ottenere una chiave di attivazione di Livepatch basta collegarsi al sito https://ubuntu.com/livepatch, registrarsi e ottenere il proprio codice.

La prima cosa da fare sul sistema, invece, è aggiornare i metadati dei pacchetti e installare le patch del sistema.

sudo apt update && sudo apt upgrade

Poi è necessario installare snap (snapd):

sudo apt install snapd

Quindi è possibile procedere con la semplicissima installazione del pacchetto canonical-livepatch come mostrato dalla guida e poi l’abilitazione con la chiave.

sudo snap install canonical-livepatch
sudo canonical-livepatch enable afd6b**********************

Lanciato il comando di attivazione comparirà un token identificativo.

Prima di applicare le patch di sicurezza del kernel si può utilizzare il comando per capire lo stato del sistema:

sudo canonical-livepatch status

Che può restituire un output simile:

Nello screenshot precedente, si nota come il kernel instalato sia 4.15.0-72.81-generic mentre il patchState è nothing-to-apply, il che significa che il nostro kernel è già all’ultima versione con le ultime patch di sicurezza disponibili.

Ogni volta che ci colleghiamo al server, è possibile vedere nel banner iniziale alcune statistiche relative a Livepatch, che in questo caso ricordano che Livepatch è abilitato e le patch sono tutte applicate.

In questo altro sistema dopo aver installato Livepatch, abbiamo riscontrato che ci sono delle patch di sicurezza del kernel da applicare.

Solitamente per applicare le patch non bisogna fare nulla, perchè si arrangia il deamon canonical-livepatchd ad installare le patch in autonomia, in alternativa è sufficiente lanciare il seguente comando:

sudo canonical-livepatch refresh

Tuttavia nel caso dello screenshot è necessario procedere all’installazione di un nuovo kernel: non tramite livepatch ma tramite il solito dist-upgrade o apt upgrade (e riavvio). Questo perchè il patchState è kernel-upgrade-required, come si può notare nello screenshot sopra.

sudo apt update
sudo apt dist-upgrade
sudo reboot

Invece nel caso sotto proposto, Livepatch ha applicato automaticamente delle patch di sicurezza:

KernelCare – kernel security patching rebootless

Secondo appuntamento con le soluzioni per l’applicazione delle patch per il kernel Linux senza necessità di reboot.

Dopo Ksplice di Oracle, in questo episodio presenteremo KernelCare, la tecnologia di CloudLinux, disponibile per svariate distribuzioni ad un costo accessibile (molto più economico di Ksplice). Una licenza per un singolo server costa 45 dollari all’anno.

KernelCare, al momento, è disponibile per:

  • Red hat Entreprise Linux/CentOS 6 e 7,
  • Oracle Linux UEK 6 e 7,
  • Debian 8 e 9,
  • Amazon (Linux) 1 e 2,
  • Ubuntu 14.04, 16.04, 18.04.

Mancano per ora la versione 8 di RHEL/CentOS/Oracle Linux e le ultime Debian e Ubuntu.

Per ottenere KernelCare è sufficiente scaricare lo script di installazione di KernelCare e lasciarlo tramite bash:

curl -s https://repo.cloudlinux.com/kernelcare/kernelcare_install.sh | bash

Poi è necessario registrarsi sul sito, tramite il quale è possibile ottenere una chiave temporanea, valida per 30 giorni, con la quale attivare il periodo di prova di KernelCare.
La chiave di attivazione viene inviata via e-mail all’indirizzo di registrazione.

Dopo aver ottenuto la chiave è sufficiente lanciare questo comando, seguito dalla chiave (asteriscata):

kcarectl --register a***************o

Dopo aver registrato la propria licenza del software, si può procedere all’installazione delle patch con il comando:

kcarectl --update

Il risultato del comando dovrebbe essere “Kernel is safe”.

Prima di lanciare l’update delle patch, e dopo.

Per avere informazioni circa il “punto” (level) di patching si può usare il comando:

kcarectl --uname

Questo è necessario perchè il classico uname non restituisce variazioni. Neppure dopo il riavvio del sistema.

Infatti è bene precisare che Kernelcare, rispetto ad altre soluzioni come Kspice, applica le patch di sicurezza (solo sicurezza, no funzionalità) al kernel attivo sul sistema mentre per installare realmente un kernel nuovo è necessario farlo con metodi tradizionali (yum update o apt upgrade); questo significa che se installate solo le patch di Kernelcare al riavvio del sistema vi troverete lo stesso kernel con le patch Kernelcare, non un kernel nuovo.

Kernelcare di default installa automaticamente le patch di sicurezza ogni 4 ore per cui se desiderate disattivare tale funzionalità, potete ricorrere alla modifica del file /etc/sysconfig/kcare/kcare.conf trasformando AUTO_UPDATE=True in AUTO_UPDATE=False

L’aggiornamento del sistema operativo, kernel compreso, senza riavvio

Se c’è una cosa che i sistemi GNU/Linux erano decenni avanti rispetto alla controparte Windows è la gestione del patching.
Un sistemista Windows passava nottate intere a fare il cosidetto WSUS, ossia l’applicazione delle patch di sicurezza e funzionalità, di Windows; senza contare che ogni tot numero di patch installate si doveva riavviare il sistema.

Organizzandosi in una pianificazione trimestrale o semestrale, si finiva per installare oltre la decina di aggiornamenti alla volta riguardanti solo il software Microsoft: Office, Silverlight, .Net Framework, SQL server, Exchange e ovviamente anche quelli relativi il sistema operativo. Poi rimanevano i programmi di terze parti come Adobe, Java. Un incubo.

Con le distribuzioni GNU/Linux tutto è molto più semplice, l’operazione di upgrade è molto rapida: potendo utilizzare un repository software interno, la discriminante la fa la CPU del server e la velocità del disco rigido. Un tempo sicuramente inferiore a quello del patching di Windows a parità di hardware.
Quindi il sistemista Linux rispetto a quello Windows specialmente per sistemi critici da presidiare, lavora meno ore.

L’unica cosa che probabilmente era migliorabile nelle distribuzioni del pinguino era la necessità di dover riavviare la macchina dopo l’installazione di un nuovo kernel.
Un unico riavvio, a fonte dei multipli riavvii necessari a Windows, che però era migliorabile ed eliminabile con un po’ di sforzo; tutto questo per portare l’uptime dei sistemi verso quell’agognato 99,99% su base annua che significa un downtime complessivo di poco inferiore ai 53 minuti all’anno. Possibile?

Oggi, nel 2019, installare le patch di sicurezza e di funzionalità in sistemi GNU/Linux è possibile anche senza riavvio, pur aggiornando il kernel.

Storicamente la prima soluzione, nata circa 10 anni fa, che consente di aggiornare il kernel di un server Linux senza interrompere i processi del sistema e senza riavvio, è Ksplice.
La tecnologia Ksplice fu acquisita da Oracle nel 2011 e implementata, a pagamento, sulla distribuzione Oracle Linux, derivata da Red Hat. Questo ha fatto sì che i maggiori produttori di distribuzioni Linux commerciali Red Hat e SuSE si mettessero in corsa per trovare una loro soluzione. Così sono nati Kpatch (di Red Hat) e Kgraph (di SuSE).
Dalle due soluzioni, ovviamente opensource, come sintesi nel 2016 è nata la versione di Canonical Ubuntu chiamata Livepatch.
Livepatch è gratuita per uso personale fino a 3 sistemi ed è attivabile tramite registrazione sul sito di Ubuntu: https://auth.livepatch.canonical.com/. In seguito è arrivata KernelCare di CloudLinux che ha permesso di attivare la tecnologia su CentOS, Debian e altre distribuzioni.