प्रति प्रक्रिया निजी फाइल सिस्टम आरोह बिंदु


24

मैं unshareकमांड चेक कर रहा था और उसके अनुसार मैन पेज,

   unshare - run program with some namespaces unshared from parent

मैं यह भी देखता हूं कि एक प्रकार का नामस्थान सूचीबद्ध है,

 mount namespace
              mounting and unmounting filesystems will not affect rest of the system.

वास्तव में इस माउंट नाम स्थान का उद्देश्य क्या है ? मैं कुछ उदाहरण की मदद से इस अवधारणा को समझने की कोशिश कर रहा हूं।



@ गिल्स, धन्यवाद। मैं इसकी जांच करुँगा। इस बीच, कृपया मुझे बताएं कि उत्तर में कुछ और जोड़ना है या नहीं।
रमेश

जवाबों:


29

रनिंग unshare -mकॉलिंग प्रक्रिया को अपने माउंट नेमस्पेस की एक निजी प्रति देता है, और फाइल सिस्टम विशेषताओं को भी अनचाहे रखता है ताकि यह अब अपनी रूट डायरेक्टरी, वर्तमान निर्देशिका या umask विशेषताओं को किसी अन्य प्रक्रिया के साथ साझा न करे।

तो उपरोक्त पैराग्राफ क्या कहता है? आइए हम एक सरल उदाहरण का उपयोग करके देखें और समझें।

टर्मिनल 1:

मैं पहले टर्मिनल में नीचे कमांड करता हूं।

#Creating a new process
unshare -m /bin/bash
#creating a new mount point
secret_dir=`mktemp -d --tmpdir=/tmp`
#creating a new mount point for the above created directory. 
mount -n -o size=1m -t tmpfs tmpfs $secret_dir
#checking the available mount points. 
grep /tmp /proc/mounts 

अंतिम कमांड मुझे आउटपुट के रूप में देता है,

tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0

अब, मैंने निम्नलिखित कमांड भी किया।

cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa

lsकमांड का आउटपुट है,

ls -lFa
total 4
drwxrwxrwt   2 root root   80 Sep  3 22:23 ./
drwxrwxrwt. 16 root root 4096 Sep  3 22:22 ../
-rw-r--r--   1 root root    0 Sep  3 22:23 hello
-rw-r--r--   1 root root    0 Sep  3 22:23 helloagain

तो यह सब करने में कौन सी बड़ी बात है? मुझे ऐसा क्यों करना चाहिए?

मैं अब एक और टर्मिनल खोलता हूं ( टर्मिनल 2 ) और नीचे दिए गए कमांड करता हूं।

cd /tmp/tmp.7KtrAsd9lx
ls - lFa

आउटपुट नीचे है।

ls -lFa
total 8
drwx------   2 root root 4096 Sep  3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep  3 22:22 ../

फ़ाइलों helloऔर helloagainदिखाई नहीं देते हैं और मैं भी इन फ़ाइलों की जाँच करने के रूट के रूप में लॉग इन हैं। तो लाभ यह है, यह सुविधा हमारे लिए एक निजी अस्थायी फाइल सिस्टम बनाने के लिए संभव बनाती है जो कि अन्य रूट-स्वामित्व वाली प्रक्रियाओं को देख या ब्राउज़ नहीं कर सकता है।

मैन ऑफ द पृष्ठ से unshare,

माउंट नेमस्पेस माउंटिंग और अनमाउंटिंग फाइल सिस्टम सिस्टम के बाकी सिस्टम (CLONE_NEWNS फ्लैग) को प्रभावित नहीं करेंगे, सिवाय उन फाइल सिस्टम के जिन्हें स्पष्ट रूप से साझा किया गया है (माउंट -मेक-शेयर्ड के साथ; साझा किए गए फ्लैग के लिए सेल्फ / माउंटिनफो)।

यह सुनिश्चित करने की अनुशंसा की जाती है कि माउंट --make-rpStreet या माउंट --make-rslave को unshare --mount के बाद सुनिश्चित करें कि नए नामस्थान में माउंटपॉइंट वास्तव में पैतृक नाम स्थान से अनसेक्ड हैं।

नामस्थान के लिए उपयोग की जा रही मेमोरी VFS है जो कर्नेल से है। और - अगर हम इसे पहली बार में सेट करते हैं - हम पूरे वर्चुअल वातावरण बना सकते हैं जिसमें हम रूट उपयोगकर्ता हैं बिना रूट अनुमति के।

संदर्भ:

इस ब्लॉग पोस्ट के विवरण का उपयोग करके उदाहरण तैयार किया गया है । साथ ही, इस उत्तर के उद्धरण माइक के इस अद्भुत विवरण से हैं । इस बारे में एक और अद्भुत पढ़ने के जवाब यहां से मिल सकते हैं


1
this feature makes it possible for us to create a private temporary filesystem that even other root-owned processes cannot see or browse through.और की तुलना में chroot, chrootफ़ाइलों के साथ दूसरों को दिखाई देते हैं। यह आश्चर्यजनक है, और यह वाक्य संभवतः उत्तर के शीर्ष पर होना चाहिए। +1।
सर्गी कोलोडियाज़नी

1
कुछ भी नहीं बचता जड़ से! का उपयोग करके nsenterआप नामस्थान में प्रवेश कर सकते हैं और अस्थायी फाइलों को देख सकते हैं। केवल एक अनशेयर (टेम्पर्ड का मालिक) मानते हुए, फिर sudo nsenter -t $(pgrep -P $(ps aux | grep unshare | grep -v grep | awk '{print $2}')) -m -pसामग्री को देखने की अनुमति देगा
इयरकैम

2

यदि आपके पास अपने सिस्टम पर बबलवैप स्थापित है, तो आप इसे एक चरण में आसानी से कर सकते हैं:

bwrap --dev-bind / / --tmpfs /tmp bash

ऊपर दिए गए उदाहरण में, आंतरिक bash का अपना दृश्य / tmp पर होगा।

@ रमेश-एस जवाब से प्रेरित समाधान - इसके लिए धन्यवाद!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.