2012-05-14 17 views
8

मेरे पास अविश्वसनीय डब्लूएसजीआई-ऐप्स के साथ अजगर-परियोजनाओं का समूह है। मुझे उन्हें अनुकरण और सुरक्षित रूप से चलाने की जरूरत है। इसलिए मुझे निर्देशिका एक्सेस, पायथन मॉड्यूल उपयोग और सीपीयू और मेमोरी के लिए सीमाओं के लिए प्रतिबंधों की आवश्यकता है।पायथन कोड जेलिंग

मैं दो तरीकों पर विचार करें: परिभाषित फ़ाइल से imp मॉड्यूल WSGI-वस्तु के माध्यम से

  1. आयात, और pysandbox के साथ चल रहा है। अब मैं SandboxError: Read only object जब कर रही है:

    self.config = SandboxConfig('stdout') 
    self.sandbox = Sandbox(self.config) 
    self.s = imp.get_suffixes() 
    wsgi_obj = imp.load_module("run", open(path+"/run.py", "r"), path, self.s[2]).app 
    … 
    return self.sandbox.call(wsgi_obj, environ, start_response) 
    
  2. संशोधित अजगर दुभाषिया, संभावित जोखिम भरा मॉड्यूल, समानांतर प्रक्रियाओं में चल बाहर करते हैं, ZMQ/यूनिक्स सॉकेट के माध्यम से संवाद। मुझे यह भी नहीं पता कि यहां कहां से शुरू करना है।

आप क्या सिफारिश कर सकते हैं?

+0

प्रक्रिया अलगाव निश्चित रूप से एक अच्छा विचार है। वर्चुअलाइजेशन का उपयोग करना बेहतर होगा। मुझे pysandbox के बारे में पता नहीं है, लेकिन मैंने सुना है कि सैंडबॉक्सिंग पाइथन कोड के लिए मौजूदा समाधान विशेष रूप से अच्छे नहीं हैं। –

+1

सीपीथॉन में सैंडबॉक्सिंग बहुत अच्छी नहीं है, लेकिन अन्य पायथन दुभाषिया, विशेष रूप से पीईपीई, में अधिक सैंडबॉक्सिंग समर्थन है। –

+0

मैंने पीपीपी सैंडबॉक्सिंग की कोशिश की। यह बहुत जटिल है। – sashab

उत्तर

3

मैं आपके एप्लिकेशन को प्रत्येक ऐप के लिए एक अलग प्रक्रिया और कॉन्फ़िगरेशन के साथ, और उपयोगकर्ता-स्तरीय अनुमतियों (एक अलग उपयोगकर्ता पर प्रत्येक अविश्वसनीय ऐप) के साथ बंदूक के साथ चलाऊंगा। प्रत्येक बंदूकधारक उदाहरण उपयोगकर्ता-श्रेणी पोर्ट पर लोकहोस्ट पर काम करेगा, और nginx या कोई अन्य वेबसर्वर उनसे जुड़ने और वेब पर उनकी सेवा करने के लिए कनेक्ट हो सकता है।

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

इस तरह के दृष्टिकोण के फायदों में से एक यह है कि प्रत्येक आवेदन उपयुक्त होने पर पाइथन के एक अलग संस्करण पर चला सकता है; वर्चुअल मशीन सैंडबॉक्स के साथ वे पूरी तरह से विभिन्न ऑपरेटिंग सिस्टम पर भी चला सकते हैं।

संपादित करें: वीएम सैंडबॉक्स दृष्टिकोण के बिना मेमोरी उपयोग को सीमित करने के लिए, this question देखें। सीपीयू उपयोग को सीमित करने के लिए, बंदूक की सेटिंग्स को ट्विक करें - प्रति कोर एक गीवेंट-शैली कार्यकर्ता को स्पिन करें जिसे किसी एप्लिकेशन को उपयोग करने की अनुमति है।

फिर से संपादित करें: PyPy's sandboxing mechanism का उपयोग करने के लिए एक पूरी तरह से अलग दृष्टिकोण होगा जो सीपीथॉन प्लस एक सैंडबॉक्सिंग मॉड्यूल से कहीं अधिक सुरक्षित होना चाहिए। हालांकि, मैं guincorn या gunicorn + आभासी मशीन दृष्टिकोण पसंद करेंगे।

+0

रूटिंग के लिए समाधान के रूप में आप क्या सलाह दे सकते हैं? यह तेज़ और async होना चाहिए, और कुछ अतिरिक्त तर्क nginx के कारण समाधान नहीं है। तूफान? – sashab

+0

हम्मम्म, मुझे यकीन नहीं है, मैं खुद को बंदूक के लिए सामने के रूप में nginx का उपयोग करता हूं और ढेर के उस हिस्से के साथ ज्यादा प्रयोग नहीं किया है। क्या अतिरिक्त तर्क आपको कस्टम कोड लिखने की आवश्यकता है? उस मामले में शायद टोरनाडो सबसे अच्छा होगा। गनिकोर्न के पास टॉरनाडो समर्थन का कुछ प्रकार है लेकिन मेरा मानना ​​है कि यह आपके मन में आपके मुकाबले एक अलग उद्देश्य के लिए है। –

+0

खैर, मुझे मूल रूप से उपडोमेन को ऐप पर रूट करने की आवश्यकता है, और इसे गतिशील रूप से करें (ऐप्स की संख्या बदल सकती है)। – sashab

संबंधित मुद्दे