ओपन-सोर्स Sandboxed API (SAPI) प्रोजेक्ट, Google के Sandbox2 ओपन-सोर्स प्रोजेक्ट पर आधारित है. इसका मकसद, C/C++ लाइब्रेरी की सैंडबॉक्सिंग को आसान बनाना है.
सैंडबॉक्स जनरेट करने के API के तीन मुख्य फ़ायदे हैं:
पूरे प्रोग्राम को सैंडबॉक्स करने या प्रोग्राम के किसी हिस्से को सैंडबॉक्स करने के लिए, सोर्स कोड में बदलाव करने के बजाय, SAPI की मदद से अलग-अलग C/C++ लाइब्रेरी को सैंडबॉक्स किया जा सकता है. इस वजह से, SAPI की मदद से मुख्य प्रोग्राम को C/C++ लाइब्रेरी में कोड एक्ज़ीक्यूट करने से जुड़ी जोखिमों से अलग रखा जाता है.
हमारा वर्किंग मोटो यह है: सैंडबॉक्स एक बार, इस्तेमाल हर जगह. सैंडबॉक्स किए गए एपीआई की मदद से सैंडबॉक्स की गई लाइब्रेरी को आसानी से फिर से इस्तेमाल किया जा सकता है. इससे आने वाले समय में होने वाले प्रोजेक्ट के लिए, डेवलपर पर काम का बोझ कम हो जाता है. Sandboxed API से पहले, Google में इस्तेमाल किए जाने वाले सैंडबॉक्स के लिए, प्रोजेक्ट के हर नए इंस्टेंस के साथ अतिरिक्त काम करना पड़ता था. भले ही, वह एक ही सॉफ़्टवेयर लाइब्रेरी का फिर से इस्तेमाल करता हो. सैंडबॉक्स वाली प्रोसेस पर लागू होने वाली Sandbox2 की नीतियों और अन्य पाबंदियों को हर बार फिर से लागू करना पड़ता था. साथ ही, कोड के भरोसेमंद और गैर-भरोसेमंद हिस्सों के बीच डेटा ट्रांसफ़र करने के तरीकों को नए सिरे से डिज़ाइन करना पड़ता था.
हर SAPI लाइब्रेरी, सुरक्षा से जुड़ी एक तय नीति का इस्तेमाल करती है. इसके उलट, सैंडबॉक्स किए गए सामान्य प्रोजेक्ट में, सुरक्षा से जुड़ी नीतियों में इस्तेमाल की गई सभी लाइब्रेरी के कुल syscall/resource फ़ुटप्रिंट को शामिल करना ज़रूरी होता है.
SAPI प्रोजेक्ट को Google Sandbox टीम के सदस्यों ने डिज़ाइन और डेवलप किया है. साथ ही, वे ही इसका रखरखाव करते हैं. यह फ़ील्ड में टेस्ट किए गए Sandbox2 का भी इस्तेमाल करता है. फ़िलहाल, कई इंटरनल प्रोजेक्ट, प्रोडक्शन वर्कलोड को अलग करने के लिए SAPI का इस्तेमाल कर रहे हैं.
क्विक स्टार्ट
Sandboxed API का इस्तेमाल शुरू करने के लिए, यह तरीका अपनाएं:
- ज़रूरी डिपेंडेंसी इंस्टॉल करें. यहां यह माना गया है कि Debian 10
Buster का इस्तेमाल किया जा रहा है:
$ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" |
sudo tee /etc/apt/sources.list.d/bazel.list $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
python3-pip libclang-7-dev $ pip3 install clang - क्लोन करें और बिल्ड चलाएं:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api $ bazel build …
- इन उदाहरणों में से कोई एक आज़माएं:
$ bazel run //sandboxed_api/examples/stringop:main_stringop
उपलब्ध दस्तावेज़
सैंडबॉक्स किए गए एपीआई के बारे में ज़्यादा जानकारी यहां उपलब्ध है:
Sandboxed API के बारे में जानकारी — इसमें Sandboxed API (SAPI) और इसके मुख्य सिद्धांतों के बारे में बताया गया है.
शुरू करना — इसमें एपीआई के सैंडबॉक्स किए गए वर्शन का अपना SAPI बनाने के बारे में दिशा-निर्देश दिए गए हैं.
नियम बनाना — इसमें बताया गया है कि अपनी SAPI लाइब्रेरी बनाने के लिए, sapi_library() बिल्ड नियम का इस्तेमाल कैसे करें.
वैरिएबल — इसमें एसएपीआई टाइप के इस्तेमाल के बारे में बताया गया है. इनकी ज़रूरत तब पड़ती है, जब पॉइंटर को सामान्य टाइप और मेमोरी ब्लॉक में पास किया जाता है.
लेन-देन — इसमें बताया गया है कि फ़ंक्शन कॉल को मॉनिटर करने के लिए, SAPI के लेन-देन वाले मॉड्यूल का इस्तेमाल कैसे करें.
शब्दावली
Sandbox2 | Google का ओपन-सोर्स प्रोजेक्ट, जो SAPI में सैंडबॉक्सिंग लेयर उपलब्ध कराता है. |
Sandboxee | Sandbox2 सैंडबॉक्स में बाइनरी को लागू किया जा रहा है. इसके बारे में जानने के लिए, Sandbox2 का दस्तावेज़ देखें. SAPI के संदर्भ में, यह सैंडबॉक्स की गई C/C++ लाइब्रेरी है. |
SAPI | Sandboxed API, Google का ओपन-सोर्स प्रोजेक्ट है. यह Sandboxed Libraries बनाने की सुविधा देता है. |
SAPI लाइब्रेरी | SAPI से जनरेट की गई लाइब्रेरी. इसमें Sandboxed Library, Sandbox2 कोड, और SAPI रनटाइम कोड शामिल होता है. |
SAPI ऑब्जेक्ट | यह C++ ऑब्जेक्ट है. इसे होस्ट कोड में शामिल किया जाता है. यह ओरिजनल टाइप के बजाय SAPI टाइप का इस्तेमाल करके, सैंडबॉक्स की गई लाइब्रेरी के लिए इंटरफ़ेस उपलब्ध कराता है. |
SAPI के टाइप | SAPI, पॉइंटर को सामान्य टाइप और मेमोरी ब्लॉक में पास करते समय ज़रूरी खास तरह के टाइप उपलब्ध कराता है. |
SAPI Transaction | इस मॉड्यूल का इस्तेमाल, सैंडबॉक्स की गई लाइब्रेरी के सैंडबॉक्स स्टेटस को मैनेज करने के लिए किया जाता है. |
आरपीसी स्टब | यह Sandbox2 में रैप किया गया रिमोट प्रोसीजर कॉल (आरपीसी) कम्यूनिकेशन स्टब है. इसका इस्तेमाल, SAPI ऑब्जेक्ट और सैंडबॉक्स की गई लाइब्रेरी के बीच डेटा ट्रांसफ़र करने के लिए किया जाता है. |
होस्ट कोड | यह ऐसा कोड होता है जो सैंडबॉक्स की गई लाइब्रेरी का इस्तेमाल करता है और इसमें SAPI ऑब्जेक्ट शामिल होता है. |
Sandboxed API में योगदान देना
अगर आपको योगदान देना है, तो कृपया CONTRIBUTING.md पढ़ें और हमें पुल अनुरोध भेजें.गड़बड़ियों की शिकायत भी की जा सकती है या सुविधाओं के लिए अनुरोध किए जा सकते हैं.
अगर आपको डेवलपर से बात करनी है या प्रॉडक्ट के मुख्य अपडेट के बारे में सूचनाएं चाहिए, तो हमारे Google ग्रुप में शामिल हों: sandboxed-api-users.