2012-04-03 6 views
5

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

वापस अंत एक जीएनयू/लिनक्स समर्पित मशीन, जहां एक उपयोगकर्ता, इस तरह के सभी उपयोगकर्ताओं के उपयोगकर्ताओं को समूह का हिस्सा होने के नाते प्रत्येक प्रतियोगी के लिए बनाया जाएगा है। किसी भी विशेष उपयोगकर्ता द्वारा भेजे गए स्रोत उपयोगकर्ता की होम निर्देशिका में संग्रहीत किए जाएंगे, फिर विभिन्न परीक्षण मामलों के खिलाफ सत्यापित किए जाने के लिए संकलित और निष्पादित किए जाएंगे।

मैं चाहता हूं कि स्रोतों के लिए लिनक्स सिस्टम कॉल के उपयोग को प्रतिबंधित करना है। ऐसा इसलिए है क्योंकि समस्याओं को प्लेटफॉर्म-स्वतंत्र समाधान की आवश्यकता होती है, जबकि असुरक्षित स्रोत के लिए सिस्टम कॉल सक्षम करना एक संभावित सुरक्षा उल्लंघन है। ऐसे स्रोतों को सफलतापूर्वक एफएस में रखा जा सकता है, यहां तक ​​कि संकलित भी किया जा सकता है, लेकिन कभी नहीं चलाया जा सकता है। जब भी सिस्टम कॉल वाले स्रोत भेजे जाते हैं तो मैं अधिसूचित होना चाहता हूं। - स्रोत पहले से ही सिस्टम में जाँच की है, लेकिन अभी तक संकलित नहीं

  • मोर्चा के अंत/पूर्व संकलन विश्लेषण:

    अब तक, मैं निम्नलिखित स्थानों पर जहां इस तरह के चेकर रखा जा सकता है देखते हैं। सिस्टम कॉल नाम के खिलाफ सरल पाठ परीक्षक। प्लेटफार्म-निर्भर, कंपाइलर-स्वतंत्र, भाषा-निर्भर समाधान।

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

तो सवाल यह है: करता है जीएनयू/लिनक्स प्रणाली को प्रतिबंधित करने के व्यवस्थापक एक usergroup, उपयोगकर्ता या विशेष प्रक्रिया के लिए उपयोग कॉल के लिए एक अवसर प्रदान करते हैं? यह एक सुरक्षा नीति या हल्के जीएनयू उपयोगिता हो सकती है।

मैंने Google की कोशिश की, लेकिन Google ने आज मुझे नापसंद किया।

+0

_ फ़्रंट-एंड/प्री-संकलन विश्लेषण_ ← प्रीप्रोसेसर चालें इसे आसानी से बच सकती हैं। 'Seccomp' है जो एक ऐसा तरीका है जिसमें एक प्रक्रिया केवल पूर्व-खुली पाइप को पढ़/लिख सकती है। यह 'prctl() 'कॉल के माध्यम से सक्षम है। SO पर यहां समान प्रश्न हैं: http://www.google.com/search?q=seccomp+site%3Astackoverflow.com&btnG=Buscar&oe=utf-8 – ninjalj

+0

@ निंजल ने कोशिश की, लेकिन नहीं मिला। एक लिंक साझा करने के लिए मन? – iehrlich

+0

बस मेरी पिछली टिप्पणी के लिए एक लिंक जोड़ा गया। – ninjalj

उत्तर

7

मोड 1 seccomp एक प्रक्रिया ठीक चार syscalls करने के लिए स्वयं को सीमित करने की अनुमति देता है: read, write, sigreturn, और _exit। इसका उपयोग गंभीर रूप से सैंडबॉक्स कोड के लिए किया जा सकता है, क्योंकि seccomp-nurse करता है।

mode 2 seccomp (लेखन के समय Ubuntu 12.04 में पाया गया है या अपना स्वयं का कर्नेल पैच) सिस्को फ़िल्टरिंग में अधिक लचीलापन प्रदान करता है।उदाहरण के लिए, आप फ़िल्टर सेट अप कर सकते हैं, फिर exec परीक्षण के तहत प्रोग्राम। chroot या unshare का उचित उपयोग इसे किसी भी अन्य "दिलचस्प" में फिर से exec से रोकने के लिए उपयोग किया जा सकता है।

+1

@suddnely_me मैंने बस एक और विकल्प के बारे में सोचा, अगर seccomp बाहर नहीं निकलता है: एक [NaCL] (https://developers.google.com/native-client/)-आधारित सैंडबॉक्स जैसे [ZeroVM] (http://zerovm.org/)। – ephemient

3

मुझे लगता है कि आपको सिस्टम कॉल को बेहतर तरीके से परिभाषित करने की आवश्यकता है। मेरा मतलब है,

cat <<EOF > hello.c 
#include <stdio.h> 
int main(int argc,char** argv) { 
    fprintf(stdout,"Hello world!\n"); 
    return 0; 
} 
EOF 
gcc hello.c 
strace -q ./a.out 

दर्शाता है कि यहां तक ​​कि एक स्पष्ट रूप से मामूली कार्यक्रम ~ 27 सिस्टम कॉल करता है। आप (मुझे लगता है) "मानक सी लाइब्रेरी" पर कॉल की अनुमति देना चाहते हैं, लेकिन बदले में वे सिस्टम कॉल के संदर्भ में लागू किए जाएंगे। मुझे लगता है कि मैं जो कहने की कोशिश कर रहा हूं वह यह है कि रन-टाइम जांच आपके विचार से कम व्यवहार्य है (strace या इसी तरह के समान)।

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

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