Gerenciando Parâmetros do Kernel em Runtime

Você pode ajustar algumas configurações do kernel no kernel em execução por meio do sistema de arquivos virtual.

Alguns arquivos virtuais sob /proc, e especialmente sob /proc/sys, são graváveis. Você pode ajustar as configurações no kernel em execução por meio desses arquivos. Por exemplo, para alterar o nome do host, você pode revisar o arquivo /proc/sys/kernel/hostname da seguinte forma:

echo www.mydomain.com | sudo tee /proc/sys/kernel/hostname

Outros arquivos utilizam valores binários ou boolianos, como a definição de encaminhamento IP, que é definida em /proc/sys/net/ipv4/ip_forward:

cat /proc/sys/net/ipv4/ip_forward
0
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
1

Use o comando sysctl para visualizar ou alterar valores sob o diretório /proc/sys.

Observação

Mesmo o root não pode ignorar as permissões de acesso a arquivos de entradas de arquivos virtuais em /proc. Se você alterar o valor de uma entrada somente leitura, como /proc/partitions, não haverá código do kernel para atender à chamada do sistema write().

Para obter mais informações, consulte as páginas do manual sysctl(8) e sysctl.d(5).

Listando Parâmetros e Valores Configuráveis do Kernel

Use o comando sysctl para procurar parâmetros do sistema kernel definidos no sistema de arquivos virtual /proc/sys. Os seguintes métodos de visualização de parâmetros de kernel e seus valores usando o comando sysctl estão disponíveis:

  1. Execute sysctl -a para visualizar todos os parâmetros de kernel disponíveis e seus valores para o kernel em execução.
    sysctl -a
    kernel.sched_child_runs_first = 0
    kernel.sched_min_granularity_ns = 2000000
    kernel.sched_latency_ns = 10000000
    kernel.sched_wakeup_granularity_ns = 2000000
    kernel.sched_shares_ratelimit = 500000
    ...
    Observação

    O caractere delimitador no nome de uma definição é um ponto (.) em vez de uma barra (/) em um caminho relativo a /proc/sys, como net.ipv4.ip_forward. Essa definição representa net/ipv4/ip_forward. Como outro exemplo, kernel.msgmax representa kernel/msgmax.

  2. Exiba uma configuração individual ou uma coleção de configurações especificando seu nome como o argumento para sysctl.
    sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    Para um conjunto mais amplo de definições, você pode especificar o nome de um conjunto de definições anteriormente na hierarquia de nomenclatura:
    sysctl net.ipv4.conf.all
    net.ipv4.conf.all.accept_local = 0
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.all.arp_accept = 0
    net.ipv4.conf.all.arp_announce = 0
    net.ipv4.conf.all.arp_filter = 0
    net.ipv4.conf.all.arp_ignore = 0
    net.ipv4.conf.all.arp_notify = 0
    net.ipv4.conf.all.bc_forwarding = 0
    net.ipv4.conf.all.bootp_relay = 0
    net.ipv4.conf.all.disable_policy = 0
    net.ipv4.conf.all.disable_xfrm = 0
    net.ipv4.conf.all.drop_gratuitous_arp = 0
    net.ipv4.conf.all.drop_unicast_in_l2_multicast = 0
    net.ipv4.conf.all.force_igmp_version = 0
    net.ipv4.conf.all.forwarding = 0
    net.ipv4.conf.all.igmpv2_unsolicited_report_interval = 10000
    net.ipv4.conf.all.igmpv3_unsolicited_report_interval = 1000
    net.ipv4.conf.all.ignore_routes_with_linkdown = 0
    net.ipv4.conf.all.log_martians = 0
    net.ipv4.conf.all.mc_forwarding = 0
    net.ipv4.conf.all.medium_id = 0
    net.ipv4.conf.all.promote_secondaries = 0
    net.ipv4.conf.all.proxy_arp = 0
    net.ipv4.conf.all.proxy_arp_pvlan = 0
    net.ipv4.conf.all.route_localnet = 0
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.all.secure_redirects = 1
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.all.shared_media = 1
    net.ipv4.conf.all.src_valid_mark = 0
    net.ipv4.conf.all.tag = 0
    

Atualizando Parâmetros do Kernel

Use o comando sysctl para atualizar parâmetros do sistema kernel definidos no sistema de arquivos virtual /proc/sys.

  1. Use o comando sysctl -w para definir o valor de um parâmetro de kernel.

    por exemplo, para alterar o valor da definição net.ipv4.ip_forward para ativado, use o seguinte formato de comando:

    sudo sysctl -w net.ipv4.ip_forward=1

    As alterações feitas dessa forma permanecem em vigor somente até que o sistema seja reinicializado.

  2. Para fazer alterações de configuração persistirem depois da reinicialização do sistema, adicione-as ao diretório /etc/sysctl.d como um arquivo de configuração.

    Qualquer alteração feita nos arquivos neste diretório terá efeito quando o sistema for reinicializado ou se você executar o comando sysctl --system, por exemplo:

    echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/ip_forward.conf
    grep -r ip_forward /etc/sysctl.d
    /etc/sysctl.d/ip_forward.conf:net.ipv4.ip_forward=1
  3. Para redefinir o sistema a fim de usar apenas os valores que estão configurados para carregar no momento da inicialização, use o comando sysctl --system.
    sudo sysctl --system
    * Applying /usr/lib/sysctl.d/00-system.conf ...
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    * Applying /usr/lib/sysctl.d/50-default.conf ...
    kernel.sysrq = 16
    kernel.core_uses_pid = 1
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.promote_secondaries = 1
    net.ipv4.conf.all.promote_secondaries = 1
    fs.protected_hardlinks = 1
    fs.protected_symlinks = 1
    * Applying /etc/sysctl.d/99-sysctl.conf ...
    * Applying /etc/sysctl.d/ip_forward.conf ...
    net.ipv4.ip_forward = 1
    * Applying /etc/sysctl.conf ...
    

    Observe que todas as entradas de configuração que você adicionou ao /etc/sysctl.d são lidas pelo sistema e aplicadas.