2011-12-10 13 views
9

मैं एक साधारण ऑनलाइन सेवा है जहाँ लोगों को अपने सर्वर जहां यह तो व्याख्या की है/संकलित और मार डाला/परीक्षण किया करने के लिए स्रोत कोड, के रूप में उनके समाधान प्रस्तुत करने, द्वारा प्रोग्रामिंग अभ्यास हल कर सकते हैं निर्माण के बारे में सोच रहा हूँ।सर्वर पर बाहरी जावा स्रोत कोड निष्पादित करें - सुरक्षा और संसाधनों को सीमित करें?

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

मेरा मतलब यह डिस्क के लिए करने के लिए

  • लिखने सक्षम नहीं होना चाहिए
  • एक्स धागे की तुलना में अधिक एक्स एमबी मेमोरी की तुलना में अधिक एक्स सेकंड से
  • रन अधिक बनाने
  • उपयोग
  • निष्पादित बाहरी अनुप्रयोग
  • आदि

मैं प्रत्येक स्क्रिप्ट को सैंडबॉक्स में कैसे रख सकता हूं?

मैं क्या पढ़ा है SecurityManager वह सब करने में सक्षम हो प्रतीत नहीं होता है से

...

+3

संभावित डुप्लिकेशंस: [जावा एप्लिकेशन में दुर्भावनापूर्ण कोड के विरुद्ध सैंडबॉक्स] (http://stackoverflow.com/questions/502218/sandbox-against-malicious-code-in-a-java- अनुप्रयोग) – edwardw

+0

धन्यवाद टिप्पणी! वहां पर उत्तर वास्तव में अच्छे लगते हैं :) – stephanos

+3

@stephanos: जावा पक्ष (सुरक्षा प्रबंधक आदि) पर क्या किया जा सकता है इसके अतिरिक्त, यदि आपका सर्वर एक अन * एक्स-जैसी प्रणाली है तो आप उपयोगकर्ता में जावा भी इंस्टॉल कर सकते हैं खाता (जड़ के बिना) और उस खाते पर कोटा डालें, यह सुनिश्चित करने के लिए कि यह बहुत अधिक संसाधनों का उपभोग नहीं करेगा। इसके अलावा, अगर यह मेरे लिए होता, तो मैं बस एक बेहतर सैंडबॉक्स का उपयोग करता हूं: मैं एक पूर्ण ओएस वर्चुअलाइज करता हूं और वर्चुअल मशीन के अंदर जेवीएम चलाता हूं। मेरे सर्वर (सर्वर) में हैकिंग करने का कोई खतरा नहीं है। निश्चित रूप से, इसके लिए थोड़ा और संसाधन की आवश्यकता है लेकिन हार्डवेयर वर्चुअलाइजेशन अब दोनों निष्पादक और सर्वव्यापी है। – TacticalCoder

उत्तर

0

तुम एक JVM बंदरगाह कि गूगल एप इंजन से सक्षम श्वेतसूची वाले वर्गों के समान है का वर्णन किया है ।

कैसे आप एक JVM यहाँ sandbox सकता का एक बहुत अच्छा विवरण है: How does google app engine sandbox work?

2

ठीक है, आप AppArmor या SELinux तरह सुरक्षित कोड निष्पादन सुनिश्चित करने के लिए कुछ सामान्य सुरक्षा प्रणाली का उपयोग कर सकते हैं। यह न केवल जावा, पायथन, आदि अनुप्रयोगों के लिए काम करता है, बल्कि बैश-स्क्रिप्ट्स, बाइनरी एक्जिक्यूटिव आदि के लिए भी काम करता है। SELinux के साथ सब पर काम नहीं किया है, लेकिन इस जो सब कुछ आप को छोड़कर "एक्स सेकंड से अधिक चल रहा है" का उल्लेख करता है कि AppArmor सुरक्षा प्रोफ़ाइल का एक सरल उदाहरण है - यह टाइमआउट तंत्र द्वारा किया जा सकता (मैं एक नया उपयोगकर्ता हूँ, इसलिए तोप पोस्ट एक दूसरी कड़ी यहाँ O_o ..)

#include <tunables/global> 

/path/to/executable { 
    #include <abstractions/base> 

    # http://linux.die.net/man/2/setrlimit 

    # limit memory (address space) 
    set rlimit as <= 150M, 
    # limit core dump file http://linux.die.net/man/5/core 
    set rlimit core <= 2M, 
    # allow to create files only this size at max 
    set rlimit fsize <= 1M, 
    # limits number of threads (fork bomb won't go! :)) 
    set rlimit nproc <= 10, 
    # program will have access to stuff defined in abstractions/base and 
    # to the file defined below. Nothing else. 
    /path/to/file.txt rw, 
} 

सैंडबॉक्स में प्रत्येक स्क्रिप्ट लगाने के बारे में क्या - क्या आप script1 के लिए कई समान प्रोफ़ाइल बना सकते हैं, script2 आदि यह भी जिस तरह से है अगर आप के लिए विभिन्न अनुमतियों चाहते अलग-अलग व्यायाम लोग आपकी साइट पर हल करेंगे।

$sudo apt-get install timeout 
$timeout 3 ./binary #limits execution of ./binary to 3 seconds 

मैं आपको यह भी संकलित proramming भाषाओं के लिए संकलन समय की सीमा आप किसी भी है, तो अनुशंसा करना चाहते हैं:

और यह समय समाप्ति का उपयोग करने का एक उदाहरण है। उदाहरण के लिए, C++ किसी एक मुश्किल टेम्पलेट या

#include </dev/urandom> 

कि संकलन समय पर CPU- सघन काम का कारण होगा लिख ​​सकते हैं।

1

आप जावा स्क्रिप्टिंग एपीआई का उपयोग कर सकते हैं। कई भाषाओं का उपयोग स्क्रिप्ट, जावा के रूप में भी किया जा सकता है। इसके अलावा स्क्रिप्टिंग एपीआई के साथ एक भाषा को लपेटने के लिए ज्यादा प्रोग्रामिंग की आवश्यकता नहीं है।http://worldwizards.blogspot.com/2009/08/java-scripting-api-sandbox.html इंगित करता है कि सैंडबॉक्सिंग कैसे प्रदान करें।

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