क्या सैंडबॉक्स की तरह एक बैश स्क्रिप्ट को चलाना संभव है?


13

हमारे उत्पाद को एक निश्चित लक्ष्य को प्राप्त करने के लिए एक नाजुक सर्वर पर एक अज्ञात बैश स्क्रिप्ट निष्पादित करने की आवश्यकता है। यह बैश स्क्रिप्ट उपयोगकर्ता द्वारा आपूर्ति की जाती है। हम यह सुनिश्चित करने में रुचि रखते हैं कि केवल विशिष्ट आदेशों की अनुमति है, और यह कि अन्य सभी नहीं हैं। इसके अलावा, हमें कुछ कमांड्स को दूसरों के साथ बदलने की आवश्यकता है।

इसलिए, उदाहरण के लिए, हम स्क्रिप्ट को निष्पादित करना चाहते हैं और निम्नलिखित आदेशों को अनुमति देते हैं: इको बिल्ली जाग

लेकिन किसी अन्य कमांड को अनुमति न दें (हम यहां एक विशिष्ट सूची की आपूर्ति नहीं करना चाहते हैं)।

इसके अलावा, यदि स्क्रिप्ट में कमांड cp है तो हम इसे कैप्चर करना चाहेंगे और एक अलग कमांड पर रीडायरेक्ट करेंगे (जो कि उपनाम का उपयोग करके किया जा सकता है)।

किसी भी विचार यह कैसे किया जाता है?

जवाबों:


9

सबसे आसान तरीका यह है कि चेरोट जेल का उपयोग केवल उन कमांडों से करें जिन्हें आप स्क्रिप्ट चलाना चाहते हैं। आप फिर स्क्रिप्ट को रैपर के माध्यम से चलाते हैं जो chrootनिर्देशिका में कॉल करता है और फिर स्क्रिप्ट निष्पादित करता है।


17

