Comment modifier les paramètres d’exécution du noyau de manière persistante et non persistante

Dans la Partie 13 de cette série LFCS (Linux Foundation Certified Sysadmin), nous avons expliqué comment utiliser GRUB pour modifier le comportement du système en passant des options au noyau pour le processus de démarrage en cours.

De même, vous pouvez utiliser la ligne de commande dans un système Linux en cours d’exécution pour modifier certains paramètres du noyau en temps réel en tant que modification ponctuelle, ou de manière permanente en éditant un fichier de configuration.

Ainsi, vous êtes autorisé à activer ou désactiver les paramètres du noyau à la volée sans grande difficulté lorsque cela est nécessaire en raison d’un changement requis dans la manière dont le système est censé fonctionner.

Introduction au système de fichiers /proc

La dernière spécification de la Norme de hiérarchie des systèmes de fichiers indique que /proc représente la méthode par défaut pour gérer les informations sur les processus et le système ainsi que d’autres informations sur le noyau et la mémoire. En particulier, /proc/sys est l’endroit où vous pouvez trouver toutes les informations sur les périphériques, les pilotes et certaines fonctionnalités du noyau.

La structure interne réelle de /proc/sys dépend fortement du noyau utilisé, mais vous êtes susceptible de trouver les répertoires suivants à l’intérieur. À leur tour, chacun d’eux contiendra d’autres sous-répertoires où les valeurs de chaque catégorie de paramètres sont maintenues:

  1. dev: paramètres pour des appareils spécifiques connectés à la machine.
  2. fs: configuration du système de fichiers (quotas et inodes, par exemple).
  3. kernel: configuration spécifique au noyau.
  4. net: configuration réseau.
  5. vm: utilisation de la mémoire virtuelle du noyau.

Pour modifier les paramètres du noyau en temps d’exécution, nous utiliserons la commande sysctl. Le nombre exact de paramètres pouvant être modifiés peut être consulté avec :

# sysctl -a | wc -l

Si vous souhaitez afficher la liste complète des paramètres du noyau, faites simplement :

# sysctl -a 

Comme la sortie de la commande ci-dessus consistera en BEAUCOUP de lignes, nous pouvons utiliser un pipeline suivi de less pour l’inspecter plus attentivement :

# sysctl -a | less

Jetons un coup d’œil aux premières lignes. Veuillez noter que les premiers caractères de chaque ligne correspondent aux noms des répertoires à l’intérieur de /proc/sys :

Understand Linux /proc Filesystem

Par exemple, la ligne en surbrillance :

dev.cdrom.info = drive name:        	sr0

indique que sr0 est un alias pour le lecteur optique. En d’autres termes, c’est ainsi que le noyau « voit » ce lecteur et utilise ce nom pour le désigner.

Dans la section suivante, nous expliquerons comment changer d’autres paramètres du noyau « plus importants » en temps d’exécution sous Linux.

Comment changer ou modifier les paramètres d’exécution du noyau Linux

Sur la base de ce que nous avons expliqué jusqu’à présent, il est facile de voir que le nom d’un paramètre correspond à la structure du répertoire à l’intérieur de /proc/sys où il peut être trouvé.

Par exemple :

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Vérifier les paramètres du noyau Linux

Cela dit, nous pouvons consulter la valeur d’un paramètre spécifique du noyau Linux en utilisant soit sysctl suivi du nom du paramètre, soit en lisant le fichier associé :

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Check Linux Kernel Parameters

Définir ou modifier les paramètres du noyau Linux

Pour définir la valeur d’un paramètre du noyau, nous pouvons également utiliser sysctl, mais en utilisant l’option -w suivie du nom du paramètre, du signe égal et de la valeur souhaitée.

Une autre méthode consiste à utiliser echo pour écraser le fichier associé au paramètre. En d’autres termes, les méthodes suivantes sont équivalentes pour désactiver la fonctionnalité de transfert de paquets dans notre système (qui, soit dit en passant, devrait être la valeur par défaut lorsque la boîte n’est pas censée faire passer le trafic entre les réseaux) :

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

