Kernel-Parameter zur Laufzeit verwalten

Sie können einige Kernel-Einstellungen im laufenden Kernel über das virtuelle Dateisystem anpassen.

Einige virtuelle Dateien unter /proc, insbesondere unter /proc/sys, sind schreibgeschützt. Sie können die Einstellungen im laufenden Kernel über diese Dateien anpassen. Beispiel: Um den Hostnamen zu ändern, können Sie die Datei /proc/sys/kernel/hostname wie folgt ändern:

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

Andere Dateien enthalten binäre oder boolesche Werte, wie die Einstellung der IP-Weiterleitung, die in /proc/sys/net/ipv4/ip_forward definiert ist:

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

Mit dem Befehl sysctl können Sie Werte im Verzeichnis /proc/sys anzeigen oder ändern.

Hinweis

Selbst root kann die Dateizugriffsberechtigungen virtueller Dateieinträge unter /proc nicht umgehen. Wenn Sie den Wert eines schreibgeschützten Eintrags wie /proc/partitions ändern, ist kein Kernel-Code vorhanden, um den Systemaufruf write() zu bedienen.

Weitere Informationen finden Sie in den Handbuchseiten sysctl(8) und sysctl.d(5).

Konfigurierbare Kernel-Parameter und -Werte auflisten

Mit dem Befehl sysctl können Sie Kernel-Systemparameter durchsuchen, die im virtuellen Dateisystem /proc/sys definiert sind. Die folgenden Methoden zum Anzeigen von Kernel-Parametern und deren Werten mit dem Befehl sysctl sind verfügbar:

  1. Führen Sie sysctl -a aus, um alle verfügbaren Kernel-Parameter und deren Werte für den laufenden Kernel anzuzeigen.
    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
    ...
    Hinweis

    Das Trennzeichen im Namen einer Einstellung ist ein Punkt (.) und kein Schrägstrich (/) in einem Pfad relativ zu /proc/sys, wie net.ipv4.ip_forward. Diese Einstellung stellt net/ipv4/ip_forward dar. Ein weiteres Beispiel: kernel.msgmax steht für kernel/msgmax.

  2. Zeigen Sie eine einzelne Einstellung oder eine Sammlung von Einstellungen an, indem Sie ihren Namen als Argument für sysctl angeben.
    sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    Für eine umfassendere Sammlung von Einstellungen können Sie den Namen einer Sammlung von Einstellungen angeben, die früher in der Benennungshierarchie enthalten sind:
    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
    

Kernel-Parameter aktualisieren

Verwenden Sie den Befehl sysctl, um Kernel-Systemparameter zu aktualisieren, die im virtuellen Dateisystem /proc/sys definiert sind.

  1. Mit dem Befehl sysctl -w können Sie den Wert für einen Kernel-Parameter festlegen.

    Beispiel: Um den Wert der Einstellung net.ipv4.ip_forward in "Aktiviert" zu ändern, verwenden Sie das folgende Befehlsformat:

    sudo sysctl -w net.ipv4.ip_forward=1

    Änderungen, die Sie auf diese Weise vornehmen, bleiben nur in Kraft, bis das System neu gestartet wird.

  2. Damit Konfigurationsänderungen auch nach dem Neustart des Systems beibehalten werden, fügen Sie sie als Konfigurationsdatei in das Verzeichnis /etc/sysctl.d ein.

    Alle Änderungen, die Sie an den Dateien in diesem Verzeichnis vornehmen, werden wirksam, wenn das System neu gestartet wird oder Sie den Befehl sysctl --system ausführen. Beispiel:

    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. Um das System so zurückzusetzen, dass nur die Werte verwendet werden, die zum Laden beim Booten konfiguriert sind, verwenden Sie den Befehl 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 ...
    

    Beachten Sie, dass alle Konfigurationseinträge, die Sie /etc/sysctl.d hinzugefügt haben, vom System gelesen und angewendet werden.