सुविधाओं की मदद से, Linux प्रोसेस को रूट की तरह ज़्यादातर विशेषाधिकार छोड़ने की अनुमति मिलती है. हालांकि, वे उन विशेषाधिकारों का सबसेट बनाए रखती हैं जिनकी उन्हें अपने फ़ंक्शन को पूरा करने के लिए ज़रूरत होती है. सुविधाओं को मूल रूप से लागू करने की वजह से, फ़ॉर्क और एक्सीक्यूट की गई प्रोसेस को सुविधाएं इनहेरिट नहीं कर सकीं. ऐसा तब तक होता रहा, जब तक कि जिन फ़ाइलों को एक्सीक्यूट किया जा रहा था उनमें फ़ाइल की सुविधाएं कॉन्फ़िगर नहीं की गई थीं. फ़ाइल की सुविधाओं से सुरक्षा से जुड़ा जोखिम भी होता है, क्योंकि फ़ाइल की सुविधाओं वाली फ़ाइल को प्रोसेस करने वाली कोई भी प्रोसेस, उन सुविधाओं का इस्तेमाल कर सकती है.
ऐंबियंट सुविधाओं की मदद से, init की मदद से लॉन्च की गई सिस्टम सेवाएं, अपनी .rc
फ़ाइलों में सुविधाओं को कॉन्फ़िगर कर सकती हैं. इससे, कॉन्फ़िगरेशन को fs_config.c
फ़ाइल में बांटने के बजाय, एक ही फ़ाइल में कॉन्फ़िगर किया जा सकता है. इसका मतलब है कि init की मदद से लॉन्च की गई किसी भी सेवा के लिए, उस सेवा से जुड़ी .rc
फ़ाइल का इस्तेमाल करके, उस सेवा की सुविधाओं को कॉन्फ़िगर किया जा सकता है.
init की मदद से लॉन्च की गई सेवाओं के लिए, सुविधाओं को सेट करने के लिए, ऐंबियंट सुविधाएं सबसे सही तरीका हैं. इस तरीके से, सेवा के कॉन्फ़िगरेशन के सभी पहलुओं को एक .rc
फ़ाइल में रखा जाता है. हमारा सुझाव है कि आप config.fs
फ़ाइलों में, caps सेक्शन का इस्तेमाल करके, फ़ाइल सिस्टम की सुविधाओं को कॉन्फ़िगर करने के बजाय, ऐंबियंट सुविधाओं का इस्तेमाल करें.
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:
पुष्टि करें
Bionic यूनिट टेस्ट में, ऐंबियंट सुविधाओं के लिए यूनिट टेस्ट शामिल होते हैं. इसके अलावा, किसी सेवा के लिए Android init में "capabilities" कीवर्ड का इस्तेमाल करके, यह जांच की जा सकती है कि सेवा को उम्मीद के मुताबिक सुविधाएं मिल रही हैं या नहीं. इससे इस सुविधा की रनटाइम टेस्टिंग की जा सकती है.