找出与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

那么是否启用了反向路径过滤?哪个配置位置优先?如何检查这些和其他内核选项的当前值?

Answers:


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这将覆盖此目录中的所有内容

在两个位置中的任何一个上编辑配置后,可以使用

sudo sysctl -p

这不是sysctl -e用于编辑和sysctl -f执行配置吗?
尼尔斯2012年


对-奇怪的是,这两个选项都起作用。
Nils 2012年

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

当然,这并不是说您不能以这种方式搞砸。并且一定要阅读下面的评论。


我宁愿坚持使用配置文件,因为这样一来,我可以将数十行首选配置保留在纯文本文件中,并在需要时重用(其中一些)。为此编写脚本感觉像是不必要的复杂。但是,感谢您提供有关检查当前值的方法的信息。
Desmond Hume 2012年

绝对使用配置文件会更好。我并不是建议您编写脚本,而只是说明这些不是“只读”值,而是可以用来进行手动调整。;)
goldilocks 2012年

1
该shell脚本是一种非常有趣的重写方式sysctl -a...
derobert 2012年

没错,但是(视文件浏览器的性质而定)仔细阅读proc / sys可能会被认为更方便,这是值得了解的原因之一。另一个原因是,WRT以编程方式获取信息,该接口是比管道“系统(sysctl项)”类型的东西更高效,工作语言,可用库等,无论
金发

1
您可能会以编程方式误解我的意思,也许我需要澄清一下:我不是在说shell脚本。有一个本地C等效项sysctl(请参阅参考资料man 2 sysctl),但是,它没有移植到大多数其他语言中(在某些情况下是这样),在这种情况下,最好的选择是对proc进行读写。bash可能很echo可能失败,因为我可以说C和其他语言中可用的高级流I / O功能可以。但是,低电平读取/写入将不会。无论如何,了解proc接口很重要,这就是我提出它的原因……
goldilocks 2012年

0

为了完成已接受的答案,虽然/etc/sysctl.conf设置确实优先于中的设置/etc/sysctl.d/,但原始问题中暴露的示例在中显示了两个注释掉的变量/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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.