Connaître les valeurs des options du noyau liées à sysctl.conf et sysctl.d

20

Sur ma machine Ubuntu, dans le /etc/sysctl.conffichier, j'ai des options de filtrage de chemin inverse commentées par défaut comme ceci:

#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

mais /etc/sysctl.d/10-network-security.confils ne sont (encore une fois par défaut) pas commentés:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

Le filtrage du chemin inverse est-il donc activé ou non? Lequel des emplacements de configuration est prioritaire? Comment puis-je vérifier les valeurs actuelles de ces options et d'autres options du noyau?

Desmond Hume
la source

Réponses:

32

La vérification de la valeur d'une variable sysctl est aussi simple que

sysctl <variable name>

et, en passant, définir une variable sysctl est aussi simple que

sudo sysctl -w <variable name>=<value>

mais les modifications apportées de cette façon ne dureront probablement que jusqu'au prochain redémarrage.

Pour savoir lequel des emplacements de configuration, /etc/sysctl.confou /etc/sysctl.d/, a priorité, voici ce /etc/sysctl.d/READMEque dit le fichier:

Les utilisateurs finaux peuvent utiliser 60 - *. Conf et supérieur, ou utiliser /etc/sysctl.conf directement, ce qui remplace tout ce qui se trouve dans ce répertoire .

Après avoir modifié la configuration dans l'un des deux emplacements, les modifications peuvent être appliquées avec

sudo sysctl -p
Desmond Hume
la source
N'est-ce pas sysctl -epour éditer et sysctl -fpour exécuter la config?
Nils
@Nils linux.die.net/man/8/sysctl
Desmond Hume
À droite - étrangement, les deux options fonctionnent.
Nils
2

Ce genre de choses se trouve généralement dans les interfaces /procet / ou du /sysnoyau (tout d'abord, gardez à l'esprit que rien dans ces répertoires n'est un fichier disque normal, ce sont toutes des lignes directes vers le noyau).

Ainsi, par exemple:

»for x in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -ne "$x "`cat $x`"\n"; done
/proc/sys/net/ipv4/conf/all/rp_filter 0
/proc/sys/net/ipv4/conf/default/rp_filter 1
/proc/sys/net/ipv4/conf/em1/rp_filter 1
/proc/sys/net/ipv4/conf/lo/rp_filter 0
/proc/sys/net/ipv4/conf/wlan0/rp_filter 1

On dirait que j'ai rp_filter défini pour em1, wlan0 et "default". Vous pouvez les définir ou les annuler en écrivant simplement dans le descripteur de fichier:

»cd /proc/sys/net/ipv4/conf/lo
»echo 1 > rp_filter
»cat rp_filter
1
»echo 0 > rp_filter
»cat rp_filter
0

Comme mentionné, il s'agit d'une communication directe avec le noyau, ce qui prend effet immédiatement. Ce ne sont pas des fichiers de configuration. Si vous essayez de faire quelque chose de mal:

»echo whatever > rp_filter
bash: echo: write error: Invalid argument

Ce qui ne veut pas dire que vous ne pouvez pas gâcher les choses de cette façon, bien sûr. Et assurez-vous de lire les commentaires ci-dessous.

boucle d'or
la source
Je préfère m'en tenir aux fichiers de configuration car de cette façon, je peux conserver des dizaines de lignes de ma configuration préférée dans un fichier texte brut et les réutiliser (certaines) en cas de besoin. Écrire un script à cet effet ressemble à une complication inutile. Mais merci pour les informations sur une méthode pour vérifier les valeurs actuelles.
Desmond Hume
Il est certainement préférable d'utiliser des fichiers de configuration. Je ne vous proposais pas d'écrire un script, juste pour illustrer que ce ne sont pas des valeurs "en lecture seule" et peuvent être utilisées pour effectuer des réglages manuels. ;)
goldilocks
1
Ce script shell est une façon plutôt intéressante de réécrire sysctl -a...
derobert
Certes, mais (selon la nature de votre navigateur de fichiers), parcourir proc / sys peut être considéré comme plus pratique, c'est une des raisons pour lesquelles il vaut la peine de le savoir. Un autre est que WRT pour obtenir des informations par programme, cette interface est plus efficace que les trucs de type "système (sysctl)" et fonctionne indépendamment de la langue, des
bibliothèques
1
Vous comprenez mal ce que je veux dire par programme , je dois peut-être clarifier: je ne parlais pas de scripts shell. Il existe un équivalent C natif de sysctl(voir man 2 sysctl), cependant, il n'est pas porté sur la plupart des autres langages (il l'est dans certains), et dans ces cas, la meilleure option est de lire ou d'écrire dans proc. Il est possible que bash echoéchoue, car je peux dire que les fonctions d'E / S de flux de haut niveau disponibles en C et dans d'autres langages le peuvent. Cependant, la lecture / écriture de bas niveau ne le sera pas. Dans tous les cas, connaître l'interface proc est important, c'est pourquoi je l'ai
évoquée
0

Pour terminer la réponse acceptée , bien qu'il soit vrai que les /etc/sysctl.confparamètres ont priorité sur ceux de /etc/sysctl.d/, l'exemple présenté dans la question d'origine montre deux variables commentées dans /etc/sysctl.conf:

#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

et les mêmes variables non commentées dans /etc/sysctl.d/10-network-security.conf:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

Cela peut être trompeur car un commentaire n'est pas un paramètre, mais seulement une remarque sur ce qui pourrait être un paramètre.

Dans cette situation, les variables sont en fait toutes les deux définies sur 1, malgré le fait que dans le fichier de configuration plus fort, elles soient mises en commentaire.

Si /etc/sysctl.confnous avions:

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

alors les variables seraient éventuellement mises à 0.

Bozzy
la source