Linux bwrap गाइड: कस्टम सैंडबॉक्स वातावरण बनाएं

परिचय

लिनक्स पर बिना रूट विशेषाधिकारों के भी प्रक्रियाओं, नेटवर्क और स्टोरेज को सुरक्षित रूप से अलग-थलग करने के लिए Bubblewrap (bwrap) एक उत्कृष्ट टूल है। यह तकनीक कंटेनर आर्किटेक्चर की आंतरिक कार्यप्रणाली को गहराई से समझने का व्यावहारिक अवसर देती है। इस ट्यूटोरियल में हम Ubuntu 24.04 सिस्टम पर bwrap को कंफिगर करेंगे और इसके प्रमुख आइसोलेशन फीचर्स का व्यावहारिक परीक्षण करेंगे।

1. Bubblewrap इंस्टॉलेशन और बुनियादी सैंडबॉक्स का सेटअप

सिस्टम में न्यूनतम और सुरक्षित कंटेनर परिवेश तैयार करने के लिए आधिकारिक पैकेज रिपॉजिटरी से bubblewrap को इंस्टॉल करते हैं।

sudo apt-get update -qq && sudo apt-get install -y bubblewrap

bwrap यूटिलिटी गैर-विशेषाधिकार प्राप्त (unprivileged) यूजर लेवल पर लिनक्स नेमस्पेस का उपयोग करके एक स्वायत्त शेल वातावरण शुरू करती है।
होस्ट सिस्टम की आवश्यक डायरेक्टरीज़ को केवल रीड-ओनली मोड में माउंट करके एक सुरक्षित और पृथक न्यूनतम शेल निष्पादित किया जा सकता है।
⚙️ [महत्वपूर्ण कमांड विकल्प]

--ro-bind : होस्ट की फाइलों या डायरेक्टरीज़ को सैंडबॉक्स के भीतर केवल पढ़ने योग्य (Read-Only) रूप में जोड़ता है।
--bind : होस्ट पाथ को सैंडबॉक्स में पढ़ने और लिखने (Read-Write) की पूर्ण अनुमति के साथ मैप करता है।
--dev : सैंडबॉक्स में जरूरी वर्चुअल डिवाइस नोड्स (/dev) को उपलब्ध कराता है।
--proc : एक स्वतंत्र प्रोसेस नेमस्पेस आरंभ करके प्रोसेस मेटाडेटा डायरेक्टरी (/proc) को माउंट करता है।
--tmpfs : इन-मेमोरी आधारित अस्थाई स्टोरेज बनाता है, जो सैंडबॉक्स बंद होते ही नष्ट हो जाता है।
--unshare-all : यूजर, नेटवर्क, PID, IPC, UTS और Cgroup जैसे समस्त लिनक्स नेमस्पेस को होस्ट से पूरी तरह अलग कर देता है।
--symlink : सैंडबॉक्स परिवेश के अंदर लक्षित पाथ के लिए सिम्बॉलिक लिंक कॉन्फ़िगर करता है।

bwrap –ro-bind /usr /usr –symlink usr/lib /lib –symlink usr/lib64 /lib64 –proc /proc –dev /dev sh -c “echo ‘Hello from isolated bwrap sandbox!’”

2. रीड-ओनली बाइंड माउंट के जरिए फाइल सिस्टम सुरक्षा

रीड-ओनली सुरक्षा मॉडल की पुष्टि करने के लिए सबसे पहले परीक्षण डायरेक्टरी /tmp/bwrap-test बनाकर उसमें एक साधारण टेक्स्ट फाइल तैयार करते हैं।

mkdir -p /tmp/bwrap-test && echo ‘Original Content’ > /tmp/bwrap-test/data.txt

इसके बाद --ro-bind विकल्प द्वारा होस्ट की डायरेक्टरी /tmp/bwrap-test को कंटेनर के अंदर /test पाथ पर रीड-ओनली अटैच करके फाइल को पढ़ा जाता है।
स्क्रीन पर मूल डेटा Original Content सफलतापूर्वक प्रदर्शित होता है, जो यह साबित करता है कि सैंडबॉक्स को आवश्यक फाइलें पढ़ने की अनुमति सही ढंग से मिल रही है।

bwrap –ro-bind /usr /usr –symlink usr/lib /lib –symlink usr/lib64 /lib64 –ro-bind /tmp/bwrap-test /test sh -c “cat /test/data.txt”

