PID Namespace
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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" процес простору завершується), всі процеси в цьому просторі завершуються. Це забезпечує належне очищення всіх ресурсів, пов'язаних з простором.
Монтування нової інстанції файлової системи /proc
, якщо ви використовуєте параметр --mount-proc
, забезпечує, що новий простір монтування має точний та ізольований вигляд інформації про процеси, специфічної для цього простору.
Зверніть увагу, що користувач root з початкового (за замовчуванням) PID простору може бачити всі процеси, навіть ті, що в нових PID просторах, тому ми можемо бачити всі PID простори.
Коли ви входите в PID простір з за замовчуванням, ви все ще зможете бачити всі процеси. І процес з цього PID ns зможе бачити новий bash у PID ns.
Також, ви можете входити в інший PID простір процесу тільки якщо ви root. І ви не можете входити в інший простір без дескриптора, що вказує на нього (наприклад, /proc/self/ns/pid
)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)