सैंडबॉक्स एपीआई के बारे में जानकारी

Sandboxed API (SAPI), जाने-माने Sandbox2 प्रोजेक्ट से बेहतर बनता है. इस पेज पर, SAPI के डिज़ाइन आर्किटेक्चर और मुख्य सिद्धांतों के बारे में बताया गया है.

खास जानकारी

SAPI को डेवलपर को सैंडबॉक्सिंग के लिए C/C++ लाइब्रेरी तैयार करने के लिए टूल उपलब्ध कराने के साथ-साथ C/C++ लाइब्रेरी के सैंडबॉक्स किए गए वर्शन से संपर्क करने के लिए ज़रूरी एपीआई देने के लिए डिज़ाइन किया गया है.

यह डायग्राम, SAPI सैंडबॉक्स की गई C/C++ लाइब्रेरी का आर्किटेक्चर दिखाता है:

एसएपीआई डायग्राम

SAPI, SAPI लाइब्रेरी और होस्ट कोड के बीच मैन्युअल और ऑटोमैटिक (कस्टम पॉइंटर एट्रिब्यूट के आधार पर) मेमोरी सिंक्रोनाइज़ेशन (अरे, स्ट्रक्चर) के लिए प्रिमिटिव भी उपलब्ध कराता है.

आखिर में, हाई-लेवल ट्रांज़ैक्शन एपीआई, SAPI लाइब्रेरी की निगरानी करने की सुविधा देता है.साथ ही, ऐसा न हो पाने पर, उसे रीस्टार्ट कर देता है. जैसे, सुरक्षा के उल्लंघनों, क्रैश या संसाधनों के खत्म होने की वजह से.

Sandbox2

ओपन सोर्स प्रोजेक्ट Sandbox2 को Google के सुरक्षा इंजीनियर ने डेवलप किया है और वे ही इसका रखरखाव करते हैं. SAPI, सैंडबॉक्सिंग की एक मुख्य टेक्नोलॉजी है. Sandbox2 में तीन मुख्य कॉम्पोनेंट होते हैं, Sandbox नीति, एक्ज़िक्यूटर, और Sandboxee.

सैंडबॉक्स नीति

सैंडबॉक्स नीति से पता चलता है कि सैंडबॉक्स लाइब्रेरी का इस्तेमाल करने पर, पाबंदी किस तरह लागू होती है. ऐसा करने के लिए, यह बताना ज़रूरी है कि कौनसे syscalls चलाए जा सकते हैं. SAPI उसी तरीके का इस्तेमाल करता है जो Sandbox2 में होता है. सैंडबॉक्स नीति को डिज़ाइन और तय करने के तरीके के बारे में ज़्यादा जानकारी के लिए, Sandbox2 के लिए सैंडबॉक्स नीति सेक्शन और शुरुआत करना पेज देखें.

SAPI, डिफ़ॉल्ट नीति का इस्तेमाल करता है. इसके बजाय, आपके पास एक खास सैंडबॉक्स नीति का इस्तेमाल करने का विकल्प है. इसके लिए, आपको इसकी Sandbox.h हेडर फ़ाइल में जानकारी देनी होगी और इसे sapi_library बिल्ड नियम में तर्क के तौर पर पास करना होगा.

सैंडबॉक्स की गई लाइब्रेरी

यह सैंडबॉक्स की गई C/C++ लाइब्रेरी है. इसे Sandbox2 से मिले सीमित सैंडबॉक्स एनवायरमेंट में एक्ज़ीक्यूट किया जाएगा. कुल मिलाकर, सैंडबॉक्स की गई लाइब्रेरी में ऐसे ज़रूरी फ़ंक्शन दिखते हैं जिन्हें होस्ट कोड से इस्तेमाल किया जा सकता है.

सैंडबॉक्स की गई लाइब्रेरी को sapi_library बनाने के नियम के साथ बनाया गया है. इसमें पसंद के मुताबिक बनाई गई सैंडबॉक्स नीति तय की जा सकती है. इससे यह तय किया जा सकता है कि एक्ज़ीक्यूशन की प्रोसेस सीमित है. लाइब्रेरी के आधार पर, आपको रैपर या स्टब कोड (libcurl देखें) लिखना पड़ सकता है. हालांकि, SAPI वर्शन तैयार करते समय, आपको C/C++ लाइब्रेरी के सोर्स कोड में बदलाव करने की उम्मीद नहीं की जाती.

SAPI ऑब्जेक्ट और RPC स्टब

