З'ясування значень параметрів ядра, пов'язаних з 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для виконання конфігурації?
Нільс


Правильно - як не дивно, обидва варіанти працюють.
Нільс

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...
derobert

Щоправда, але (залежно від характеру вашого браузера файлів) перегляд proc / sys може вважатися більш зручним, що є однією з причин, про яку варто знати. Інше те, що WRT для отримання інформації програмно, цей інтерфейс є більш ефективним, ніж трубопровідні "системні (sysctl)" типи, і працює незалежно від мови, наявних ліфтів тощо.
goldilocks

1
Ви неправильно розумієте, що я маю на увазі під програмою , можливо, мені потрібно уточнити: я не мав на увазі сценарії оболонки. Існує нативний C-еквівалент sysctl(див. man 2 sysctl), Однак це не переноситься на більшість інших мов (є в деяких), і в цих випадках найкращим варіантом є читання або запис на proc. Цілком може бути, що баш echoможе вийти з ладу, оскільки я можу сказати, що функції вводу / виводу потоку високого рівня, доступні на C та інших мовах, можуть. Однак низький рівень читання / запису не буде. У будь-якому випадку, важливо знати інтерфейс proc, тому я його підняв ...
goldilocks

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.