PID Namespace
Основна інформація
PID (Process IDentifier) namespace — це функція в ядрі Linux, яка забезпечує ізоляцію процесів, дозволяючи групі процесів мати свій власний набір унікальних PID, відокремлений від PID в інших просторах імен. Це особливо корисно в контейнеризації, де ізоляція процесів є важливою для безпеки та управління ресурсами.
Коли створюється новий PID namespace, першому процесу в цьому просторі імен присвоюється PID 1. Цей процес стає "init" процесом нового простору імен і відповідає за управління іншими процесами в межах цього простору. Кожен наступний процес, створений у просторі імен, матиме унікальний PID у цьому просторі, і ці PID будуть незалежні від PID в інших просторах імен.
З точки зору процесу в PID namespace, він може бачити лише інші процеси в тому ж просторі імен. Він не знає про процеси в інших просторах імен і не може взаємодіяти з ними за допомогою традиційних інструментів управління процесами (наприклад, kill
, wait
тощо). Це забезпечує рівень ізоляції, який допомагає запобігти взаємодії процесів один з одним.
Як це працює:
Коли створюється новий процес (наприклад, за допомогою системного виклику
clone()
), процес може бути призначений новому або існуючому PID namespace. Якщо створюється новий простір імен, процес стає "init" процесом цього простору.Ядро підтримує відображення між PID у новому просторі імен та відповідними PID у батьківському просторі (тобто, просторі імен, з якого був створений новий простір). Це відображення дозволяє ядру перекладати PID за необхідності, наприклад, при надсиланні сигналів між процесами в різних просторах імен.
Процеси в PID namespace можуть бачити та взаємодіяти лише з іншими процесами в тому ж просторі імен. Вони не знають про процеси в інших просторах імен, і їхні PID є унікальними в межах їхнього простору.
Коли PID namespace знищується (наприклад, коли "init" процес простору виходить), всі процеси в цьому просторі імен завершуються. Це забезпечує належне очищення всіх ресурсів, пов'язаних з простором імен.
Лабораторія:
Створити різні простори імен
CLI
Монтування нової інстанції файлової системи /proc
, якщо ви використовуєте параметр --mount-proc
, забезпечує, що новий простір монтування має точний та ізольований вигляд інформації про процеси, специфічної для цього простору.
Docker
Перевірте, в якому просторі імен знаходиться ваш процес
Знайти всі PID простори
Зверніть увагу, що користувач root з початкового (за замовчуванням) PID простору може бачити всі процеси, навіть ті, що в нових PID просторах, тому ми можемо бачити всі PID простори.
Увійти всередину PID простору
Коли ви входите в PID простір з за замовчуванням, ви все ще зможете бачити всі процеси. І процес з цього PID ns зможе бачити новий bash у PID ns.
Також, ви можете входити в інший PID простір процесу тільки якщо ви root. І ви не можете входити в інший простір без дескриптора, що вказує на нього (як /proc/self/ns/pid
)
References
Last updated