• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

Що таке sysctl

Зміст

Ядро Linux та його налаштування

Ядро Linux — це основа операційної системи. У стандартних збірках Лінукс, таких як Ubuntu, Debian, CentOS і т. д. нам не треба самим збирати ядро ОС, це вже зроблено розробниками цих дистрибутивів. Проте, якщо у вас з'явилася необхідність зібрати найбільш свіжу версію ядра або сформувати свій власний дистрибутив ОС Лінукс, то перед вами постане завдання «як зібрати ядро вручну». На цьому етапі можна закласти в ядро такі базові налаштування ОС, які саме вам будуть потрібні для роботи.

Ще одне завдання, з яким може зіткнутися у своїй роботі системний адміністратор початківець — це налаштування ядра системи прямо в ході роботи, тобто «на льоту». Не всі фахівці користуються цими можливостями, деякі вважають за краще виконати базові налаштування операційної системи, а потім налаштовувати вже самі програми. Звичайно ж, за допомогою таких змін змінних параметрів ядра «в ході роботи ОС», адміністратор не підключить якісь драйвери нових пристроїв або нові модулі, які не підтримуються цією системою, проте можна налаштувати мережевий стек, зробити оптимальні «установки під себе» параметрів процесора, пам'яті, самого ядра ОС і т. д.

Усе це можна виконати, навчившись працювати з утилітою sysctl, яка застосовується в FreeBSD і Linux. Якщо системний інженер підійде грамотно до налаштувань ядра за допомогою sysctl (а не просто знайде типові команди з мануалів на сайтах), то можливо буде досягти оптимальних результатів роботи системи. Наприклад, таким чином налаштовують високонавантажені серверні ОС або навіть вибудовують грамотний захист від DDoS атак.

У нашій статті постараємося дати поняття про принципи роботи з sysctl linux, а також навести приклади найчастіше використовуваних команд в налаштуванні ядра Лінукс.

Як працювати з sysctl

Для початку роботи нам необхідно вивести на екран усі доступні опції, робиться це за допомогою команди:

sysctl -a

Виведення параметрів sysctl -a

Проглянути усі параметри sysctl може будь-який користувач Linux (у нашому прикладі показуємо на Ubuntu 20), а ось змінювати параметри ядра може тільки користувач з правами root.

Також можна подивитися значення одного параметра, який вас цікавить в конкретний момент, наприклад*:

sysctl net.ipv4.ip_forward

Виведення конкретного параметра sysctl

*Примітка: ця команда дозволяє або забороняє маршрутизацію пакетів.

Потрібно відмітити, що якщо значення параметра дорівнює 0, то функція заборонена, а якщо рівне 1, то дозволена.

Для виведення списку відразу усіх змінних, які починаються приміром з vm, наберіть в терміналі команду:

sysctl vm

Виведення параметрів, що починаються з vm

Нижче роз'яснимо основні опції команди sysctl:

man sysctl — виводить детальну документацію по даній команді;

Команда man sysctl

sysctl -n — виведе на екран тільки значення змінних;

sysctl -N — покаже вам тільки назви змінних, без їх значень;

sysctl -A — показує усі доступні налаштування ядра, але в табличній формі;

sysctl -w "змінна"="значення" — використовується для зміни значення змінної;

sysctl -p — виводить на екран налаштування з файлу /etc/sysctl.conf (чи іншого вказаного файлу налаштувань).

Покажемо на практиці, як використовувати ці команди системному адміністратору у своїй роботі.

Наприклад, спробуємо дозволити маршрутизацію пакетів, виконавши команду:

sysctl -w net.ipv4.ip_forward=1

Якщо ми просто виконаємо команду без опції -w, то зроблені зміни не збережуться після перезавантаження ОС:

sysctl net.ipv4.ip_forward=1

Як правило, усі показані нами змінні параметрів ядра Лінукс, зберігаються в конфігураційному файлі /etc/sysctl.conf.

Файл /etc/sysctl.conf

Проте, деякі змінні можуть бути записані в наступних каталогах і файлах:

/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf

Для того, щоб повернути налаштування ядра до стану «до зроблених вами змін», необхідно виконати команду:

sysctl --system

Команда sysctl --system

Для початку, можна поекспериментувати з налаштуваннями ядра в «ручному режимі» за допомогою виконання цих команд в терміналі. Якщо зроблені вами налаштування — «робочі» і допомагають в оптимізації роботи ядра вашої ОС, то можете їх внести на постійній основі у файл /etc/sysctl.conf.

Віртуальна файлова система /proc

Існує ще один цікавий спосіб для налаштування параметрів ядра Linux — це робота з директорією /proc/sys. Тут ми використовуємо команду echo для зміни значень параметрів налаштувань ядра Лінукс, а для виведення на екран цих значень використовуємо cat.

Нижче покажемо на простих прикладах, як це можна зробити на практиці (по аналогії з командами sysctl). Отже, виведемо на екран значення параметра net.ipv4.ip_forward цим способом (на скриншоті нижче показано, як вивести значення цього параметра двома способами):

cat /proc/sys/net/ipv4/ip_forward

