User Namespace
मूल जानकारी
एक उपयोगकर्ता नेमस्पेस एक लिनक्स कर्नेल सुविधा है जो उपयोगकर्ता और समूह आईडी मैपिंग की अलगाव प्रदान करती है, जिससे प्रत्येक उपयोगकर्ता नेमस्पेस के पास अपना उपयोगकर्ता और समूह आईडी सेट होता है। यह अलगाव प्रक्रियाओं को सक्षम करता है जो विभिन्न उपयोगकर्ता नेमस्पेस में चल रही होती हैं, ताकि वे विभिन्न विशेषाधिकार और स्वामित्व रख सकें, भले ही वे संख्यात्मक रूप से एक ही उपयोगकर्ता और समूह आईडी साझा करते हों।
उपयोगकर्ता नेमस्पेस विशेष रूप से कंटेनरीकरण में उपयोगी है, जहां प्रत्येक कंटेनर को अपने विशिष्ट उपयोगकर्ता और समूह आईडी सेट होनी चाहिए, जिससे कंटेनर और मेज़बान सिस्टम के बीच बेहतर सुरक्षा और अलगाव हो सके।
काम कैसे करता है:
जब एक नया उपयोगकर्ता नेमस्पेस बनाया जाता है, तो यह उपयोगकर्ता और समूह आईडी मैपिंग का खाली सेट के साथ शुरू होता है। इसका मतलब है कि नए उपयोगकर्ता नेमस्पेस में चल रही किसी भी प्रक्रिया को आरंभ में नेमस्पेस के बाहर कोई विशेषाधिकार नहीं होता है।
आईडी मैपिंग नए नेमस्पेस में उपयोगकर्ता और समूह आईडी के बीच और माता (या मेज़बान) नेमस्पेस में वहां की उपयोगकर्ता और समूह आईडी के बीच स्थापित की जा सकती है। यह नए नेमस्पेस में प्रक्रियाओं को उपयोगकर्ता और समूह आईडी के अनुसार विशेषाधिकार और स्वामित्व देने की अनुमति देता है। हालांकि, आईडी मैपिंग को विशेष सीमाओं और आईडी के उपसमूहों पर प्रतिबंधित किया जा सकता है, जिससे नए नेमस्पेस में प्रक्रियाओं को दी जाने वाली विशेषाधिकारों पर नियंत्रण करने की सुविधा होती है।
एक उपयोगकर्ता नेमस्पेस के भीतर, प्रक्रियाओं को नेमस्पेस के भीतर कार्यों के लिए पूर्ण रूप से रूट विशेषाधिकार (UID 0) हो सकते हैं, जबकि उनके पास नेमस्पेस के बाहर सीमित विशेषाधिकार हो सकते हैं। यह उन्हें मेज़बान सिस्टम पर पूर्ण रूट विशेषाधिकार न होने के बावजूद अपने नेमस्पेस के भीतर रूट जैसी क्षमताओं के साथ कंटेनर चलाने की अनुमति देता है।
प्रक्रियाएँ
setns()
सिस्टम कॉल का उपयोग करके नेमस्पेस के बीच ले जा सकती हैं याunshare()
याclone()
सिस्टम कॉल का उपयोग करकेCLONE_NEWUSER
ध्वज के साथ नए नेमस्पेस बना सकती हैं। जब कोई प्रक्रिया नए नेमस्पेस में जाती है या एक नया नेमस्पेस बनाती है, तो वह उस नेमस्पेस से संबंधित उपयोगकर्ता और समूह आईडी मैपिंग का उपयोग करने लगेगी।
लैब:
विभिन्न नेमस्पेस बनाएँ
CLI
यदि आप --mount-proc
पैरामीटर का उपयोग करते हैं तो /proc
फ़ाइल सिस्टम का एक नया इंस्टेंस माउंट करके, आप सुनिश्चित करते हैं कि नया माउंट नेमस्पेस के पास उस नेमस्पेस के लिए विशिष्ट प्रक्रिया सूचना का सटीक और अलग दृश्य है।
उपयोगकर्ता नेमस्पेस का उपयोग करने के लिए, डॉकर डेमन को --userns-remap=default
के साथ शुरू किया जाना चाहिए (यूबंटू 14.04 में, इसे /etc/default/docker
को संशोधित करके और फिर sudo service docker restart
को क्रियान्वित करके किया जा सकता है)
जांचें कि आपकी प्रक्रिया किस नेमस्पेस में है
आप डॉकर कंटेनर से उपयोगकर्ता मानचित्र की जांच कर सकते हैं:
या मेज़बान से:
सभी उपयोगकर्ता नेमस्पेस खोजें
एक उपयोगकर्ता नेमस्पेस के अंदर प्रवेश करें
आप केवल रूट होने पर दूसरे प्रक्रिया नेमस्पेस में प्रवेश कर सकते हैं। और आप उसमें प्रवेश नहीं कर सकते बिना एक डिस्क्रिप्टर के जो इसे पॉइंट करता है (जैसे /proc/self/ns/user
)।
नया उपयोगकर्ता नेमस्पेस बनाएं (मैपिंग के साथ)
क्षमताओं को पुनर्प्राप्त करना
उपयोगकर्ता नेमस्पेस के मामले में, जब एक नया उपयोगकर्ता नेमस्पेस बनाया जाता है, तो नेमस्पेस में प्रवेश करने वाले प्रक्रिया को उस नेमस्पेस के भीतर पूरी सेट की क्षमताएं प्रदान की जाती है। ये क्षमताएं प्रक्रिया को विशेषाधिकारित ऑपरेशन करने की अनुमति देती हैं जैसे फाइल सिस्टम माउंट करना, डिवाइस बनाना, या फ़ाइलों की स्वामित्व परिवर्तित करना, लेकिन केवल अपने उपयोगकर्ता नेमस्पेस के संदर्भ में।
उदाहरण के लिए, जब आपके पास उपयोगकर्ता नेमस्पेस के भीतर CAP_SYS_ADMIN
क्षमता होती है, तो आप उस क्षमता की आवश्यकता होने पर ऑपरेशन कर सकते हैं, जैसे कि फाइल सिस्टम माउंट करना, लेकिन केवल अपने उपयोगकर्ता नेमस्पेस के संदर्भ में। इस क्षमता के साथ आप जो भी ऑपरेशन करते हैं, वे मुख्य सिस्टम या अन्य नेमस्पेस पर प्रभाव नहीं डालेंगे।
इसलिए, यदि एक नए प्रक्रिया को एक नए उपयोगकर्ता नेमस्पेस के भीतर लाने से आपको सभी क्षमताएं वापस मिल जाएंगी (CapEff: 000001ffffffffff), तो आप वास्तव में केवल उन्हें उपयोग कर सकते हैं जो नेमस्पेस से संबंधित हैं (उदाहरण के लिए माउंट) लेकिन सभी नहीं। इसलिए, यह अपने आप में एक डॉकर कंटेनर से बाहर निकलने के लिए पर्याप्त नहीं है।
```bash # There are the syscalls that are filtered after changing User namespace with: unshare -UmCpf bash
Probando: 0x067 . . . Error Probando: 0x070 . . . Error Probando: 0x074 . . . Error Probando: 0x09b . . . Error Probando: 0x0a3 . . . Error Probando: 0x0a4 . . . Error Probando: 0x0a7 . . . Error Probando: 0x0a8 . . . Error Probando: 0x0aa . . . Error Probando: 0x0ab . . . Error Probando: 0x0af . . . Error Probando: 0x0b0 . . . Error Probando: 0x0f6 . . . Error Probando: 0x12c . . . Error Probando: 0x130 . . . Error Probando: 0x139 . . . Error Probando: 0x140 . . . Error Probando: 0x141 . . . Error Probando: 0x143 . . . Error
Last updated