Google अश्वेत समुदायों के लिए नस्लीय इक्विटी को आगे बढ़ाने के लिए प्रतिबद्ध है। देखो कैसे।
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

विक्रेता Init

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

विक्रेता - vendor_init को विक्रेता-विशिष्ट अनुमतियों के साथ /vendor में पाए गए कमांड चलाने के लिए एक अलग सुरक्षा-संवर्धित लिनक्स (SELinux) डोमेन /vendor का उपयोग करके इस छेद को बंद करने के लिए डिज़ाइन किया गया है।

तंत्र

विक्रेता init एक प्रारंभिक u:r:vendor_init:s0 को बूट प्रक्रिया में SELinux संदर्भ u:r:vendor_init:s0 । इस SELinux संदर्भ में डिफ़ॉल्ट init संदर्भ की तुलना में बहुत कम अनुमतियाँ हैं और इसकी पहुंच फ़ाइलों, संपत्तियों, आदि तक ही सीमित है जो या तो विक्रेता-विशिष्ट हैं या स्थिर सिस्टम-विक्रेता ABI का हिस्सा हैं।

Init प्रत्येक स्क्रिप्ट को यह देखने के लिए लोड करता है कि क्या उसका पथ /vendor साथ शुरू होता है और यदि हां, तो यह एक संकेत के साथ टैग करता है कि उसके आदेश विक्रेता init संदर्भ में चलने चाहिए। प्रत्येक इनिट बिलिन को एक बूलियन के साथ एनोटेट किया जाता है जो निर्दिष्ट करता है कि क्या विक्रेता इनिट उपप्रक्रम में चलाया जाना चाहिए या नहीं:

  • अधिकांश आदेश जो फ़ाइल सिस्टम तक पहुंचते हैं, उन्हें विक्रेता init उपप्रकार में चलाने के लिए एनोटेट किया जाता है और इसलिए इसे विक्रेता init SEPolicy के अधीन किया जाता है।
  • अधिकांश आदेश जो आंतरिक init राज्य को प्रभावित करते हैं (जैसे, सेवाओं को शुरू करना और रोकना) सामान्य init प्रक्रिया के भीतर चलाए जाते हैं। इन आदेशों से अवगत कराया जाता है कि एक विक्रेता स्क्रिप्ट उन्हें अपने स्वयं के गैर- SELinux अनुमतियों को संभालने के लिए बुला रही है।

Init के मुख्य प्रोसेसिंग लूप में एक चेक होता है कि यदि एक वेंडर को सबप्रोसेस में चलाने के लिए एनोटेट किया जाता है और वेंडर स्क्रिप्ट से उत्पन्न होता है, तो कमांड को इंटर-प्रोसेस कम्युनिकेशन (IPC) के माध्यम से वेंडर इनिट सबप्रोसेस में भेजा जाता है, जो कमांड चलाता है और परिणाम को वापस init पर भेजता है।

वेंडर इनिट का उपयोग करना

विक्रेता init डिफ़ॉल्ट रूप से सक्षम है और इसके प्रतिबंध /vendor विभाजन में मौजूद सभी init स्क्रिप्ट पर लागू होते हैं। वेंडर इनिट उन विक्रेताओं के लिए पारदर्शी होना चाहिए जिनकी स्क्रिप्ट पहले से ही सिस्टम तक केवल फाइलों, संपत्तियों आदि तक नहीं पहुंच रही है।

हालाँकि, यदि किसी दिए गए विक्रेता स्क्रिप्ट में आदेश विक्रेता प्रतिबंध प्रतिबंधों का उल्लंघन करते हैं, तो आदेश विफल हो जाएंगे। फेलिंग कमांड के पास कर्नेल लॉग (dmesg के साथ दिखाई देता है) में एक लाइन होती है जो init से विफलता का संकेत देती है। एक SELinux ऑडिट किसी भी असफल कमांड के साथ होता है जो SELinux नीति के कारण विफल हुआ। एक SELinux ऑडिट सहित विफलता का उदाहरण:

type=1400 audit(1511821362.996:9): avc: denied { search } for pid=540 comm="init" name="nfc" dev="sda45" ino=1310721 scontext=u:r:vendor_init:s0 tcontext=u:object_r:nfc_data_file:s0 tclass=dir permissive=0
init: Command 'write /data/nfc/bad_file_access 1234' action=boot (/vendor/etc/init/hw/init.walleye.rc:422) took 2ms and failed: Unable to write to file '/data/nfc/bad_file_access': open() failed: Permission denied

यदि कोई आदेश विफल रहता है, तो दो विकल्प हैं:

  • यदि किसी इच्छित प्रतिबंध के कारण कमांड विफल हो रही है (जैसे कि यदि कमांड सिस्टम फाइल या प्रॉपर्टी को एक्सेस कर रहा है), तो कमांड को केवल स्थिर इंटरफेस से गुजरते हुए ट्रेबल-फ्रेंडली तरीके से फिर से लागू किया जाना चाहिए। नेवरल नियम स्थिर सिस्टम-वेंडर ABI का हिस्सा नहीं है जो सिस्टम फ़ाइलों तक पहुँचने के लिए अनुमतियाँ जोड़ने से रोकता है।
  • यदि SELinux लेबल नया है और पहले से ही सिस्टम vendor_init.te में अनुमतियाँ नहीं दी गई है और न ही अयोग्य नियमों के माध्यम से अनुमति नहीं दी गई है, तो नए लेबल को उपकरण-विशिष्ट vendor_init.te में अनुमतियाँ दी जा सकती हैं।

Android 9 से पहले लॉन्च होने वाले उपकरणों के लिए, डिवाइस-विशिष्ट vendor_init.te फ़ाइल में vendor_init.te - vendor_init.te - data_between_core_and_vendor_violators को जोड़कर नियमों को दरकिनार किया जा सकता है।

कोड स्थान

विक्रेता init आईपीसी के लिए तर्क का बड़ा हिस्सा सिस्टम / कोर / init / subcontext.cpp में है

आदेशों की तालिका सिस्टम / कोर / init / BuiltinFunctionMap में BuiltinFunctionMap वर्ग में है और इसमें एनोटेशन शामिल हैं जो इंगित करते हैं कि कमांड को विक्रेता init उपप्रकार में चलना चाहिए।

विक्रेता init के लिए SEPolicy सिस्टम / sepolicy में निजी ( सिस्टम / sepolicy / निजी / विक्रेता_init.te ) और सार्वजनिक ( सिस्टम / sepolicy / सार्वजनिक / विक्रेता_init.te ) निर्देशिका में विभाजित है।