Поиск значений параметров ядра, связанных с 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 напрямую, что переопределяет что-либо в этом каталоге .

После редактирования конфигурации в любом из двух мест изменения могут быть применены с

sudo sysctl -p
Десмонд Хьюм
источник
Разве это не sysctl -eдля редактирования, а sysctl -fдля выполнения конфигурации?
Нильс
@Nils linux.die.net/man/8/sysctl
Десмонд Хьюм
Правильно - как ни странно оба варианта работают.
Нильс
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

Похоже, я установил rp_filter для em1, wlan0 и "default". Вы можете установить или сбросить их, просто записав в дескриптор файла:

»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

Конечно, это не значит, что ты не можешь все испортить. И обязательно прочитайте комментарии ниже.

лютик золотистый
источник
Я предпочел бы придерживаться файлов конфигурации, потому что таким образом я могу хранить десятки строк моей предпочтительной конфигурации в текстовом файле и использовать их (некоторые из них) при необходимости. Написание сценария для этой цели кажется ненужным осложнением. Но спасибо за информацию о методе проверки текущих значений.
Десмонд Хьюм
Определенно лучше использовать файлы конфигурации. Я не предлагал вам писать сценарий, просто иллюстрируя, что это не только для чтения значения, и их можно использовать для ручной настройки. ;)
Златовласка
1
Этот сценарий оболочки является довольно интересным способом переписать sysctl -a...
Дероберт
Да, но (в зависимости от природы вашего файлового браузера) просмотр proc / sys может показаться более удобным, и это одна из причин, о которых стоит знать. Другой способ заключается в том, что WRT для получения информации программно, этот интерфейс более эффективен, чем материал типа system (sysctl), и работает независимо от языка, доступных
библиотек
1
Вы неправильно понимаете, что я имею в виду под программным обеспечением , возможно, мне нужно уточнить: я не имел в виду сценарии оболочки. Существует собственный эквивалент C sysctl(см. man 2 sysctl), Однако он не перенесен на большинство других языков (он есть в некоторых), и в этих случаях лучшим вариантом является чтение или запись в proc. Вполне может случиться так, что bash echoможет дать сбой, так как я могу сказать, что функции потокового ввода-вывода высокого уровня, доступные в C и других языках, могут. Однако низкий уровень чтения / записи не будет. В любом случае, важно знать интерфейс proc, поэтому я и поднял его ...
Златовласка 12.12.12
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.

Bozzy
источник