11 Kernel Live Patching com KLP #
Este documento descreve os princípios básicos da tecnologia Kernel Live Patching (KLP) e apresenta as diretrizes de uso para o serviço SLE Live Patching.
O KLP possibilita a aplicação das atualizações de segurança mais recentes aos kernels do Linux sem reinicialização. Esse procedimento maximiza o tempo de atividade e a disponibilidade do sistema, o que é especificamente crucial para sistemas de extrema importância.
As informações contidas neste documento são relacionadas às arquiteturas AMD64/Intel 64, POWER e IBM Z.
11.1 Vantagens do Kernel Live Patching #
O KLP oferece vários benefícios.
Manter um grande número de servidores automaticamente atualizados é essencial para que as organizações obtenham ou mantenham determinadas certificações de conformidade. O KLP pode ajudar a atingir a conformidade e reduzir a necessidade de janelas de manutenção dispendiosas.
As empresas que trabalham com contratos de nível de serviço devem garantir um nível específico de acessibilidade e tempo de atividade do sistema. O Live Patching possibilita a aplicação de patches aos sistemas sem causar tempo de espera.
Como o KLP faz parte do mecanismo de atualização do sistema padrão, não há necessidade de treinamento especializado nem de introdução de rotinas de manutenção complicadas.
11.2 Visão geral do Kernel Live Patching #
Os patches dinâmicos do kernel são oferecidos como pacotes com código modificado, separados do pacote do kernel principal. Os patches dinâmicos são cumulativos, portanto, o patch mais recente contém todas as correções dos anteriores no pacote do kernel. Cada pacote ativo do kernel está vinculado à revisão exata do kernel para a qual ele foi gerado. O número da versão do pacote ativo do kernel aumenta a cada adição de correções.
Para determinar o status da aplicação de patch do kernel, use o comando klp -v
patches
. A saída do comando uname
não muda para kernels com patch aplicado.
Os patches dinâmicos contêm apenas correções críticas e não substituem as atualizações regulares do kernel que exigem uma reinicialização. Considere os patches dinâmicos como medidas temporárias que protegem o kernel até que uma atualização apropriada do kernel e uma reinicialização sejam executadas.
O diagrama abaixo ilustra o relacionamento geral entre os patches dinâmicos e as atualizações do kernel. É possível ver a lista de CVEs e os relatórios de defeitos abordados pelo patch dinâmico ativo no momento usando o comando klp -v
patches
.
É possível ter várias versões do pacote do kernel instaladas junto com os patches dinâmicos. Esses pacotes não entram em conflito. Você pode instalar os pacotes do kernel atualizados junto com os patches dinâmicos do kernel em execução. Nesse caso, talvez seja solicitado para você reinicializar o sistema. Os usuários com assinaturas do SLE Live Patching estão qualificados para suporte técnico, desde que haja atualizações de patch ativas para o kernel em execução (consulte a Seção 11.5.1, “Verificando a data de vencimento do patch dinâmico”).
Com o KLP ativado, todas as atualizações de kernel vêm com um pacote de patch dinâmico. Esse patch dinâmico não contém nenhuma correção e funciona como uma propagação para patches dinâmicos futuros do kernel correspondente. Esses patches de propagação vazios são chamados de initial patches
.
11.2.1 Escopo do Kernel Live Patching #
O escopo do SLE Live Patching inclui correções de vulnerabilidades de nível 7 ou superior do SUSE Common Vulnerability Scoring System (CVSS; o SUSE CVSS é baseado no sistema CVSS v3.0) e correções de bugs relacionadas à estabilidade do sistema ou corrupção de dados. No entanto, talvez não seja tecnicamente viável criar patches dinâmicos para todas as correções que se enquadram nas categorias especificadas. Portanto, a SUSE reserva o direito de ignorar as correções em situações em que a criação de um patch dinâmico do kernel não seja possível por motivos técnicos. Atualmente, mais de 95% das correções qualificadas são lançadas como patches dinâmicos. Para obter mais informações sobre o CVSS (a base para a classificação SUSE CVSS), consulte Common Vulnerability Scoring System SIG.
11.2.2 Limitações do Kernel Live Patching #
O KLP envolve a substituição de funções e o processamento adequado da substituição de conjuntos de funções interdependentes. Isso é feito redirecionando as chamadas do código antigo para o código atualizado em um local de memória diferente. As mudanças feitas nas estruturas de dados complicam ainda mais a situação, pois os dados permanecem no local e não podem ser estendidos ou reinterpretados. Existem técnicas que permitem a alteração indireta das estruturas de dados, mas determinadas correções não podem ser convertidas em patches dinâmicos. Nessa situação, a reinicialização do sistema é a única maneira de aplicar as correções.
11.3 Ativando o Kernel Live Patching por meio do YaST #
Para ativar o KLP no sistema, você precisa ter assinaturas ativas do SLES e do SLE Live Patching. Visite SUSE Customer Center para verificar o status de suas assinaturas e obter um código de registro para a assinatura do SLE Live Patching.
Para ativar o Kernel Live Patching no sistema, siga estas etapas:
Execute o comando
yast2 registration
e clique em .Selecione
na lista de extensões disponíveis e clique em .Confirme os termos da licença e clique em
.Digite o código de registro do SLE Live Patching e clique em
.Confira o
e os selecionados. Os padrõesLive Patching
eSLE Live Patching Lifecycle Data
devem ser selecionados automaticamente para instalação junto com pacotes adicionais para atender às dependências.Clique em
para concluir a instalação. Esse procedimento instala os componentes base do Kernel Live Patching no sistema, o patch dinâmico inicial e as dependências necessárias.
11.4 Ativando o Kernel Live Patching pela linha de comando #
Para ativar o Kernel Live Patching, você precisa ter assinaturas ativas do SLES e do SLES Live Patching. Visite SUSE Customer Center para verificar o status de suas assinaturas e obter um código de registro para a assinatura do SLES Live Patching.
Executar
sudo SUSEConnect --list-extensions
. Observe o comando de ativação exato do SLES Live Patching. Exemplo de saída de comando (abreviado):$ SUSEConnect --list-extensions ... SUSE Linux Enterprise Live Patching 15 SP6 x86_64 Activate with: SUSEConnect -p sle-module-live-patching/15.6/x86_64 \ -r ADDITIONAL REGCODE
Ative o SLES Live Patching usando o comando obtido seguido de
-r LIVE_PATCHING_REGISTRATION_CODE
, por exemplo:SUSEConnect -p sle-module-live-patching/15.6/x86_64 \ -r LIVE_PATCHING_REGISTRATION_CODE
Instale os pacotes e as dependências necessários usando o comando
zypper install -t pattern lp_sles
Neste ponto, o patch dinâmico já foi aplicado ao sistema.
Veja como funciona o processo nos bastidores: quando o sistema de instalação de pacotes detecta que há um kernel instalado que precisa de patch dinâmico e que existe um patch dinâmico para ele no canal de software, o sistema seleciona esse patch para instalação. Em seguida, o kernel recebe as correções de patch dinâmico como parte da instalação do pacote. O kernel recebe o patch dinâmico mesmo antes da conclusão da instalação do produto.
11.5 Executando o Kernel Live Patching #
Os patches dinâmicos do kernel são instalados como parte das atualizações regulares do sistema. No entanto, há várias informações que você deve saber.
O kernel recebe patches dinâmicos se um pacote kernel-livepatch-* foi instalado para o kernel em execução. Você pode usar o comando
zypper se --details kernel-livepatch-*
para verificar se os pacotes de patch dinâmico do kernel estão instalados no seu sistema.Quando o pacote kernel-default está instalado, o gerenciador de atualizações solicita para você reinicializar o sistema. Para evitar que essa mensagem apareça, você pode remover essas atualizações do kernel da operação de aplicação de patches. Para fazer isso, você pode adicionar bloqueios de pacote com o Zypper. O SUSE Manager também possibilita filtrar o conteúdo do canal (consulte Live Patching with SUSE Manager).
Você pode verificar o status da aplicação de patches usando o comando
klp status
. Para examinar os patches instalados, execute o comandoklp -v patches
.Mesmo que haja vários pacotes de kernel instalados no sistema, lembre-se de que apenas um deles estará em execução em um determinado momento. Da mesma forma, pode haver vários pacotes de patches dinâmicos instalados, mas apenas um patch dinâmico será carregado no kernel.
O patch dinâmico está incluído no
initrd
. Isso significa que, no caso de uma reinicialização inesperada, o sistema já vem com as correções de patch dinâmico aplicadas, portanto, não há necessidade de executar a aplicação de patches novamente.
11.5.1 Verificando a data de vencimento do patch dinâmico #
Verifique se o lifecycle-data-sle-module-live-patching está instalado e execute o comando zypper lifecycle
. Você deve ver as datas de vencimento dos patches dinâmicos na seção Package end of support if
different from product
(Fim do suporte do pacote se diferente do produto) da saída.
Cada patch dinâmico recebe atualizações por um ano a partir do lançamento do pacote de kernel subjacente. A página Maintained kernels, patch updates and lifecycle (Kernels mantidos, atualizações de patch e ciclo de vida) permite verificar as datas de vencimento com base na versão do kernel em execução sem instalar a extensão do produto.
11.6 Solucionando problemas do Kernel Live Patching #
11.6.1 Downgrade manual do patch #
Se o patch dinâmico mais recente for problemático, você poderá fazer downgrade do patch dinâmico instalado no momento para a versão anterior. Recomendamos fazer o downgrade do patch antes que o sistema comece a apresentar problemas. Lembre-se de que um sistema com avisos de kernel ou rastreamentos de erro de kernel no registro do sistema pode não ser adequado para o procedimento de downgrade de patch. Se você não tiver certeza se o sistema atende aos requisitos para um downgrade de patch, contate o Suporte Técnico da SUSE para obter ajuda.
Identifique o patch dinâmico em execução usando o comando
klp -v patches
. Você pode ver o patch que está em execução na linha que começa comRPM:
. Por exemplo:RPM: kernel-livepatch-6_4_0-150600_9-default-1-150600.2.36.x86_64
O
6_4_0-150600_9-default
no exemplo acima indica a versão exata do kernel em execução.Use o comando
zypper search -s kernel-livepatch-RUNNING_KERNEL_VERSION-default
para pesquisar versões anteriores do patch. O comando retorna uma lista de versões de pacote disponíveis. Para cada novo lançamento de pacote de patch dinâmico, lembre-se de que o número da versão aumenta em um. Escolha a versão com um número abaixo da versão atual.Instale a versão desejada com o comando
zypper in --oldpackage kernel-livepatch-RUNNING_KERNEL_VERSION-default=DESIRED_VERSION
.