вивід команди cat

Для зміни значення цього параметра з 0 на 1, виконаємо команду*:

echo "1" > /proc/sys/net/ipv4/ip_forward

*Зміни, зроблені у такий спосіб, будуь працювати до першого перезавантаження ОС.

На скриншоті нижче показано, як вивести на екран інші параметри налаштувань ядра Ubuntu, до речі, ми надаємо VPS хостинг під цю операційну систему:

робота з директорією /proc/sys

Приклади деяких параметрів ядра Linux

Наведемо деякі найбільш важливі і часто використовувані змінні ядра Лінукс і розповімо, що вони означають і як їх налаштувати:

  • fs.file-max — показує максимальне значення для дескрипторів файлів, що створюються та обробляються ядром Лінукс. "За умовчанням" встановлюється число, рівне 10% оперативної пам'яті комп'ютера.

    Налаштування параметра fs.file-max

  • fs.aio-nr — позначає задане число операцій введення та виведення для файлової системи.
  • cad_pid — вказує ідентифікаційний номер процесу (PID), який привласнюється сигналу, при натисненні Ctrl+Alt+Del.
  • kernel.ctrl-alt-del — параметр, що відповідає за правильне перезавантаження по комбінації клавіш Ctrl+Alt+Del (пов'язаний з параметром cad_pid). При значенні 0, ОС передає сигнал процесу, призначеному в cad_pid, якщо значення параметра більше 0, то ОС виконує перезавантаження негайно.
  • kernel.hostname — параметр дозволяє зробити зміну імені вашого комп'ютера «на льоту» (без процесу перезавантаження).
  • kernel.modules_disabled — вимикає завантаження модулів ядра.
  • kernel.panic — виставлено кількість секунд, що залишилися до початку процесу перезавантаження (після випадку помилки в ядрі).
  • kernel.randomize_va_space — важливий параметр, що забезпечує безпеку вашої ОС, служить проти атак на переповнювання буфера, включений «за умовчанням».
  • kernel.sysrq — включає усі функції (значення 1) або відключає (значення 0) для управління ядром за допомогою SysRQ.
  • abi.vsyscall32 — параметр, що дозволяє (при його значенні 1) виконання 32-розрядних програм в 64-розрядній ОС.
  • debug.exception-trace — служить для виведення значень регістрів процесора, стека виклику процедур у разі помилки в ядрі. Встановлений у включеному «за умовчанням» стані.
  • dev.cdrom.autoclose — параметр призначений для управління CDROM, при спробі його монтування, може його автоматично закрити (відключений «за умовчанням»).
  • net.ipv4.ip_forward — це налаштування застосовується для роутерів, воно дозволяє або забороняє маршрутизацію пакетів.
  • net.ipv4.ip_local_port_range — визначає діапазон локальних портів, дозволених для використання вашими програмами.
  • net.ipv4.tcp_rmem — вказує об'єм пам'яті, яка виділена для роботи TCP.
  • vm.laptop_mode — цей параметр буде корисний для роботи ноутбуків, зокрема, для економії заряду батареї. Це налаштування дозволяє зберігати дані деякий час в оперативній пам'яті комп'ютера (а не відразу записувати їх на жорсткий диск).
  • vm.swappiness — цей параметр служить для встановлення % вільної пам'яті, при досягненні цього значення дані будуть автоматично переводитися в swap. «За умовчанням» в Ubuntu встановлено значення цього параметра, рівне 60. Тобто ОС переноситиме в розділ swap такі розділи пам'яті, які були не використані протягом тривалого проміжку часу.

Вище, ми привели лише деякі змінні налаштувань ядра Linux, для застосування усіх можливих параметрів, рекомендуємо вивчати документацію вашої ОС. Наприклад, працюючи зі змінними типу net., можна виставити оптимальні мережеві налаштування для вашої операційної системи.

Висновок

У цій статті ми висвітлили досить актуальну тему для системного адміністратора, як налаштувати ядро ОС Linux «на льоту» за допомогою sysctl і віртуальної файлової системи /proc. Не кожен фахівець знайомий з методами гнучкого налаштування ядра ОС, тому, перш ніж застосовувати «будь-які налаштування з Інтернету», необхідно глибоко вивчити це питання, переглянути параметри конкретної ОС, поекспериментувати з різними значеннями змінних (не зберігаючи їх) і вже потім, отримавши позитивний результат — застосовувати ці методи на постійній основі. Тому що, не завжди «налаштування з мануалів в Інтернеті» підходять усім підряд користувачам Лінукс, і будь-які зміни налаштувань ядра системи потрібно виконувати дуже обережно.

Якщо ж у вас виникають проблеми з більш складним та гнучким налаштуванням ядра Linux, бракує знань і практичних навичок для такої роботи, то ви завжди можете звернутися за консультацією до системних адміністраторів компанії FREEhost.UA.

Підписуйтесь на наш телеграм-канал t.me/freehostua, щоб бути в курсі нових корисних матеріалів. Дивіться наш Youtube канал з адміністрування Linux серверів www.youtube.com/freehostua.

Дата: 19.04.2021
Автор: Євген
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA