Introdução
Neste laboratório, você aprenderá como verificar o status de taint (contaminação) do kernel Linux. Exploraremos como determinar se o kernel está sendo executado em um estado potencialmente não suportado ou modificado, examinando o arquivo /proc/sys/kernel/tainted.
Após a verificação inicial, você aprenderá como verificar as razões específicas para qualquer taint do kernel, inspecionando o buffer de mensagens do kernel usando o comando dmesg. Finalmente, você explorará como inspecionar os símbolos do kernel usando /proc/kallsyms, o que pode ser útil para entender o estado do kernel e os módulos carregados.
Verificar o status de taint com cat /proc/sys/kernel/tainted
Nesta etapa, aprenderemos como verificar o status de "taint" (contaminação) do kernel Linux. O kernel pode se tornar "tainted" se módulos não-GPL (General Public License) forem carregados ou se certos eventos ocorrerem que possam indicar um problema ou uma configuração não padrão. Verificar o status de taint é uma maneira rápida de ver se seu kernel está sendo executado em um estado potencialmente não suportado ou modificado.
Podemos verificar o status de taint do kernel lendo o conteúdo de um arquivo especial no sistema de arquivos /proc. O sistema de arquivos /proc é um sistema de arquivos virtual que fornece informações sobre processos e outras informações do sistema.
Abra seu terminal, caso ainda não esteja aberto. Você pode fazer isso clicando no ícone Xfce Terminal no lado esquerdo da área de trabalho.
Agora, use o comando cat para exibir o conteúdo do arquivo /proc/sys/kernel/tainted. O comando cat é usado para concatenar e exibir o conteúdo do arquivo.
Digite o seguinte comando e pressione Enter:
cat /proc/sys/kernel/tainted
A saída será um único número.
0
- Um valor de
0significa que o kernel não está tainted. - Qualquer valor diferente de zero indica que o kernel está tainted. O número específico é uma máscara de bits onde cada bit representa uma razão diferente para o taint.
Por exemplo, se a saída fosse 1, indicaria que um módulo proprietário foi carregado. Se fosse 4, poderia indicar que um aviso do kernel ocorreu.
Em nosso ambiente LabEx, o kernel não deve estar tainted inicialmente, então você deve ver 0. Este é um bom sinal, indicando um estado de kernel limpo.
Entender o status de taint é importante para depurar problemas do kernel ou garantir que você está executando uma configuração de kernel padrão.
Clique em Continuar para prosseguir para a próxima etapa.
Verificar detalhes de taint no dmesg
Na etapa anterior, verificamos o status de taint do kernel usando /proc/sys/kernel/tainted. Embora esse arquivo nos forneça um código numérico indicando se o kernel está tainted, ele não nos diz por que ele está tainted. Para obter informações mais detalhadas sobre as mensagens do kernel, incluindo as razões para o tainting, podemos usar o comando dmesg.
O comando dmesg é usado para examinar o buffer de anel do kernel (kernel ring buffer). Este buffer armazena mensagens do kernel, incluindo informações do driver do dispositivo, erros e avisos. Quando o kernel se torna tainted, uma mensagem geralmente é registrada no buffer de anel explicando a razão.
Abra seu terminal, caso ainda não esteja aberto.
Agora, digite o seguinte comando e pressione Enter:
dmesg
Este comando produzirá uma quantidade potencialmente grande de texto, mostrando todas as mensagens do kernel desde que o sistema foi iniciado.
Para encontrar informações específicas relacionadas ao tainting, podemos combinar dmesg com o comando grep. grep é uma ferramenta poderosa para pesquisar padrões de texto. Vamos pesquisar linhas contendo a palavra "taint".
Digite o seguinte comando e pressione Enter:
dmesg | grep taint
O símbolo | é chamado de pipe (tubo). Ele pega a saída do comando à esquerda (dmesg) e a envia como entrada para o comando à direita (grep). Portanto, este comando primeiro obtém todas as mensagens do kernel e, em seguida, as filtra para mostrar apenas as linhas que contêm a palavra "taint".
Se o seu kernel não estiver tainted (como esperado neste ambiente), este comando pode não produzir nenhuma saída. Isso é normal e indica que nenhum evento de taint foi registrado.
Se o kernel estivesse tainted, você veria linhas semelhantes a esta (a mensagem exata depende da razão para o tainting):
[ ... ] kernel: Linux version ... (tainted: G)
[ ... ] kernel: Disabling lock debugging due to kernel taint
A parte (tainted: G) indica que o kernel está tainted, e a letra G significa especificamente que um módulo proprietário foi carregado. Outras letras indicam diferentes razões de taint (por exemplo, P para módulo proprietário, F para carregamento forçado de módulo, R para módulo de licença restrita, etc.).
Usar dmesg | grep taint é uma etapa crucial no diagnóstico de problemas do kernel quando /proc/sys/kernel/tainted mostra um valor diferente de zero.
Clique em Continuar para prosseguir.
Inspecionar símbolos do kernel com cat /proc/kallsyms
Nesta etapa, exploraremos outro arquivo importante no sistema de arquivos /proc: /proc/kallsyms. Este arquivo contém os endereços e nomes de todos os símbolos do kernel (funções e variáveis) que não são explicitamente marcados como static. É uma ferramenta crucial para depuração do kernel e compreensão do funcionamento interno do kernel.
O arquivo /proc/kallsyms lista cada símbolo do kernel com seu endereço de memória, tipo e nome. O formato de cada linha é tipicamente:
<address> <type> <symbol_name>
<address>: O endereço de memória onde o símbolo está localizado.<type>: Um único caractere indicando o tipo de símbolo (por exemplo,touTpara texto/código,douDpara dados,bouBpara BSS,rouRpara dados somente leitura,wouWpara símbolo fraco,Upara símbolo indefinido). Letras minúsculas indicam um símbolo local, letras maiúsculas indicam um símbolo global.<symbol_name>: O nome da função ou variável do kernel.
Abra seu terminal, caso ainda não esteja aberto.
Agora, vamos visualizar o conteúdo de /proc/kallsyms usando o comando cat. Esteja ciente de que este arquivo é muito grande, então a saída rolará rapidamente.
Digite o seguinte comando e pressione Enter:
cat /proc/kallsyms
Você verá uma longa lista de linhas, cada uma representando um símbolo do kernel.
...
ffffffff... T sys_read
ffffffff... T sys_write
ffffffff... D jiffies
...
Para tornar esta saída mais gerenciável e encontrar símbolos específicos, podemos novamente usar grep. Por exemplo, vamos pesquisar símbolos relacionados a "schedule" (agendamento), que é uma função central do kernel para gerenciar processos.
Digite o seguinte comando e pressione Enter:
cat /proc/kallsyms | grep schedule
Isso filtrará a saída para mostrar apenas as linhas contendo a palavra "schedule".
ffffffff... T schedule
ffffffff... T schedule_timeout
ffffffff... T schedule_hrtimeout_range
...
Esta saída filtrada é muito mais fácil de ler e permite que você encontre os endereços e tipos de funções ou variáveis específicas do kernel nas quais você possa estar interessado.
Explorar /proc/kallsyms fornece informações valiosas sobre a estrutura do kernel e as funções disponíveis. É um recurso fundamental para qualquer pessoa que faça desenvolvimento de kernel ou depuração avançada.
Você agora aprendeu como verificar o status de taint do kernel e inspecionar símbolos do kernel usando o sistema de arquivos /proc e comandos básicos do Linux.
Clique em Continuar para concluir este laboratório.
Resumo
Neste laboratório, aprendemos como verificar o status de taint (contaminação) do kernel Linux. Começamos usando o comando cat /proc/sys/kernel/tainted para determinar rapidamente se o kernel está tainted, entendendo que um valor de 0 indica um estado limpo e qualquer valor diferente de zero significa um kernel tainted, com o número específico representando uma máscara de bits (bitmask) das razões.
Em seguida, prosseguimos para verificar os detalhes de qualquer taint, examinando o buffer de mensagens do kernel usando dmesg. Isso nos permite ver mensagens específicas relacionadas aos eventos que causaram o kernel a se tornar tainted, fornecendo mais contexto do que apenas o código numérico. Finalmente, exploramos como inspecionar símbolos do kernel usando cat /proc/kallsyms, o que pode ser útil para depuração avançada e compreensão do estado interno do kernel, embora esta etapa não tenha sido totalmente detalhada no conteúdo fornecido.