SAPI ऑब्जेक्ट एक C++ ऑब्जेक्ट है, जो सैंडबॉक्स की गई लाइब्रेरी के एपीआई को दिखाता है. यह होस्ट कोड से आरपीसी स्टब पर कॉल फ़ॉरवर्ड करता है. यह सैंडबॉक्स की गई लाइब्रेरी के साथ-साथ एसएपीआई लाइब्रेरी में एम्बेड है.

बिल्ड सिस्टम, ये दो एलिमेंट अपने-आप जनरेट करता है. इसके लिए, sapi_library() बिल्ड नियम का इस्तेमाल किया जाता है. SAPI दो बिल्ड सिस्टम के साथ काम करता है, Google के Bazel और CMake.

होस्ट कोड

होस्ट कोड, SAPI लाइब्रेरी से मिले लॉजिक को लागू करता है. आम तौर पर, C/C++ लाइब्रेरी के सैंडबॉक्स न किए गए वर्शन का इस्तेमाल, इसी वजह से होता है. इसी तरह, होस्ट कोड कॉल फ़ंक्शन जो SAPI लाइब्रेरी से एक्सपोर्ट करता है और सैंडबॉक्स से डेटा पास करता है और उससे डेटा हासिल करता है.

SAPI लाइब्रेरी का इस्तेमाल करने के लिए, होस्ट कोड को बदलना ज़रूरी है. खास तौर पर, लाइब्रेरी के फ़ंक्शन को कॉल करना संभव नहीं है, क्योंकि लाइब्रेरी एक अलग सैंडबॉक्स प्रोसेस में होती है. इसलिए, SAPI ऐसे टूल उपलब्ध कराता है जो एक SAPI ऑब्जेक्ट बनाते हैं, जो प्रॉक्सी के तौर पर SAPI लाइब्रेरी को कॉल करता है.

कॉन्सेप्ट

Bazel बिल्ड के नियम

SAPI प्रोजेक्ट में C/C++ लाइब्रेरी सैंडबॉक्स करने के लिए, Bazel बिल्ड के दो नियम उपलब्ध हैं:

  • sapi_library() – उन सभी आउटपुट को बनाता है जो C/C++ लाइब्रेरी को Sandbox2 Sandboxee के तौर पर सैंडबॉक्स करने के लिए ज़रूरी हैं. बिल्ड आउटपुट को होस्ट कोड बाइनरी बनाने के लिए इस्तेमाल किए गए cc_binary() नियम की डिपेंडेंसी के तौर पर इस्तेमाल किया जा सकता है.
  • sapi_interface() – यह हेडर अपने-आप जनरेट होता है, जिसे होस्ट कोड बाइनरी में शामिल किया जा सकता है.

बिल्ड के नियमों के बारे में ज़्यादा जानने के लिए, नियम बनाना लेख पढ़ें.

वैरिएबल

SAPI कई खास टाइप उपलब्ध कराता है. इन्हें SAPI टाइप कहते हैं. हमारा सुझाव है कि आप होस्ट कोड में इन्हें इस्तेमाल करें. SAPI टाइप की ज़रूरत मुख्य वजह है, प्रोसेस की वजह से. इस वजह से, होस्ट कोड और सैंडबॉक्स की गई लाइब्रेरी के बीच मेमोरी और अलगाव को देखा जा सकता है.

इस विषय की ज़्यादा जानकारी और आम तौर पर इस्तेमाल होने वाले कुछ एसएपीआई टाइप की खास जानकारी के लिए, वैरिएबल देखें.

लेन-देन

जैसा कि ऊपर बताया गया है, सैंडबॉक्स की गई लाइब्रेरी को कोई भी एपीआई कॉल, RPC लेयर पर पास किया जाता है. इस लेयर पर आने वाली गड़बड़ी को ठीक करने के लिए, आपको गड़बड़ी को सही तरीके से मैनेज करना होगा. SAPI लेन-देन मॉड्यूल यह पक्का करने के लिए ज़रूरी तरीका उपलब्ध कराता है कि सैंडबॉक्स लाइब्रेरी के सभी कॉल, बिना किसी RPC लेवल की समस्या के पूरे हों या काम की गड़बड़ी के साथ लौटाए गए हों.

इस विषय की ज़्यादा जानकारी के लिए, लेन-देन देखें.

रिपोर्ट का इस्तेमाल करना

अपना पहला Sandboxed API प्रोजेक्ट सेट अप करने के लिए, हमारा इस्तेमाल शुरू करना पेज पढ़ें.