Recherche de site Web

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 transmettant 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 d'exécution en une seule fois ou de manière permanente en modifiant un fichier de configuration.

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

Présentation du système de fichiers /proc

La dernière spécification du Filesystem Hierarchy Standard 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 y trouverez probablement les répertoires suivants. À leur tour, chacun d'eux contiendra d'autres sous-répertoires où sont conservées les valeurs de chaque catégorie de paramètres :

  1. dev : paramètres des appareils spécifiques connectés à la machine.
  2. fs : configuration du système de fichiers (quotas et inodes, par exemple).
  3. noyau : 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 d'exécution du noyau, nous utiliserons la commande sysctl. Le nombre exact de paramètres modifiables peut être visualisé avec :

sysctl -a | wc -l

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

sysctl -a 

Comme le résultat de la commande ci-dessus sera composé de 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 contenus dans /proc/sys :

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 y faire référence.

Dans la section suivante, nous expliquerons comment modifier d'autres paramètres d'exécution du noyau « plus importants » 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 de répertoires dans /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érifiez les paramètres du noyau Linux

Cela dit, nous pouvons afficher la valeur d'un paramètre particulier 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

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 et suivi 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 devrait d’ailleurs être la valeur par défaut lorsqu’une box n’est pas censée faire transiter 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 au redémarrage du système.

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

Exécutez ensuite la commande suivante pour appliquer les modifications à la configuration en cours.

sysctl -p

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

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

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

Si, en raison d'une erreur innocente, vous vous retrouvez dans cette dernière situation, démarrez en mode mono-utilisateur (comme expliqué dans la Partie 13 – Configurer et dépanner le chargeur de démarrage Linux Grub) et modifiez /etc/sysctl.conf comme instruit plus tôt. Pour définir la même restriction pour chaque utilisateur, reportez-vous à la Partie 14 – Surveiller et définir l'utilisation des limites de 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 est devenu insensible.

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

Attention ! N'essayez 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 !

Lorsqu'il est défini sur 1, net.ipv4.icmp_echo_ignore_all ignorera les requêtes ping et les supprimera au niveau du noyau. Ceci est montré dans l'image ci-dessous – notez comment les requêtes ping sont perdues après avoir défini ce paramètre du noyau :

Un moyen meilleur et plus simple de définir des paramètres d'exécution individuels consiste à utiliser les fichiers .conf dans /etc/sysctl.d, en les regroupant par catégories.

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 dans /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 d'exécution du noyau, à la fois persistants et non persistants, à l'aide de sysctl, /etc/sysctl.conf et des fichiers contenus dans / etc/sysctl.d.

Dans la documentation sysctl, vous pouvez trouver plus d'informations sur la signification de plusieurs 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 sûrement que vous l’avez fait. N'hésitez pas à nous faire savoir si vous avez des questions ou des suggestions d'amélioration.