सुविधाओं की मदद से, 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" कीवर्ड का इस्तेमाल करके, यह जांच की जा सकती है कि सेवा को उम्मीद के मुताबिक सुविधाएं मिल रही हैं या नहीं. इससे इस सुविधा की रनटाइम टेस्टिंग की जा सकती है.