एक वर्चुअल मशीन के अंदर स्क्रिप्ट को चलाने के लिए 100% सुरक्षित नहीं है, जो संभवतः स्क्रिप्ट को अपने लक्ष्य को प्राप्त करने से रोक देगा। लेकिन दो विशेषताएं हैं जो आपकी मदद कर सकती हैं। यदि आप चिंतित हैं कि स्क्रिप्ट दुर्भावनापूर्ण व्यक्ति द्वारा लिखी गई थी, तो ये सुविधाएँ पर्याप्त नहीं हैं; लेकिन अगर आप केवल इस बात से चिंतित हैं कि स्क्रिप्ट आपके सिस्टम को खराब कर सकती है क्योंकि यह एक लापरवाह प्रोग्रामर द्वारा या विभिन्न उद्देश्यों को ध्यान में रखकर लिखा गया था, तो इन दोनों में से कोई भी एक अच्छा सैंडबॉक्सिंग वातावरण प्रदान करता है।

  • आप बैश को इनवॉइस करके प्रतिबंधित शेल चला सकते हैं bash -r। मैं आपको विस्तृत विवरण के लिए बैश मैनुअल का उल्लेख करता हूं; मूल विचार यह है कि स्क्रिप्ट उन आदेशों का आह्वान नहीं कर सकती है जो अंदर नहीं हैं $PATH, बदल नहीं सकते हैं $PATH, एक फ़ाइल से या कुछ और प्रतिबंधों को पुनर्निर्देशित नहीं कर सकते हैं। यह स्थापित करने के लिए काफी सरल है, लेकिन अगर अज्ञात स्क्रिप्ट आपके लिए समीक्षा करने के लिए बहुत जटिल है, तो यह बहुत सी चीजों का उपयोग करने की संभावना है जो प्रतिबंधित शेल में निषिद्ध हैं।

  • आप एक चिरोट जेल स्थापित कर सकते हैं । विचार एक निर्देशिका ट्री सेट करना /some/rootऔर स्क्रिप्ट को ऐसे वातावरण में चलाना है जो मानता है कि /some/rootसंपूर्ण फाइलसिस्टम ( chrootपरिवर्तन रूट के लिए कम है)। एक बार डायरेक्टरी ट्री सेट हो जाने के बाद, स्क्रिप्ट (कॉपी किए गए /some/root/myscript) को चलाएं chroot /some/root /bin/bash /myscript। उदाहरण के लिए, आप /some/root/binउन निर्देशिकाओं के साथ एक निर्देशिका स्थापित करेंगे जिन्हें आप अनुमति देना चाहते हैं, और चिरोषित कार्यक्रम इस निर्देशिका को देखेंगे /bin। आपको चुरोट के अंदर कार्यक्रम के निष्पादन के लिए आवश्यक सभी चीज़ों की प्रतिलिपि बनाने की आवश्यकता होगी: पुस्तकालयों, डेटा फ़ाइलों, bashस्क्रिप्ट, स्वयं, आदि। स्क्रिप्ट /procको चेरोट के अंदर घुड़सवार की आवश्यकता हो सकती है ; आप इस तरह से एक कमांड के साथ कर सकते हैं mount -t proc proc /proc

    यदि आपको पूरी निर्देशिका ट्री को स्क्रिप्ट के लिए उपलब्ध कराने की आवश्यकता है, तो कहें /var/example, आपके पास कई विकल्प हैं। आप के तहत एक प्रतिलिपि बना सकते हैं /some/root। आप हार्ड लिंक बना सकते हैं (यदि वे आपके एप्लिकेशन के लिए काम करते हैं और चिरोट एक ही फाइल सिस्टम में है)। लिनक्स पर, आप चेरोट के अंदर mount --bind /var/example /some/root/var/example"ग्राफ्ट" कर सकते हैं /var/example। ध्यान दें कि प्रतीकात्मक लिंक काम नहीं कर सकता क्योंकि लिंक का लक्ष्य चेरोट के अंदर निर्धारित होता है।

    ध्यान दें कि चेरोट पूर्ण सुरक्षा प्रदान नहीं करता है, विशेष रूप से रूट के रूप में चलने वाली प्रक्रियाओं के खिलाफ। उदाहरण के लिए, एक रूट प्रक्रिया चेरोट के अंदर एक उपकरण फ़ाइल बना सकती है और इसके माध्यम से पूरे डिस्क तक पहुंच सकती है। एक क्रोकेटेड प्रक्रिया अभी भी नेटवर्क कनेक्शन बना सकती है (आप इसे कैरोट के अंदर किसी भी नेटवर्किंग प्रोग्राम को शामिल नहीं कर सकते हैं और यह सुनिश्चित कर सकते हैं कि अविश्वासित प्रोग्राम एक फ़ाइल नहीं बना सकता है और इसे निष्पादन योग्य बना सकता है या किसी मौजूदा निष्पादन योग्य को अधिलेखित कर सकता है)।


आपको आवश्यक सभी चीज़ों की प्रतिलिपि बनाने की आवश्यकता होगी , क्या मैं कॉपी के बजाय प्रतीकात्मक या कठिन लिंक बना सकता हूं?
kyb

1
@kyb हार्ड लिंक: हाँ। प्रतीकात्मक लिंक: नहीं, एक प्रतीकात्मक लिंक केवल उस फ़ाइल को इंगित कर सकता है जिसे आप देख सकते हैं, यह आपको चेरोट से बचने नहीं देता है। हार्ड लिंक इसके लिए उपयोग करने के लिए कठिन हैं और पूरी तरह से: वे तोड़ते हैं यदि आप फ़ाइल को प्रतिस्थापित करते हैं, तो वे मूल प्रतिलिपि को उजागर करते हैं अगर यह चेरोट के अंदर लिखने योग्य है। यदि आप एक संपूर्ण पेड़ उपलब्ध कराना चाहते हैं, तो या तो उसकी नकल करें या केवल पढ़ने के लिए बांध दें।
गिलेस एसओ- बुराई को रोकना '

मैं की तरह उपलब्ध आम आदेशों बनाने की जरूरत है grep, awk, units, आदि क्या मुझे मैन्युअल हर बिन फ़ाइल और सभी dependancies कॉपी करने के लिए या वहाँ स्पष्ट रूप से बताने के लिए क्या utils chroot में काम करना चाहिए कुछ आसान हैक है जरूरत?
kyb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.