Dentro Part 13 desta série LFCS (Linux Foundation Certified Sysadmin) explicamos como usar o GRUB para modificar o comportamento do sistema passando opções ao kernel para o processo de inicialização em andamento.

Da mesma forma, você pode usar a linha de comando em um sistema Linux em execução para alterar determinados parâmetros do kernel de tempo de execução como uma modificação única ou permanentemente editando um arquivo de configuração.

Assim, você tem permissão para habilitar ou desabilitar os parâmetros do kernel dinamicamente sem muita dificuldade quando for necessário devido a uma mudança necessária na maneira como o sistema deve operar.

Apresentando o sistema de arquivos /proc

A especificação mais recente do Filesystem Hierarchy Standard indica que /proc representa o método padrão para lidar com informações de processo e sistema, bem como outras informações de kernel e memória. Particularmente, /proc/sys é onde você pode encontrar todas as informações sobre dispositivos, drivers e alguns recursos do kernel.

A verdadeira estrutura interna de /proc/sys depende muito do kernel que está sendo usado, mas é provável que você encontre os seguintes diretórios dentro. Por sua vez, cada um deles conterá outros subdiretórios onde são mantidos os valores de cada categoria de parâmetro:

  1. dev: parâmetros para dispositivos específicos conectados à máquina.
  2. fs: configuração do sistema de arquivos (cotas e inodes, por exemplo).
  3. kernel: configuração específica do kernel.
  4. net: configuração de rede.
  5. vm: uso da memória virtual do kernel.

Para modificar os parâmetros de tempo de execução do kernel, usaremos o sysctl. O número exato de parâmetros que podem ser modificados pode ser visualizado com:

# sysctl -a | wc -l

Se você quiser ver a lista completa de parâmetros do Kernel, basta fazer:

# sysctl -a 

Como a saída do comando acima consistirá em MUITAS linhas, podemos usar um pipeline seguido por menos para inspecioná-lo com mais cuidado:

# sysctl -a | less

Vamos dar uma olhada nas primeiras linhas. Observe que os primeiros caracteres em cada linha correspondem aos nomes dos diretórios dentro /proc/sys:

Compreender o sistema de arquivos Linux /proc

Por exemplo, a linha destacada:

dev.cdrom.info = drive name:        	sr0

indica que sr0 é um alias para a unidade óptica. Em outras palavras, é assim que o kernel sees essa unidade e usa esse nome para se referir a ela.

Na seção a seguir, explicaremos como alterar outros more important parâmetros de tempo de execução do kernel no Linux.

Como alterar ou modificar os parâmetros de tempo de execução do kernel Linux

Com base no que explicamos até agora, é fácil ver que o nome de um parâmetro corresponde à estrutura de diretórios dentro /proc/sys onde pode ser encontrado.

Por exemplo:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Verifique os parâmetros do kernel Linux

Dito isso, podemos visualizar o valor de um parâmetro específico do kernel do Linux usando sysctl pelo nome do parâmetro ou lendo o arquivo associado:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Verifique os parâmetros do kernel Linux
Verifique os parâmetros do kernel Linux

Definir ou modificar parâmetros do kernel Linux

Para definir o valor de um parâmetro do kernel, também podemos usar sysctlmas usando o -w e seguido pelo nome do parâmetro, o sinal de igual e o valor desejado.

Outro método consiste em utilizar echo para substituir o arquivo associado ao parâmetro. Em outras palavras, os métodos a seguir são equivalentes para desabilitar a funcionalidade de encaminhamento de pacotes em nosso sistema (que, aliás, deve ser o valor padrão quando uma caixa não deve passar tráfego entre redes):

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

É importante notar que os parâmetros do kernel que são definidos usando sysctl só será aplicado durante a sessão atual e desaparecerá quando o sistema for reinicializado.

Para definir esses valores permanentemente, edite /etc/sysctl.conf os valores desejados. Por exemplo, para desabilitar o encaminhamento de pacotes em /etc/sysctl.conf certifique-se de que esta linha apareça no arquivo:

net.ipv4.ip_forward=0

Em seguida, execute o seguinte comando para aplicar as alterações à configuração em execução.

# sysctl -p

Outros exemplos de parâmetros importantes de tempo de execução do kernel são:

fs.file-max especifica o número máximo de identificadores de arquivo que o kernel pode alocar para o sistema. Dependendo do uso pretendido do seu sistema (web/banco de dados/servidor de arquivos, para citar alguns exemplos), você pode querer alterar esse valor para atender às necessidades do sistema.

Caso contrário, você receberá um Too many open files mensagem de erro na melhor das hipóteses e pode impedir que o sistema operacional inicialize na pior das hipóteses.

Se devido a um erro inocente você se encontrar nesta última situação, inicialize no modo de usuário único (como explicado na Parte 13 – Configurar e solucionar problemas do Linux Grub Boot Loader) e edite /etc/sysctl.conf conforme instruído anteriormente. Para definir a mesma restrição por usuário, consulte a Parte 14 – Monitorar e definir o uso do limite de processo do Linux desta série.

kernel.sysrq é usado para habilitar o SysRq no teclado (também conhecido como tecla de impressão da tela) para permitir que determinadas combinações de teclas acionem ações de emergência quando o sistema não responder.

O valor padrão (16) indica que o sistema irá honrar o Alt+SysRq+key e execute as ações listadas no sysrq.c documentação encontrada em kernel.org (onde chave é uma letra no intervalo bz). Por exemplo, Alt+SysRq+b irá reiniciar o sistema com força (use isso como último recurso se o seu servidor não responder).

Aviso! Não tente pressionar essa combinação de teclas em uma máquina virtual, pois isso pode forçar a reinicialização do sistema host!

Quando definido para 1, net.ipv4.icmp_echo_ignore_all irá ignorar os pedidos de ping e descartá-los no nível do kernel. Isso é mostrado na imagem abaixo – observe como as solicitações de ping são perdidas após definir este parâmetro do kernel:

Bloquear solicitações de ping no Linux
Bloquear solicitações de ping no Linux

Uma maneira melhor e mais fácil de definir parâmetros de tempo de execução individuais é usar .confestá dentro /etc/sysctl.dagrupando-os por categorias.

Por exemplo, em vez de definir net.ipv4.ip_forward=0 e net.ipv4.icmp_echo_ignore_all=1 dentro /etc/sysctl.confpodemos criar um novo arquivo chamado net.conf lado de dentro /etc/sysctl.d:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Se você optar por usar essa abordagem, não se esqueça de remover essas mesmas linhas do /etc/sysctl.conf.

Resumo

Neste artigo, explicamos como modificar os parâmetros de tempo de execução do kernel, persistentes e não persistentes, usando sysctl, /etc/sysctl.confe arquivos dentro /etc/sysctl.d.

No sysctl docs você pode encontrar mais informações sobre o significado de mais variáveis. Esses arquivos representam a fonte mais completa de documentação sobre os parâmetros que podem ser definidos via sysctl.

Você achou este artigo útil? Nós certamente esperamos que você tenha feito isso. Não hesite em nos informar se tiver alguma dúvida ou sugestão para melhorar.