2009-11-15 30 views
7

मैं एक परियोजना है जो अजगर कोड उपयोगकर्ता एक HTML प्रपत्र के माध्यम से प्रवेश करती है कि क्रियान्वित शामिल है शुरू करने में देख रहा हूँ पर उपयोगकर्ताओं द्वारा जमा किए अजगर कोड को क्रियान्वित। मुझे पता है कि यह संभावित रूप से घातक हो सकता है (exec), लेकिन मैंने इसे कम से कम one instance में सफलतापूर्वक देखा है।सुरक्षित रूप से सर्वर

मैंने Python Challenge के डेवलपर्स को एक ईमेल भेजा और मुझे बताया गया कि वे एक समाधान का उपयोग कर रहे हैं जो वे स्वयं के साथ आए हैं, और वे केवल यह कहते हैं कि वे "ऑपरेटिंग सिस्टम द्वारा प्रदान की गई सुरक्षा सुविधाओं" का उपयोग कर रहे हैं और "ऑपरेटिंग सिस्टम [लिनक्स] आपको आवश्यक सुरक्षा प्रदान करता है यदि आपको पता है कि इसका उपयोग कैसे किया जाए।"

किसी को भी कैसे एक सुरक्षित और सुरक्षित तरीके से ऐसा करने के बारे में जाने के लिए पता होगा? मैंने प्रत्येक सबमिशन के लिए एक नया वीएम बनाने के बारे में सोचा, लेकिन उसमें बहुत अधिक ओवरहेड होगा और प्रभावी रूप से कार्यान्वित करने के लिए असंभव होना चाहिए।

+0

आत्महत्या टैग के लिए +1 .. lol –

+0

यह सोचने के लिए आओ ... है न इस सवाल एस एफ (या शायद SU) के लिए बेहतर अनुकूल? – Stephan202

+1

@ स्टीफन 202: अनिवार्य रूप से नहीं, क्योंकि यह * एक ** प्रोग्रामिंग ** समस्या है। – voyager

उत्तर

0

का उपयोग chroot (Wikipedia) समाधान, उदा का हिस्सा हो सकता ulimit और कुछ अन्य आम (या कस्टम) उपकरण के साथ संयुक्त।

2

आप nobody उपयोगकर्ता (लिनक्स पर) के रूप में स्क्रिप्ट चलाते हैं, यह व्यावहारिक रूप से कहीं नहीं लिख सकते हैं और कोई डाटा नहीं है कि अपनी अनुमतियाँ ठीक तरह से स्थापित पढ़ सकते हैं। लेकिन यह अभी भी उदाहरण के लिए, द्वारा एक DoS हमले का कारण बन सकता:

  • भरने /tmp
  • सभी रैम
  • खाने सब सीपीयू

इसके अलावा खाने, बाहर नेटवर्क कनेक्शन खोला जा सकता है, आदि आदि। आप शायद इन सभी को कर्नेल सीमाओं से बंद कर सकते हैं, लेकिन आप कुछ भूलना चाहते हैं।

तो मुझे लगता है कि नेटवर्क के लिए पहुँच नहीं या वास्तविक हार्ड ड्राइव के साथ एक आभासी मशीन केवल (यथोचित) सुरक्षित मार्ग होगा। शायद पायथन चैलेंज के डेवलपर्स KVM का उपयोग करते हैं, जो सैद्धांतिक रूप से "ऑपरेटिंग सिस्टम द्वारा प्रदान किया जाता है"।

दक्षता के लिए, आप एक ही वी एम में सभी प्रस्तुतियाँ चला सकते हैं। यह आपको बहुत अधिक बचाता है, और सबसे खराब स्थिति में वे केवल एक-दूसरे को बाधा डालते हैं, लेकिन आपका सर्वर नहीं।

3

क्रोट (2) के अलावा एक आधुनिक लिनक्स पर आप फोर्क (2) के बजाय क्लोन (2) का उपयोग कर प्रक्रिया को और प्रतिबंधित कर सकते हैं। वहाँ कई दिलचस्प क्लोन (2) झंडे हैं:

CLONE_NEWIPC (new namespace for semaphores, shared memory, message queues) 
CLONE_NEWNET (new network namespace - nice one) 
CLONE_NEWNS (new set of mountpoints) 
CLONE_NEWPID (new set of process identifiers) 
CLONE_NEWUTS (new hostname, domainname, etc) 

इससे पहले इस कार्यक्षमता OpenVZ में लागू है और फिर नदी के ऊपर विलय कर दिया गया था, इसलिए समझौता कर्नेल के लिए कोई जरूरत नहीं अब और नहीं है।

1

http://codepad.org/about (एक सार्वजनिक कोड चिपकाने/चल रहा है सेवा के रूप में!) एक ऐसी प्रणाली को सफलतापूर्वक लागू किया गया है

codepad.org एक ऑनलाइन संकलक/दुभाषिया, और एक सरल सहयोग उपकरण है। यह एक पेस्टबिन है जो आपके लिए कोड निष्पादित करता है। [...]

यह कैसे काम करता

कोड निष्पादन एक पर्यवेक्षक geordi के आधार पर द्वारा नियंत्रित किया जाता। रणनीति सब कुछ चलाने के लिए है, जिसमें कई सिस्टम कॉल अस्वीकृत या अनदेखा किए जाते हैं।कम्पाइलर और अंतिम निष्पादन योग्य दोनों को सख्त संसाधन सीमा के साथ, क्रोट जेल में निष्पादित किया जाता है। पर्यवेक्षक हास्केल में लिखा गया है।

[...]

जब आपके एप्लिकेशन दूरस्थ कोड निष्पादन है, तो आप सुरक्षा की समस्याओं की उम्मीद है। बस chroot और ptrace पर्यवेक्षक पर भरोसा करने के बजाय, मैं कुछ अतिरिक्त सावधानियों लिया है:

  • पर्यवेक्षक आभासी मशीनों, जो इस प्रकार है कि वे बाहर जाने वाले कनेक्शन बनाने में असमर्थ होते हैं firewalled कर रहे हैं पर चलने संसाधित करता है।

  • वर्चुअल मशीन चलाने वाली मशीनों को भी फ़ायरवॉल किया जाता है, और समय-समय पर उनके स्रोत छवियों से बहाल किया जाता है।

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