Харденінг Linux: проектуємо надійну структуру розділів за стандартами CIS
Створення правильної структури розділів під час інсталяції Linux - це один із тих кроків, який закладає фундамент стабільності всієї системи. Часто початківці (а іноді й досвідчені адміни) обмежуються створенням одного великого кореневого розділу, скидаючи туди всі дані. Проте розділення системи на логічні частини є необхідною частиною налаштування сервера і навіть робочої станції, виключення з цього правила можна робити тільки для тимчасових тестових систем.
Перша причина необхідності розділення розділів, що приходить на думку, це захист від переповнення простору. Свідомо чи несвідомо непривілейований користувач може записати забагато даних у /home/. Також сервер може опинитися під атакою, або якась програма через збій почне без упину писати повідомлення в лог-файли (/var/log), заповнивши весь доступний простір.
Давайте розглянемо структуру розділів з урахуванням рекомендацій стандарту безпеки CIS Benchmarks (Що таке CIS). CIS вимагає ізоляції не просто для захисту від переповнення диска, а й для застосування специфічних опцій монтування (nodev, nosuid, noexec), які блокують запуск шкідливих скриптів та підвищення привілеїв.
Схема розділів#
EFI System Partition (ESP)#
Окремий розділ на накопичувачі форматований у файлову систему FAT32. Тут зберігаються завантажувачі (bootloaders) а також драйвери обладнання, які викликаються прошивкою материнської плати до старту самого ядра Linux. Цей розділ монтується у /boot/efi.
- Розмір: загальні практики рекомендують виділяти 250-512Mb. Цього з головою вистачить для зберігання кількох версій завантажувачів та EFI-додатків.
- Опції монтування:
umask=0077,fmask=0177,dmask=0077. Це закриває доступ до вмісту EFI будь-кому, окрім суперкористувача root, запобігаючи аналізу або модифікації завантажувальних файлів звичайними користувачами чи компрометованими сервісами.
swap (Swap Space)#
Простір підкачки це віртуальна пам’ять, яка використовується операційною системою як розширення фізичної оперативної пам’яті (RAM). Особливості:
- Захист даних від витоку: Оскільки у swap скидаються “сирі” сторінки оперативної пам’яті, там у відкритому вигляді можуть опинитися паролі, сесійні ключі, токени авторизації чи персональні дані користувачів. Стандарти безпеки вимагають, щоб у критичних інфраструктурах простір swap був зашифрований (наприклад, за допомогою
dm-crypt/LUKS). У такому разі ключ шифрування генерується заново при кожному завантаженні системи, що унеможливлює зчитування даних зі swap після вимкнення чи перезавантаження сервера. - Параметр Swappiness: Керувати агресивністю використання підкачки можна через налаштування ядра
vm.swappiness(/etc/sysctl.conf). На високонавантажених серверах баз даних його часто знижують до мінімальних значень, щоб система не гальмувала через повільні операції дискового вводу-виводу, звертаючись до swap без крайньої потреби.
/ (root)#
Основа системи. Якщо всі критичні точки змонтовані на окремі розділи, корінь стає майже статичним. Тут залишаються мінімальний набір утиліт, /etc та /boot (якщо він не винесений окремо).
- Опції монтування: За замовчуванням (
defaults).
/usr (User System Resources)#
Усі системні програми, бінарники та бібліотеки. Згідно з CIS, винесення /usr дозволяє чітко відокремити системне програмне забезпечення від динамічних даних.
- Безпека: Оскільки користувачам та сервісам не потрібно нічого писати в цей каталог під час роботи, у параноїдальних режимах безпеки його можна монтувати в режимі
ro(read-only), дозволяючи запис лише на час оновлення пакетів. - Опції монтування: За замовчуванням (
defaults).
/var (Variable data)#
Загальне сховище для динамічних даних системних служб.
- Безпека: Відокремлення захищає корінь від переповнення, якщо якась служба почне безконтрольно генерувати тимчасові файли.
- Опції монтування:
nodev(заборона створення файлів пристроїв).
/var/log (System Logs)#
Серце системного аудиту. CIS наполягає на винесенні логів на окремий розділ від решти даних /var.
- Безпека: Якщо зловмисник спробує провести DoS-атаку, щоб забити диск логами і приховати свої сліди, він заповнить лише цей розділ. Система продовжить працювати, а інші сервіси в
/var(наприклад, бази даних) не постраждають. - Опції монтування:
nodev,nosuid,noexec.
/var/log/audit (Audit Logs)#
Окрема директорія для демона auditd. Це критична вимога CIS (наприклад, CIS RHEL Benchmark).
- Безпека: Логи аудиту фіксують події безпеки (хто заходив, які файли редагував). Якщо звичайні логи (
/var/log/syslogабо/var/log/messages) переповняться, логи аудиту безпеки повинні гарантовано вижити. Якщо місце тут закінчується, auditd можна налаштувати на зупинку системи (система безпечна, поки ведеться запис). - Опції монтування:
nodev,nosuid,noexec.
/tmp (Temporary files)#
Сховище тимчасових файлів, доступне на запис абсолютно всім користувачам та процесам у системі.
- Безпека: Головна точка входу для багатьох експлойтів. Зловмисники часто завантажують шкідливі скрипти саме сюди.
- Опції монтування:
nodev,nosuid,noexec. Опціяnoexecзабороняє виконання будь-яких бінарних файлів чи скриптів із цього розділу, що ламає плани хакерам. Частий вибір - монтувати якtmpfs(у оперативну пам’ять). Але будьте обережні зnoexec, нажаль, не весь сторонній софт сумісний. Наприклад, антивірус або БД може потребувати запуску своїх скриптів з/tmp, перевіряйте перед застосуванням.
/home (User Directories)#
Простір для домашніх каталогів користувачів.
- Безпека: Користувачі - це завжди ризик. Окремий розділ не дозволить користувачу забити своїми фільмами чи бекапами весь диск сервера.
- Опції монтування:
nodev,nosuid(іноді йnoexec, якщо користувачам заборонено запускати власні програми). Це унеможливлює створення всередині домашніх папок файлів із прапорцем SUID (наприклад, копії/bin/shіз правами root).
/opt (Optional Software)#
Місце для встановлення стороннього пропрієтарного софту (наприклад, агенти моніторингу, Jira, специфічні бази даних, які не поширюються через стандартні репозиторії).
- Безпека: Ізолює сторонній софт, який часто оновлюється та росте в розмірах, від операційної системи.
- Опції монтування:
nodev,nosuid.
Зведена таблиця монтування#
Якщо ви збираєте захищений сервер, конфігурація файлу /etc/fstab для цих розділів має виглядати наступним чином:
| Точка монтування / Тип | Критичні опції / Параметри безпеки | Розмір ФС | Роль у загальній системі |
|---|---|---|---|
/boot/efi |
umask=0077,fmask=0177,dmask=0077 |
512Mb | Безпечний старт системи через UEFI. |
swap |
Зашифрований (dm-crypt), низький swappiness |
2Gb | Страховка на випадок OOM (Out of Memory) без ризику витоку даних. |
/ |
defaults |
1Gb | Стабільність ядра та базової системи. |
/usr |
defaults (або навіть ro) |
3Gb | Захист системних бінарників від модифікації. |
/var |
nodev |
2Gb | Блокування створення підроблених блочних пристроїв. |
/var/log |
nodev,nosuid,noexec |
1Gb | Ізоляція журналів, заборона запуску коду з логів. |
/var/log/audit |
nodev,nosuid,noexec |
1.5Gb | Гарантія збереження журналів безпеки auditd. |
/tmp |
nodev,nosuid,noexec |
1Gb | Повна нейтралізація завантажених шкідливих скриптів. |
/home |
nodev,nosuid |
1Gb | Захист від маніпуляцій з привілеями з боку користувачів. |
/opt |
nodev,nosuid |
1Gb | Контроль за поведінкою стороннього ПЗ. |
В таблиці також вказано початковий розмір файлових систем для мінімального generic-серверу.
Порада щодо реалізації#
Реалізовувати таку детальну схему на “голих” розділах диска (sda1, sda2…) - це адміністративне самогубство, оскільки ви точно помилитеся з розміром під /var/log/audit чи /opt, і потім доведеться рухати межі розділів.
Єдиний правильний шлях для виконання цих вимог це використання LVM (Logical Volume Manager). Ви створюєте одну велику групу томів (Volume Group) на диску, а вже всередині неї нарізаєте логічні томи (Logical Volumes) під кожну точку монтування. Це дозволить вам виділити спочатку мінімальний об’єм (наприклад, 2 ГБ під аудит) і за потреби розширити його без зупинки сервера.