मैं पाइथन पर आधारित एक वेब सर्वर लिख रहा हूं जो "प्लगइन्स" निष्पादित करने में सक्षम होना चाहिए ताकि कार्यक्षमता को आसानी से बढ़ाया जा सके।पायथन: क्रूट और चेजेल के साथ अविश्वसनीय स्क्रिप्ट/उपप्रोसेसर को सुरक्षित करना?
इसके लिए मैंने कई फ़ोल्डर्स (प्रत्येक प्लगइन के लिए एक) और कई शैल/पायथन स्क्रिप्ट्स के दृष्टिकोण के रूप में विचार किया है, जो विभिन्न घटनाओं के लिए पूर्वनिर्धारित नामों के नाम पर नामित हैं।
एक उदाहरण है on_pdf_uploaded.py
फ़ाइल जो सर्वर पर पीडीएफ अपलोड होने पर निष्पादित की जाती है। ऐसा करने के लिए मैं पायथन के सबप्रोसेस उपकरण का उपयोग करूंगा।
सुविधा और सुरक्षा के लिए, यह मुझे यूनिक्स पर्यावरण चर का उपयोग करने के लिए और जानकारी प्रदान करने और प्रक्रिया की कार्यशील निर्देशिका (cwd) सेट करने की अनुमति देगा ताकि वह सही स्थान तक पहुंच सकें ताकि वह अपना स्थान ढूंढ सके।
चूंकि प्लगइन कोड अविश्वसनीय स्रोत से आ रहा है, इसलिए मैं इसे यथासंभव सुरक्षित बनाना चाहता हूं। मेरा विचार था कि कोड को उपप्रोसेसर में निष्पादित करना था, लेकिन इसे एक अलग उपयोगकर्ता के साथ एक क्रोट जेल में डाल देना था, ताकि वह सर्वर पर किसी अन्य संसाधन तक नहीं पहुंच सके।
दुर्भाग्य से मुझे इसके बारे में कुछ भी नहीं मिला, और मैं अविश्वसनीय लिपि पर भरोसा नहीं करना चाहता हूं ताकि वह खुद को जेल में डाल सके।
इसके अलावा, मैं मुख्य/कॉलिंग प्रक्रिया को एक क्रोट जेल में नहीं डाल सकता, क्योंकि प्लगइन कोड एक ही समय में कई प्रक्रियाओं में निष्पादित किया जा सकता है जबकि सर्वर अन्य अनुरोधों का उत्तर दे रहा है।
तो यहां सवाल है: मैं बाकी सर्वरों को दोषपूर्ण, अविश्वसनीय कोड से क्षतिग्रस्त होने से बचाने के लिए न्यूनतम विशेषाधिकारों के साथ एक क्रोट जेल में सबप्रोसेस/स्क्रिप्ट कैसे निष्पादित कर सकता हूं?
धन्यवाद!
यह वास्तव में अपने काम है? क्या उन्हें नहीं पता कि वे किस कोड को चला रहे हैं? जो कुछ भी ... क्या इससे मदद मिलती है? [Os.chroot()] (http://docs.python.org/library/os.html#os.chroot)। साथ ही, 'os' uid आदि के साथ गड़बड़ करने के लिए उपहार मिला है तो, एक नई प्रक्रिया बनाने के लिए, (os.fork()?) तो फिर os.setuid os.execle()। – Logan