З'ясування значень параметрів ядра, пов'язаних з 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.