Перейти до вмісту

Модуль 2.3: Capabilities та модулі безпеки (LSM)

Основи системи | Складність: [MEDIUM] | Час: 25–30 хв

Перед початком цього модуля:


Що ви зможете робити після цього модуля

Розділ «Що ви зможете робити після цього модуля»

Після проходження цього модуля ви зможете:

  • Пояснити Linux capabilities як гранулярну альтернативу запуску від root
  • Перевірити capabilities контейнера та визначити, які з них зайві
  • Налаштувати профілі AppArmor та seccomp для обмеження системних викликів контейнера
  • Оцінити компроміси безпеки між видаленням capabilities та використанням профілів LSM

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Класична модель Unix була простою: root може все, решта обмежені. Цей підхід «все або нічого» небезпечний. Навіщо давати процесу повну владу root, якщо йому потрібно лише зайняти 80-й порт?

Capabilities (можливості) розбивають суперсилу root на дрібні частинки. Linux Security Modules (LSM) додають обов’язковий контроль доступу (MAC) понад звичайні дозволи.

Розуміння цих механізмів допоможе вам:

  • Захищати контейнери — відключати непотрібні capabilities.
  • Відлагоджувати помилки прав доступу — чому контейнер не може зробити X?
  • Принцип найменших привілеїв — давати тільки той доступ, що необхідний.
  • Розуміти безпеку Kubernetes — SecurityContext, seccomp та AppArmor.

Коли ваш контейнер видає помилку «operation not permitted», хоча ви запустили його від імені root —capabilities зазвичай є причиною.


Linux Capabilities (Можливості)

Розділ «Linux Capabilities (Можливості)»

У традиційній моделі root має занадто багато влади. Якщо хакер зламає вебсервер, що працює від root, він отримає контроль над усім сервером.

Capabilities: Гранулярні привілеї

Розділ «Capabilities: Гранулярні привілеї»

Capabilities розділяють повноваження root на ~40 окремих дозволів.

CapabilityЩо дозволяєХто використовує
CAP_NET_BIND_SERVICEЗаймати порти < 1024Вебсервери (nginx, apache)
CAP_NET_RAWВикористовувати RAW-сокетиping, tcpdump
CAP_NET_ADMINНалаштовувати мережуVPN-клієнти, системні утиліти
CAP_SYS_ADMIN«Новий root» (дуже багато прав)Контейнери, що монтують диски
CAP_CHOWNЗмінювати власника файлівСистемні скрипти
CAP_KILLВбивати чужі процесиМенеджери сервісів

Capabilities та Контейнери

Розділ «Capabilities та Контейнери»

Docker за замовчуванням відключає більшість небезпечних capabilities для контейнерів. Саме тому root всередині контейнера — це не той самий root, що на хості.

Порада для Kubernetes: Найкраща практика безпеки — спочатку скинути ВСІ можливості, а потім додати тільки потрібну:

securityContext:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE

LSM — це додатковий рівень безпеки, який перевіряє дії програми ПІСЛЯ того, як вона пройшла перевірку на рівні прав файлів (DAC) та capabilities.

Найпопулярніші модулі:

Розділ «Найпопулярніші модулі:»
  1. AppArmor (Ubuntu, Debian): базується на шляхах до файлів. Наприклад: «Програма /usr/bin/nginx може читати тільки з /var/www/».
  2. SELinux (RHEL, CentOS): базується на мітках безпеки. Набагато потужніший, але складніший у налаштуванні.
  3. Seccomp: фільтрує системні виклики (syscalls). Наприклад: «Заборонити цьому контейнеру викликати reboot()».

Seccomp — це файрвол для системних викликів. Він каже ядру, які саме команди (syscalls) процесу дозволено виконувати.

Docker та Kubernetes мають стандартні профілі seccomp, які блокують близько 40–50 найнебезпечніших викликів (наприклад, ті, що дозволяють перепрошити BIOS або перезавантажити сервер).


  1. Чому запуск контейнера з прапорцем --privileged є небезпечним?

    Відповідь Цей прапорець надає контейнеру ВСІ capabilities хоста, відключає seccomp та AppArmor. Контейнер стає таким же потужним, як і сама хост-система, що робить його втечу на хост дуже простою.
  2. Який механізм безпеки дозволяє обмежити вебсерверу доступ тільки до його папки з контентом?

    Відповідь AppArmor або SELinux (через механізм Mandatory Access Control).
  3. Що таке Capabilities в Linux?

    Відповідь Це набір окремих привілеїв, на які розбита повна влада суперкористувача (root). Вони дозволяють надавати процесу тільки ту частину влади, яка йому дійсно потрібна.
  4. Що робить Seccomp?

    Відповідь Він фільтрує системні виклики (syscalls), які програма може надсилати ядру. Це останній рубіж захисту, який не дає зламаній програмі виконати критичні дії в системі.

Завдання: Побачити capabilities запущеного процесу.

  1. Подивіться capabilities вашої поточної оболонки (у шістнадцятковому форматі):
    Terminal window
    grep Cap /proc/$$/status
  2. Декодуйте ці значення в зрозумілі назви:
    Terminal window
    capsh --decode=$(grep CapEff /proc/$$/status | cut -f2)
  3. Перевірте, чи має файл ping спеціальні можливості:
    Terminal window
    getcap /usr/bin/ping

Критерії успіху: Ви вмієте знаходити capabilities процесів та файлів.


  • Capabilities — гранулярна влада root.
  • Drop ALL, add specific — золоте правило безпеки контейнерів.
  • LSM (AppArmor/SELinux) — обов’язковий контроль доступу понад звичайні права.
  • Seccomp — контроль системних викликів (syscalls).

Далі: Модуль 2.4: Шаруваті файлові системи (UnionFS) — дізнайтеся, як контейнери зберігають дані та як працюють шари образів.