Ermitteln der Werte von Kerneloptionen für sysctl.conf und sysctl.d

19

Auf meinem Ubuntu-Rechner /etc/sysctl.confhabe ich in der Datei Optionen zum Filtern umgekehrter Pfade, die standardmäßig folgendermaßen auskommentiert sind:

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

aber in /etc/sysctl.d/10-network-security.confihnen sind (wieder, standardmäßig) nicht auskommentiert:

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

Ist die Umkehrpfadfilterung also aktiviert oder nicht? Welcher Konfigurationsort hat Priorität? Wie überprüfe ich die aktuellen Werte dieser und anderer Kerneloptionen?

Desmond Hume
quelle

Antworten:

31

Das Überprüfen des Werts einer sysctl-Variablen ist so einfach wie

sysctl <variable name>

Übrigens ist das Setzen einer sysctl-Variablen so einfach wie

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

auf diese Weise vorgenommene Änderungen werden jedoch wahrscheinlich nur bis zum nächsten Neustart beibehalten.

Welche der Konfigurationspfade /etc/sysctl.confoder /etc/sysctl.d/Vorrang hat, steht in der folgenden /etc/sysctl.d/READMEDatei:

Endbenutzer können 60 - *. Conf und höher verwenden oder /etc/sysctl.conf direkt verwenden, wodurch alles in diesem Verzeichnis außer Kraft gesetzt wird .

Nachdem Sie die Konfiguration an einem der beiden Speicherorte bearbeitet haben, können Sie die Änderungen mit übernehmen

sudo sysctl -p
Desmond Hume
quelle
Ist dies nicht sysctl -ezum Bearbeiten und sysctl -fzum Ausführen der Konfiguration?
Nils
@Nils linux.die.net/man/8/sysctl
Desmond Hume
Richtig - seltsamerweise funktionieren beide Optionen.
Nils
2

Diese Art von Dingen befindet sich normalerweise in der /procund / oder der /sysKernel-Oberfläche (denken Sie zuerst daran, dass nichts in diesen Verzeichnissen eine reguläre Festplattendatei ist, sie sind alle direkte Leitungen zum Kernel).

Also zB:

»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

Anscheinend habe ich rp_filter für em1, wlan0 und "default" eingestellt. Sie können sie festlegen oder deaktivieren, indem Sie einfach in das Datei-Handle schreiben:

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

Wie bereits erwähnt, handelt es sich um eine direkte Kommunikation mit dem Kernel, die sofort wirksam wird. Dies sind keine Konfigurationsdateien. Wenn Sie versuchen, etwas falsch zu machen:

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

Das heißt natürlich nicht, dass man es auf diese Weise nicht vermasseln kann. Und lesen Sie unbedingt die folgenden Kommentare.

Goldlöckchen
quelle
Ich bleibe lieber bei Konfigurationsdateien, da ich auf diese Weise Dutzende von Zeilen meiner bevorzugten Konfiguration in einer Nur-Text-Datei speichern und diese bei Bedarf (teilweise) wiederverwenden kann. Das Schreiben eines Skripts für diesen Zweck ist eine unnötige Komplikation. Aber danke für die Info über eine Methode, um aktuelle Werte zu überprüfen.
Desmond Hume
Die Verwendung von Konfigurationsdateien ist definitiv viel besser. Ich habe nicht vorgeschlagen, ein Skript zu schreiben, sondern nur zu veranschaulichen, dass dies keine "schreibgeschützten" Werte sind und für manuelle Optimierungen verwendet werden können. ;)
Goldlöckchen
1
Das Shell-Skript ist eine ziemlich interessante Möglichkeit, es neu zu schreiben sysctl -a...
derobert
Richtig, aber (abhängig von der Art Ihres Dateibrowsers) kann das Durchsuchen von proc / sys als praktischer angesehen werden. Dies ist ein Grund, warum es sich lohnt, darüber zu wissen. Eine andere ist, dass WRT, um Informationen programmgesteuert zu erhalten, diese Schnittstelle effizienter ist als Pipe-Systeme (sysctl) und unabhängig von Sprache, verfügbaren
Bibliotheken
1
Sie verstehen falsch, was ich programmatisch meine , vielleicht muss ich klarstellen: Ich meinte nicht Shell-Skripte. Es gibt ein natives C-Äquivalent zu sysctl(see man 2 sysctl), dies ist jedoch nicht für die meisten anderen Sprachen portiert (es ist in einigen Sprachen der Fall), und in diesen Fällen besteht die beste Option darin, in proc zu lesen oder zu schreiben. Es kann durchaus sein, dass bashs echofehlschlägt, da ich sagen kann, dass die in C und anderen Sprachen verfügbaren High-Level-Stream-E / A-Funktionen dies können. Das niedrige Lese- / Schreibniveau wird es jedoch nicht. In jedem Fall ist es wichtig, über die Proc-Schnittstelle Bescheid zu wissen. Deshalb habe ich sie
aufgerufen
0

Um die vollständige Antwort akzeptiert , während es stimmt, dass die /etc/sysctl.confEinstellungen in Vorrang vor denen nehmen /etc/sysctl.d/, die beispielsweise in der ursprünglichen Frage ausgesetzt zeigt zwei auf Kommentar Variablen in /etc/sysctl.conf:

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

und die gleichen Variablen nicht auskommentiert in /etc/sysctl.d/10-network-security.conf:

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

Dies kann irreführend sein, da ein Kommentar keine Einstellung ist, sondern nur eine Bemerkung darüber, was eine Einstellung sein könnte.

In dieser Situation werden die Variablen tatsächlich beide auf 1 gesetzt, obwohl sie in der stärkeren Konfigurationsdatei auskommentiert sind.

Wenn /etc/sysctl.confwir in hatten:

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

dann würden die Variablen schließlich auf 0 gesetzt.

Bozzy
quelle