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 kernel में प्रक्रिया अलगाव प्रदान करती है, जिससे प्रक्रियाओं के एक समूह को अपने स्वयं के अद्वितीय PIDs का सेट प्राप्त होता है, जो अन्य namespaces में PIDs से अलग होता है। यह कंटेनरीकरण में विशेष रूप से उपयोगी है, जहां प्रक्रिया अलगाव सुरक्षा और संसाधन प्रबंधन के लिए आवश्यक है।
जब एक नया PID namespace बनाया जाता है, तो उस namespace में पहली प्रक्रिया को PID 1 सौंपा जाता है। यह प्रक्रिया नए namespace की "init" प्रक्रिया बन जाती है और namespace के भीतर अन्य प्रक्रियाओं का प्रबंधन करने के लिए जिम्मेदार होती है। namespace के भीतर बनाई गई प्रत्येक अगली प्रक्रिया का एक अद्वितीय PID होगा, और ये PIDs अन्य namespaces में PIDs से स्वतंत्र होंगे।
PID namespace के भीतर एक प्रक्रिया के दृष्टिकोण से, यह केवल उसी namespace में अन्य प्रक्रियाओं को देख सकती है। यह अन्य namespaces में प्रक्रियाओं के बारे में अवगत नहीं होती है, और यह पारंपरिक प्रक्रिया प्रबंधन उपकरणों (जैसे, kill
, wait
, आदि) का उपयोग करके उनके साथ बातचीत नहीं कर सकती। यह एक स्तर का अलगाव प्रदान करता है जो प्रक्रियाओं को एक-दूसरे में हस्तक्षेप करने से रोकने में मदद करता है।
जब एक नई प्रक्रिया बनाई जाती है (जैसे, clone()
सिस्टम कॉल का उपयोग करके), तो प्रक्रिया को एक नए या मौजूदा PID namespace में सौंपा जा सकता है। यदि एक नया namespace बनाया जाता है, तो प्रक्रिया उस namespace की "init" प्रक्रिया बन जाती है।
kernel नए namespace में PIDs और संबंधित PIDs के बीच एक मैपिंग बनाए रखता है जो माता-पिता namespace में होते हैं (यानी, वह namespace जिससे नया namespace बनाया गया था)। यह मैपिंग kernel को आवश्यकतानुसार PIDs का अनुवाद करने की अनुमति देती है, जैसे कि विभिन्न namespaces में प्रक्रियाओं के बीच संकेत भेजते समय।
PID namespace के भीतर प्रक्रियाएँ केवल उसी namespace में अन्य प्रक्रियाओं को देख और बातचीत कर सकती हैं। वे अन्य namespaces में प्रक्रियाओं के बारे में अवगत नहीं होती हैं, और उनके PIDs उनके namespace के भीतर अद्वितीय होते हैं।
जब एक PID namespace नष्ट किया जाता है (जैसे, जब namespace की "init" प्रक्रिया समाप्त होती है), तो उस namespace के भीतर सभी प्रक्रियाएँ समाप्त हो जाती हैं। यह सुनिश्चित करता है कि namespace से संबंधित सभी संसाधनों को सही ढंग से साफ किया जाए।
यदि आप पैरामीटर --mount-proc
का उपयोग करके /proc
फ़ाइल प्रणाली का एक नया उदाहरण माउंट करते हैं, तो आप सुनिश्चित करते हैं कि नए माउंट namespace में उस namespace के लिए विशिष्ट प्रक्रिया जानकारी का सटीक और अलगावित दृश्य है।
ध्यान दें कि प्रारंभिक (डिफ़ॉल्ट) PID नामस्थान से रूट उपयोगकर्ता सभी प्रक्रियाओं को देख सकता है, यहां तक कि नए PID नामस्थान में भी, यही कारण है कि हम सभी PID नामस्थान देख सकते हैं।
जब आप डिफ़ॉल्ट नामस्थान से PID नामस्थान के अंदर प्रवेश करते हैं, तो आप सभी प्रक्रियाओं को देख पाएंगे। और उस PID ns से प्रक्रिया नए bash को PID ns पर देख सकेगी।
इसके अलावा, आप केवल दूसरे प्रक्रिया PID नामस्थान में प्रवेश कर सकते हैं यदि आप रूट हैं। और आप दूसरे नामस्थान में बिना एक वर्णनकर्ता के प्रवेश नहीं कर सकते जो इसे इंगित करता है (जैसे /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)