अब उसी सुरक्षित शेल के भीतर मौजूद /test/data.txt फाइल में नया डेटा लिखने अथवा उसे ओवरराइट करने का प्रयास करते हैं।
चूंकि डायरेक्टरी केवल रीड-ओनली परमिशन के साथ माउंट की गई थी, इसलिए राइट ऑपरेशन ब्लॉक हो जाता है और एरर हैंडलिंग द्वारा Write protected successfully संदेश मिलता है—यानी होस्ट फाइल सुरक्षित बनी रहती है।

bwrap –ro-bind /usr /usr –symlink usr/lib /lib –symlink usr/lib64 /lib64 –ro-bind /tmp/bwrap-test /test sh -c “echo ‘Hacked’ > /test/data.txt 2>&1 || echo ‘Write protected successfully’”

3. प्रोसेस और नेटवर्क नेमस्पेस का पृथक्करण

जब हम --unshare-pid और --proc /proc विकल्पों को साथ निष्पादित करते हैं, तो होस्ट ऑपरेटिंग सिस्टम से पूरी तरह कटी हुई स्वतंत्र प्रोसेस ट्री तैयार होती है।
कमांड निष्पादन पर होस्ट पर चल रही सैकड़ों प्रक्रियाएं छिप जाती हैं; सैंडबॉक्स में केवल bwrap, sh, और ps ही दिखाई देते हैं, जहां पहला प्रोसेस स्वतः PID 1 बन जाता है।

bwrap –ro-bind /usr /usr –symlink usr/lib /lib –symlink usr/lib64 /lib64 –proc /proc –unshare-pid sh -c “ps -ef”

अतिरिक्त रूप से --unshare-net फ्लैग जोड़ने पर कंटेनर का नेटवर्क स्टैक मुख्य ऑपरेटिंग सिस्टम से पूर्णतः डिस्कनेक्ट हो जाता है।
नेटवर्क इंटरफेस जांचने पर लूपबैक (lo) तक अनुपलब्ध दिखता है, जिससे किसी भी तरह के अनधिकृत बाहरी इनबाउंड या आउटबाउंड नेटवर्क कम्युनिकेशन की संभावना समाप्त हो जाती है।

bwrap –ro-bind /usr /usr –symlink usr/lib /lib –symlink usr/lib64 /lib64 –proc /proc –unshare-net sh -c “ip link show”

4. tmpfs के उपयोग से अस्थायी और सुरक्षित वर्कस्पेस निर्माण

bwrap के --tmpfs /tmp आर्गुमेंट की सहायता से रैम-आधारित वोलेटाइल स्टोरेज माउंट करके सैंडबॉक्स के भीतर /tmp/sandbox.log लॉग फाइल बनाई जाती है।
अलग किए गए परिवेश में फाइल निर्माण, राइटिंग और रीडिंग सामान्य रूप से कार्य करते हैं, जिससे यह स्पष्ट होता है कि प्रक्रिया को एक स्वतंत्र कार्यक्षेत्र प्राप्त है।

bwrap –ro-bind /usr /usr –symlink usr/lib /lib –symlink usr/lib64 /lib64 –proc /proc –tmpfs /tmp sh -c “echo ‘Ephemeral data’ > /tmp/sandbox.log && ls -l /tmp/sandbox.log”

सैंडबॉक्स सत्र समाप्त करने के उपरांत मुख्य होस्ट सिस्टम पर उसी फाइल पाथ /tmp/sandbox.log की जांच की जाती है।
--tmpfs में लिखा गया सारा डेटा प्रक्रिया बंद होते ही मेमोरी से स्वतः साफ हो जाता है, जिससे होस्ट सिस्टम पर कोई अनचाहा निशान या अवशेष नहीं बचता।

ls -l /tmp/sandbox.log 2>&1 || echo ‘Host filesystem remained completely untouched’

इस प्रकार bwrap की मदद से बिना जटिल बुनियादी ढांचे के हल्का और सुरक्षित सैंडबॉक्स नियंत्रित किया जा सकता है। अपनी परियोजना की सुरक्षा जरूरतों के अनुसार फाइल एक्सेस और नेटवर्क अनुमतियों को विभाजित करके एक सुदृढ़ आइसोलेटेड एनवायरनमेंट तैयार करें।