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 à travers 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, qui est 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 voir ou modifier des valeurs dans le répertoire /proc/sys.

Note

Même root ne peut pas ignorer les autorisations 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 de système write().

Pour plus d'informations, consultez les pages de manuel sysctl(8) et sysctl.d(5).

Liste des paramètres et des valeurs de noyau configurables

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

  1. Exécutez sysctl -a pour voir 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
    ...
    Note

    Le caractère de 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 une collection de paramètres en spécifiant son nom comme argument pour sysctl.
    sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    Pour une collection plus large de paramètres, vous pouvez spécifier le nom d'une collection de paramètres antérieurement 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 de 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 régler la valeur du paramètre net.ipv4.ip_forward à Activé, utilisez le format de commande suivant :

    sudo sysctl -w net.ipv4.ip_forward=1

    Les modifications que vous effectuez de cette façon ne restent en vigueur que jusqu'à ce que le système soit redémarré.

  2. Pour que les modifications de configuration soient conservées après le redémarrage du système, ajoutez-les au répertoire /etc/sysctl.d en tant que fichier de configuration.

    Toute modification apportée aux fichiers de ce répertoire prend effet lorsque le système redémarre ou si vous exécutez 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 le chargement au moment du démarrage, 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.