Gestione dei parametri del kernel in runtime

È possibile regolare alcune impostazioni del kernel nel kernel in esecuzione tramite il file system virtuale.

Alcuni file virtuali in /proc, in particolare in /proc/sys, sono scrivibili. È possibile regolare le impostazioni nel kernel in esecuzione attraverso questi file. Ad esempio, per modificare il nome host, è possibile rivedere il file /proc/sys/kernel/hostname come indicato di seguito.

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

Altri file assumono valori binari o booleani, come l'impostazione dell'inoltro IP, definita in /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

Usare il comando sysctl per visualizzare o modificare i valori nella directory /proc/sys.

Nota

Anche root non può ignorare le autorizzazioni di accesso ai file delle voci di file virtuali in /proc. Se si modifica il valore di una voce di sola lettura, ad esempio /proc/partitions, non esiste alcun codice kernel per servire la chiamata di sistema write().

Per ulteriori informazioni, vedere le pagine del manuale sysctl(8) e sysctl.d(5).

Elenco dei valori e dei parametri del kernel configurabili

Utilizzare il comando sysctl per sfogliare i parametri del sistema kernel definiti nel file system virtuale /proc/sys. Sono disponibili i seguenti metodi di visualizzazione dei parametri del kernel e dei relativi valori mediante il comando sysctl:

  1. Eseguire sysctl -a per visualizzare tutti i parametri kernel disponibili e i relativi valori per il kernel in esecuzione.
    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
    ...
    Nota

    Il carattere delimitatore nel nome di un'impostazione è un punto (.) anziché una barra (/) in un percorso relativo a /proc/sys, ad esempio net.ipv4.ip_forward. Questa impostazione rappresenta net/ipv4/ip_forward. Come altro esempio, kernel.msgmax rappresenta kernel/msgmax.

  2. Visualizzare una singola impostazione o una raccolta di impostazioni specificandone il nome come argomento a sysctl.
    sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    Per una più ampia raccolta di impostazioni, è possibile specificare il nome di una raccolta di impostazioni in precedenza nella gerarchia di denominazione:
    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
    

Aggiornamento dei parametri kernel

Utilizzare il comando sysctl per aggiornare i parametri del sistema kernel definiti nel file system virtuale /proc/sys.

  1. Utilizzare il comando sysctl -w per impostare il valore per un parametro kernel.

    Ad esempio, per modificare il valore dell'impostazione net.ipv4.ip_forward in abilitato, utilizzare il seguente formato di comando:

    sudo sysctl -w net.ipv4.ip_forward=1

    Le modifiche apportate in questo modo rimangono in vigore solo fino al reboot del sistema.

  2. Per rendere persistenti le modifiche alla configurazione dopo il reboot del sistema, aggiungerle alla directory /etc/sysctl.d come file di configurazione.

    Tutte le modifiche apportate ai file in questa directory hanno effetto al reboot del sistema o all'esecuzione del comando sysctl --system, ad esempio:

    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. Per reimpostare il sistema in modo che utilizzi solo i valori configurati per il caricamento in fase di boot, utilizzare il 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 ...
    

    Si noti che tutte le voci di configurazione aggiunte a /etc/sysctl.d vengono lette dal sistema e applicate.