Atualização dinâmica do kernel Linux

É comum administradores Linux se vangloriarem da estabilidade de seus servidores dizendo que eles não foram reiniciados nos últimos anos. O uptime do sistema é uma espécie de medalha conseguida a duras penas na guerra santa entre os sistemas operacionais da Microsoft e o Linux.

Enquanto os sistemas operacionais da Microsoft carregam o fardo do seu passado sombrio de instabilidade, o Linux mantém fama oposta. Mas até que ponto não reiniciar o sistema por um longo período de tempo é algo a ser comemorado?

Se por um lado isto demonstra algumas virtudes do sistema operacional, por outro revela que o administrador de sistemas não está preocupado com a segurança de seus servidores. Falhas são encontradas com alguma frequência no kernel Linux, e uma atualização neste componente exige a reinicialização do sistema.

Uma consulta na Errata do Red Hat Enterprise Linux 7 mostra que, desde seu lançamento, em junho de 2014, foram disponibilizadas 9 atualizações para o kernel, sendo 8 consideradas importantes e 1 moderada. Ou seja, desconsiderando uma análise detalhada de cada falha e do cenário, teríamos que reiniciar os sistemas em média uma vez por mês, e, portanto, qualquer uptime acima de 30 dias em servidores com esta distribuição já poderia ser considerado perigoso.

Pensando justamente em evitar a reinicialização dos servidores e assim justificar nosso glorioso uptime, a Red Hat disponibilizou como Technology Preview no Red Hat Enteprise Linux 7 o kpatch – um projeto Open Source para atualização dinâmica do kernel. Por atualização dinâmica entende-se aplicar as correções de segurança no kernel em execução.

Essencialmente ele funciona no nível das funções do kernel, substituindo uma função por outra. Usando a ferramenta kpatch-build, converte-se o tradicional arquivo de patch no formato diff em um módulo do kernel. Este processo compila o kernel com e sem o patch e depois compara os binários, gerando um módulo que contém a nova versão da função que será substituída.

O módulo principal kpatch.ko fornece informações sobre a função original que será substituída e os ponteiros correspondentes para a função substituta. Este módulo então usa a função ftrace() – que é iniciada por todas as funções do kernel – para fazer o apontamento da antiga função para a nova.

Apesar do processo de construção do módulo do patch for algo relativamente demorado e complexo, não precisamos nos preocupar com ele. Estes módulos deverão vir pré-compilados e provavelmente serão instalados durante o procedimento normal de atualização do sistema.

O kpatch não é o único, e muito menos o primeiro. A ideia de atualização dinâmica do kernel foi colocada em prática primeiramente por uma empresa chamada Ksplice, Inc. Seu produto de mesmo nome foi lançado em abril de 2008 e é considerado estável para ambientes de produção já a alguns anos. Entretanto, após a compra da empresa pela Oracle, ela decidiu remover seu suporte para a distribuição da Red Hat e anunciar este recurso como um diferencial do Oracle Linux.

A SUSE também tem seu próprio projeto Open Source de atualização dinâmica do kernel chamado KGraft.

Agora voltando ao assunto, o kpatch ainda não é considerado estável para ambientes de produção. Entretanto, seu ritmo de desenvolvimento é animador. Provavelmente teremos a oportunidade de atualizarmos nosso kernel dinamicamente ainda na versão 7 do Red Hat Enterprise Linux.

O vídeo a seguir é uma demonstração do funcionamento do kpatch em um sistema Red Hat Enterprise Linux 7.

Referências

Jennings, Seth. Introducing kpatch: Dynamic Kernel Patching. Red Hat Enterprise Linux Blog. Acessado em 13-02-2015.
GitHub. kpatch – dynamic kernel patching. GitHub. Acessado em 13-02-2015.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *