इन सुविधाओं की मदद से, Linux प्रोसेस को रूट-लेवल के ज़्यादातर विशेषाधिकारों को छोड़ने की अनुमति मिलती है. हालांकि, वे अपने फ़ंक्शन को पूरा करने के लिए ज़रूरी विशेषाधिकारों को बनाए रख सकती हैं. सुविधाओं को लागू करने के मूल तरीके की वजह से, फ़ोर्क+एक्सेक की गई प्रोसेस के लिए सुविधाओं को इनहेरिट करना मुमकिन नहीं था. ऐसा तब तक होता था, जब तक कि फ़ाइलें चलाने के लिए फ़ाइल की सुविधाएं कॉन्फ़िगर न की गई हों. फ़ाइल की क्षमताओं से सुरक्षा से जुड़ा जोखिम पैदा होता है, क्योंकि फ़ाइल की क्षमताओं के साथ किसी फ़ाइल को चलाने वाली कोई भी प्रोसेस, उन क्षमताओं को हासिल कर सकती है.
ऐम्बिएंट क्षमताओं की मदद से, init की ओर से लॉन्च की गई सिस्टम सेवाएं, अपनी .rc
फ़ाइलों में क्षमताओं को कॉन्फ़िगर कर सकती हैं. इससे कॉन्फ़िगरेशन को .rc
फ़ाइल में अलग-अलग हिस्सों में बांटने के बजाय, एक ही फ़ाइल में कॉन्फ़िगर किया जा सकता है.fs_config.c
इसका मतलब है कि init की ओर से लॉन्च की गई किसी भी सेवा के लिए, सेवा से जुड़ी .rc
फ़ाइल का इस्तेमाल करके, उस सेवा के लिए सुविधाएं कॉन्फ़िगर की जा सकती हैं.
init फ़ंक्शन से लॉन्च की गई सेवाओं के लिए, क्षमताओं को सेट करने का सबसे अच्छा तरीका, आस-पास के डिवाइसों से कनेक्ट करने की सुविधा है. इस तरीके से, सेवा के कॉन्फ़िगरेशन से जुड़े सभी पहलुओं को एक ही .rc
फ़ाइल में रखा जाता है. हमारा सुझाव है कि config.fs
फ़ाइलों में, कैप्स सेक्शन का इस्तेमाल करके फ़ाइल सिस्टम की सुविधाओं को कॉन्फ़िगर करने के बजाय, परिवेश की सुविधाओं का इस्तेमाल करें.
init से लॉन्च नहीं की गई सेवाओं के लिए सुविधाएं सेट करते समय,
fs_config.c
का इस्तेमाल करके, फ़ाइल सिस्टम की सुविधाओं को कॉन्फ़िगर करना जारी रखें.
ऐंबियंट मोड की सुविधाएं चालू करना
किसी सेवा के लिए एंबियंट क्षमताओं को चालू करने के लिए, init में capabilities
कीवर्ड का इस्तेमाल करें. मौजूदा init भाषा के बारे में
जानकारी के लिए, init README.md देखें.
उदाहरण के लिए, AOSP सेवा के लिए आस-पास की सुविधाओं को चालू करने के लिए
wificond
, wificond
सेवा के लिए .rc फ़ाइल सही उपयोगकर्ता और ग्रुप सेट अप करती है. साथ ही, capabilities
कीवर्ड का इस्तेमाल करके, सेवा को तय की गई सुविधाएं देती है:
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
रेफ़रंस के तौर पर लागू करना
रेफ़रंस के तौर पर लागू किया गया Android का सामान्य कर्नेल https://android.googlesource.com/kernel/common/ है
ज़रूरी पैच
ज़रूरी पैच को Android के सभी सामान्य कर्नल वर्शन की ब्रांच में बैकपोर्ट कर दिया गया है.
मुख्य ऐम्बिएंट क्षमताओं वाले पैच https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 को इन वर्शन में बैकपोर्ट किया गया है:
- android-3.18:
- android-4.1:
सुरक्षा से जुड़ी एक छोटी समस्या को ठीक किया गया है. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 इसे इन वर्शन में वापस पोर्ट किया गया है:
- android-3.18:
- android-4.1:
Validation
Bionic यूनिट टेस्ट में, आस-पास की सुविधाओं के लिए यूनिट टेस्ट शामिल होते हैं. इसके अलावा, किसी सेवा के लिए Android init में "capabilities" कीवर्ड का इस्तेमाल किया जा सकता है. इसके बाद, यह जांच की जा सकती है कि सेवा को उम्मीद के मुताबिक सुविधाएं मिली हैं या नहीं. इससे इस सुविधा की रनटाइम टेस्टिंग की जा सकेगी.