Gestion des paramètres du noyau lors de l'exécution

Vous pouvez ajuster certains paramètres du noyau dans le noyau en cours d'exécution via le système de fichiers virtuel.

Certains fichiers virtuels sous /proc, et en particulier sous /proc/sys, sont accessibles en écriture. Vous pouvez ajuster les paramètres dans le noyau en cours d'exécution via ces fichiers. Par exemple, pour modifier le nom d'hôte, vous pouvez réviser le fichier /proc/sys/kernel/hostname comme suit :

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

D'autres fichiers prennent des valeurs binaires ou booléennes, telles que le paramètre de transfert IP, défini dans /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

Utilisez la commande sysctl pour afficher ou modifier les valeurs dans le répertoire /proc/sys.

Remarque

Même root ne peut pas contourner les droits d'accès aux fichiers des entrées de fichier virtuel sous /proc. Si vous modifiez la valeur d'une entrée en lecture seule telle que /proc/partitions, aucun code de noyau n'existe pour traiter l'appel système write().

Pour plus d'informations, reportez-vous aux pages de manuel sysctl(8) et sysctl.d(5).

Liste des paramètres et valeurs de noyau configurables

Utilisez la commande sysctl pour parcourir les paramètres du système de noyau définis dans le système de fichiers virtuel /proc/sys. Les méthodes suivantes d'affichage des paramètres du noyau et de leurs valeurs à l'aide de la commande sysctl sont disponibles :

  1. Exécutez sysctl -a pour afficher tous les paramètres de noyau disponibles et leurs valeurs pour le noyau en cours d'exécution.
    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
    ...
    Remarque

    Le caractère délimiteur dans le nom d'un paramètre est un point (.) plutôt qu'une barre oblique (/) dans un chemin relatif à /proc/sys, tel que net.ipv4.ip_forward. Ce paramètre représente net/ipv4/ip_forward. Autre exemple : kernel.msgmax représente kernel/msgmax.

  2. Affichez un paramètre individuel ou un ensemble de paramètres en indiquant son nom en tant qu'argument de sysctl.
    sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    Pour un ensemble plus large de paramètres, vous pouvez spécifier le nom d'un ensemble de paramètres précédemment dans la hiérarchie de noms :
    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
    

Mise à jour des paramètres du noyau

Utilisez la commande sysctl pour mettre à jour les paramètres du système de noyau définis dans le système de fichiers virtuel /proc/sys.

  1. Utilisez la commande sysctl -w pour définir la valeur d'un paramètre de noyau.

    par exemple, pour définir la valeur du paramètre net.ipv4.ip_forward sur Enabled, utilisez le format de commande suivant :

    sudo sysctl -w net.ipv4.ip_forward=1

    Les modifications que vous apportez de cette manière ne restent en vigueur que jusqu'à la réinitialisation du système.

  2. Pour que les modifications de configuration persistent après la réinitialisation du système, ajoutez-les au répertoire /etc/sysctl.d en tant que fichier de configuration.

    Toutes les modifications apportées aux fichiers de ce répertoire prennent effet lors de la réinitialisation du système ou de l'exécution de la commande sysctl --system, par exemple :

    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. Pour réinitialiser le système afin qu'il n'utilise que les valeurs configurées pour se charger au moment de l'initialisation, utilisez la commande 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 ...
    

    Notez que toutes les entrées de configuration que vous avez ajoutées à /etc/sysctl.d sont lues par le système et appliquées.