sysctl.confおよびsysctl.dに関連するカーネルオプションの値を見つける


20

私のUbuntuマシンでは、/etc/sysctl.confファイルに、デフォルトで次のようにコメントアウトされたリバースパスフィルタリングオプションがあります。

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

しかし、/etc/sysctl.d/10-network-security.confそれらは(再び、デフォルトで)コメントアウトされていません:

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

リバースパスフィルタリングは有効になっているかどうか どの構成場所が優先されますか?これらおよびその他のカーネルオプションの現在の値を確認するにはどうすればよいですか?

回答:


32

sysctl変数の値のチェックは次のように簡単です

sysctl <variable name>

ところで、sysctl変数の設定は次のように簡単です

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

ただし、この方法で行った変更は、おそらく次の再起動までしか保持されません。

どの設定の場所、/etc/sysctl.confまたは/etc/sysctl.d/が優先されるかについて、/etc/sysctl.d/READMEファイルの内容は次のとおりです。

エンドユーザーは60-*。conf以上を使用するか、/ etc / sysctl.confを 直接使用して、このディレクトリ内のすべてを上書きできます

2つの場所のいずれかで設定を編集した後、変更を適用することができます

sudo sysctl -p

これはsysctl -e編集や構成sysctl -fの実行のためではありませんか?
ニルス


右-奇妙なことに、両方のオプションが機能します。
ニルス

2

この種のものは通常、/procおよび/または/sysカーネルインターフェースにあります(最初に、これらのディレクトリには通常のディスクファイルはなく、すべてカーネルへの直接の行であることに注意してください)。

したがって、たとえば:

»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

em1、wlan0、および「default」にrp_filterが設定されているようです。ファイルハンドルに書き込むだけで、それらを設定または設定解除できます。

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

前述のように、これはカーネルとの直接通信であるため、すぐに有効になります。これら構成ファイルではありません。何か間違ったことをしようとした場合:

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

もちろん、この方法で物事を台無しにできないわけではありません。そして、以下のコメントを必ずお読みください。


こうすることで、好みの構成の数十行をプレーンテキストファイルに保持し、必要に応じて(一部)を再利用できるため、構成ファイルにこだわります。この目的のためにスクリプトを書くことは、不必要な複雑さのように感じます。しかし、現在の値を確認する方法に関する情報をありがとう。
デズモンドヒューム

絶対に設定ファイルを使用する方がはるかに優れています。スクリプトを記述することはお勧めしませんでしたが、これらは「読み取り専用」の値ではなく、手動で調整できることを示しているだけです。;)
goldilocks

1
そのシェルスクリプトは、再書き込みにかなり興味深い方法ですsysctl -a...
derobert

本当ですが、(ファイルブラウザの性質に応じて)proc / sysを熟読する方が便利であると考えられるかもしれません。これは知っておく価値のある理由の1つです。もう一つは、プログラムの情報を取得し、そのインターフェイスは、「システム(sysctlの)」タイプのものをパイプ、および言語に関係なく、利用可能LIBSなどの作品よりも効率的であることWRTある
ゴルディロックス

1
あなたはプログラム的に私が意味することを誤解しています、おそらく私は明確にする必要があります:私はシェルスクリプトを意味しませんでした。ネイティブCに相当するものがありますsysctl(を参照man 2 sysctl)が、これは他のほとんどの言語(一部の言語では)に移植されておらず、これらの場合、procの読み取りまたは書き込みが最適なオプションです。echoCや他の言語で利用可能な高レベルのストリームI / O関数ができると言うことができるように、bash が失敗するかもしれません。ただし、低レベルの読み取り/書き込みはできません。いずれにせよ、procのインタフェースについて知ることは...私はそれを育てた理由である、重要である
ゴルディロックス

0

受け入れられた回答を完了するために、/etc/sysctl.conf設定がの設定よりも優先されることは事実です/etc/sysctl.d/が、元の質問で公開された例では、次の2つの変数がコメントアウトされています/etc/sysctl.conf

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

と同じ変数はコメントアウトされていません/etc/sysctl.d/10-network-security.conf

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

コメントがあるので、これは誤解を招くかもしれない設定が、唯一の発言に設定することができるものの。

この状況では、より強力な構成ファイルではコメントアウトされているにもかかわらず、実際には変数は両方とも1に設定されます。

/etc/sysctl.conf私たちが持っていた場合:

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

その後、変数は最終的に0に設定されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.