Configurando o Linux Core como local de despejo

Configurando O Linux Core Como Local De Despejo



O que é “Core Dump” no Linux?

Quando um processo sai inesperadamente, ele freqüentemente deixa para trás um “core dump” em seu sistema. Há uma mensagem relevante incluída com isso. Um núcleo serve como uma ferramenta de depuração e é uma imagem da memória que também inclui as informações de depuração. Se você é um usuário que não deseja depurar um programa, basta excluir o núcleo:

$ rm essencial

Você também pode deixá-lo intocado, pois o núcleo antigo é substituído se um novo for descartado. Você também pode desativar o core dumping com o seguinte comando:







$ diminuir -c 0

Podemos gerar os dumps principais sob demanda (por exemplo, por meio de um depurador) ou eles podem ser produzidos automaticamente na finalização. O kernel inicia dumps de núcleo como consequência da saída abrupta de um programa. Estes podem ser enviados para algum outro programa (como systemd-coredump) para operações adicionais.



Como geralmente é o caso, há uma compensação entre coletar os dados para melhor estabilidade e solução de problemas e o risco de revelar as informações confidenciais dos dados de depuração.



O que vamos cobrir?

Neste artigo, veremos como definir a localização dos core dumps no sistema operacional Ubuntu 20.04. Vamos começar agora.





Gerando um Core Dump

Vamos primeiro ver como podemos gerar um core dump. Para isso, usamos o comando kill do Linux. Primeiro, encontre o PID de um processo e, em seguida, envie um sinal de interrupção. Por exemplo, vamos iniciar o processo de hibernação e depois eliminá-lo com seu PID:

$ dorme 500

$ matar -s SIGTRAP $ ( pegada dorme )



Agora que você aprendeu como gerar um core dump, pode usá-lo nas próximas seções a seguir.

Onde eles vão?

O arquivo de dump principal é denominado core.pid por padrão e é criado no diretório de trabalho do aplicativo. Aqui, pid é o id do processo.

Com a ferramenta ulimit, você pode obter ou alterar os limites de recursos do sistema para o shell atual e quaisquer shells que venham depois dele. Para verificar ou configurar o limite de tamanho do arquivo principal, use o seguinte comando:

$ diminuir -c

Para evitar delimitar ou truncar o arquivo principal, certifique-se de que o limite esteja definido globalmente como “ilimitado” [1]. Isso pode ser feito em /etc/security/limits.conf adicionando a seguinte linha:

root - núcleo ilimitado

* - núcleo ilimitado

Agora, basta sair e entrar novamente para que os limites sejam aplicados à sua sessão.

Personalizando a localização do Core Dump

O comando “sysctl kernel.core_pattern” ou “/proc/sys/kernel/core_pattern” é normalmente usado para definir o local para onde vão os dumps do núcleo.

Insira o seguinte comando para ver as configurações do padrão principal atual:

$ gato / proc / sistema / núcleo / core_pattern

Normalmente, você encontrará o valor padrão listado como “core” aqui.

Usando “/proc/sys/kernel/core_pattern” para definir o local do core dump

Vamos redirecionar temporariamente os dumps principais para um novo local, digamos /tmp/dumps/core, usando o arquivo “/proc/sys/kernel/core_pattern” [2] [3]. Agora, siga os seguintes passos:

Passo 1 . Primeiro, crie um diretório para armazenar os dumps principais:

$ mkdir -p / tmp / jogar fora / núcleos /

Passo 2 . Dê as permissões necessárias para este diretório:

$ chmod a+x / tmp / jogar fora / núcleos /

etapa 3 . Agora, defina temporariamente o caminho do core dump:

$ eco '/tmp/dump/cores/core' | sudo tee / proc / sistema / núcleo / core_pattern

Novamente, defina globalmente o ulimit como ilimitado.

Aqui, podemos acrescentar algumas outras informações ao nome do arquivo, conforme mostrado a seguir:

$ eco '/tmp/dump/cores/core_%e.%p_%t' | sudo tee / proc / sistema / núcleo / core_pattern

Cada parâmetro usado aqui pode ser definido da seguinte forma:

% e: para executável Arquivo nome

% p: para processo Eu iria ou pid.

% t: para adicionando um carimbo de data/hora

Passo 4 . Em seguida, devemos alterar o arquivo “/etc/sysctl.conf” para aplicar permanentemente as configurações anteriores. Abra este arquivo:

$ sudo nano / etc / sysctl.conf

Agora, adicione a seguinte linha a este arquivo:

kernel.core_pattern = / tmp / jogar fora / núcleos / essencial

Além disso, em vez desta linha, você pode adicionar isto:

kernel.core_pattern= '/tmp/dump/cores/core_%e.%p_%t'

Isso é tudo o que precisamos fazer. Agora, gere um core dump conforme mencionado na seção “Gerando um Core Dump”. Depois disso, podemos verificar se nosso arquivo principal foi gerado ou não:

$ ls -eu / tmp / jogar fora / núcleos /

Usando o comando “Sysctl” para definir o local de despejo principal

Conforme mencionado anteriormente, também podemos usar o comando sysctl para o mesmo propósito. Vamos mudar o local do core dump e o formato do arquivo core:

Passo 1 . Crie um novo diretório e dê as permissões necessárias:

$ mkdir -p / tmp / meus despejos

$ chmod a+rwx / tmp / meus despejos

Passo 2 . Agora, basta executar o seguinte comando:

$ sudo sysctl -no kernel.core_pattern= / tmp / meus despejos / essencial_ % e. % p_ % t

etapa 3 . Agora, novamente, gere o dump principal como fizemos anteriormente. Depois disso, verifique se o arquivo principal foi gerado ou não:

$ ls -eu / tmp / meus despejos /

Nos sistemas Ubuntu, os despejos de memória geralmente são enviados para o Apport. Para sistemas baseados em Red Hat, pode ser encaminhado para a Automatic Bug Reporting Tool (ABRT). Inicialmente, eu estava enfrentando um problema ao configurar o local do dump principal, então tive que desabilitar completamente o Apport no Ubuntu 20.04. Talvez esse também seja o caso da Red Hat e outras.

Conclusão

Neste artigo, vimos como podemos personalizar a localização dos core dumps no sistema operacional Ubuntu 20.04. Os dumps principais podem ajudá-lo a descobrir o que está errado, mas são terríveis para vazar dados confidenciais. Core dumps devem ser desativados sempre que não forem necessários e ativados apenas quando absolutamente necessário. Em tal situação, confirme se os arquivos estão armazenados com segurança para que os usuários comuns não possam acessar os dados. Além disso, independentemente de sua decisão, você deve sempre testar sua configuração para garantir que ela funcione conforme o esperado.

Dumps de núcleo e configurações padrão são tratados de forma diferente por vários sistemas operacionais. Nos últimos tempos, a maioria dos sistemas Linux tem adotado o systemd, o que trouxe alguns pequenos ajustes nas regras. Dependendo de como seu sistema está configurado, pode ser necessário procurar dumps principais.