Il est important de noter que les paramètres du noyau définis à l’aide de sysctl ne seront appliqués que pendant la session en cours et disparaîtront lorsque le système sera redémarré.

Pour définir ces valeurs de manière permanente, modifiez /etc/sysctl.conf avec les valeurs souhaitées. Par exemple, pour désactiver le transfert de paquets dans /etc/sysctl.conf, assurez-vous que cette ligne apparaît dans le fichier :

net.ipv4.ip_forward=0

Ensuite, exécutez la commande suivante pour appliquer les modifications à la configuration en cours d’exécution.

# sysctl -p

D’autres exemples de paramètres importants du noyau en temps d’exécution sont :

fs.file-max spécifie le nombre maximal de descripteurs de fichiers que le noyau peut allouer pour le système. Selon l’utilisation prévue de votre système (serveur web/base de données/serveur de fichiers, pour citer quelques exemples), vous voudrez peut-être modifier cette valeur pour répondre aux besoins du système.

Sinon, vous recevrez un message d’erreur « Trop de fichiers ouverts » au mieux, et cela pourrait empêcher le système d’exploitation de démarrer au pire.

Si, en raison d’une erreur innocente, vous vous retrouvez dans cette dernière situation, démarrez en mode utilisateur unique (comme expliqué dans Partie 13 – Configurer et Dépanner le Chargeur d’Amorçage Linux Grub) et modifiez /etc/sysctl.conf comme indiqué précédemment. Pour appliquer la même restriction sur une base par utilisateur, référez-vous à Partie 14 – Surveiller et Définir l’Utilisation Limite des Processus Linux de cette série.

kernel.sysrq est utilisé pour activer la touche SysRq de votre clavier (également connue sous le nom de touche d’impression d’écran) afin de permettre à certaines combinaisons de touches d’invoquer des actions d’urgence lorsque le système devient non réactif.

La valeur par défaut (16) indique que le système honorera la combinaison de touches Alt+SysRq+clé et exécutera les actions répertoriées dans la documentation sysrq.c trouvée sur kernel.org (où la clé est une lettre de la plage b-z). Par exemple, Alt+SysRq+b redémarrera le système de force (utilisez ceci en dernier recours si votre serveur ne répond pas).

Attention ! Ne tentez pas d’appuyer sur cette combinaison de touches sur une machine virtuelle car cela pourrait forcer le redémarrage de votre système hôte !

Lorsque défini sur 1, net.ipv4.icmp_echo_ignore_all ignorera les demandes de ping et les rejettera au niveau du noyau. Cela est illustré dans l’image ci-dessous – notez comment les demandes de ping sont perdues après avoir défini ce paramètre du noyau :

Block Ping Requests in Linux

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d, grouping them by categories.

Par exemple, au lieu de définir net.ipv4.ip_forward=0 et net.ipv4.icmp_echo_ignore_all=1 dans /etc/sysctl.conf, nous pouvons créer un nouveau fichier nommé net.conf à l’intérieur de /etc/sysctl.d :

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Si vous choisissez d’utiliser cette approche, n’oubliez pas de supprimer ces mêmes lignes de /etc/sysctl.conf.

Résumé

Dans cet article, nous avons expliqué comment modifier les paramètres du noyau en temps d’exécution, de manière persistante et non persistante, en utilisant sysctl, /etc/sysctl.conf, et les fichiers à l’intérieur de /etc/sysctl.d.

Dans la documentation de sysctl, vous pouvez trouver plus d’informations sur la signification de plus de variables. Ces fichiers représentent la source de documentation la plus complète sur les paramètres pouvant être définis via sysctl.

Avez-vous trouvé cet article utile ? Nous espérons sincèrement que oui. N’hésitez pas à nous faire part de vos questions ou suggestions pour nous améliorer.

Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/