परिवेश क्षमता

क्षमताएं लिनक्स प्रक्रियाओं को अधिकांश रूट-जैसे विशेषाधिकारों को छोड़ने की अनुमति देती हैं, जबकि विशेषाधिकारों के सबसेट को बनाए रखते हुए उन्हें अपना कार्य करने की आवश्यकता होती है। क्षमताओं के मूल कार्यान्वयन ने fork+exec'd प्रक्रियाओं के लिए क्षमताओं को प्राप्त करना असंभव बना दिया जब तक कि निष्पादित की जा रही फ़ाइलों में फ़ाइल क्षमताएं कॉन्फ़िगर नहीं की गईं। फ़ाइल क्षमताएँ, बदले में, एक सुरक्षा जोखिम प्रस्तुत करती हैं क्योंकि फ़ाइल क्षमताओं वाली फ़ाइल को निष्पादित करने वाली कोई भी प्रक्रिया उन क्षमताओं को प्राप्त करने में सक्षम होगी।

परिवेशीय क्षमताएं init द्वारा लॉन्च की गई सिस्टम सेवाओं को उनकी .rc फ़ाइलों में क्षमताओं को कॉन्फ़िगर करने की अनुमति देती हैं, fs_config.c फ़ाइल में कॉन्फ़िगरेशन को विभाजित करने के बजाय कॉन्फ़िगरेशन को एक फ़ाइल में लाती हैं। इसका मतलब यह है कि init द्वारा लॉन्च की गई किसी भी सेवा के लिए, आप उस सेवा की क्षमताओं को कॉन्फ़िगर करने के लिए सेवा से जुड़ी .rc फ़ाइल का उपयोग कर सकते हैं।

init द्वारा लॉन्च की गई सेवाओं के लिए क्षमताओं को सेट करने के लिए परिवेशीय क्षमताएं पसंदीदा तंत्र हैं (यह विधि सेवा कॉन्फ़िगरेशन के सभी पहलुओं को एक .rc फ़ाइल में रखती है)। हम config.fs फ़ाइलों में कैप्स अनुभाग का उपयोग करके फ़ाइल सिस्टम क्षमताओं को कॉन्फ़िगर करने के बजाय परिवेश क्षमताओं का उपयोग करने की अनुशंसा करते हैं।

init द्वारा लॉन्च नहीं की गई सेवाओं के लिए क्षमताओं को सेट करते समय, fs_config.c उपयोग करके फ़ाइल सिस्टम क्षमताओं को कॉन्फ़िगर करना जारी रखें।

परिवेशीय क्षमताओं को सक्षम करना

किसी दी गई सेवा के लिए परिवेश क्षमताओं को सक्षम करने के लिए, init में capabilities कीवर्ड का उपयोग करें। वर्तमान init भाषा विवरण के लिए, init README.md देखें।

उदाहरण के लिए, एओएसपी सेवा wificond के लिए परिवेश क्षमताओं को सक्षम करने के लिए, wificond सेवा के लिए .rc फ़ाइल उपयुक्त उपयोगकर्ता और समूहों को सेट करती है और capabilities कीवर्ड का उपयोग करके सेवा को निर्दिष्ट क्षमताएं देती है:

service wificond /system/bin/wificond
    class main
    user wifi
    group wifi net_raw net_admin
    capabilities NET_RAW NET_ADMIN

संदर्भ कार्यान्वयन

संदर्भ कार्यान्वयन एंड्रॉइड सामान्य कर्नेल https://android.googlesource.com/kernel/common/ है

आवश्यक पैच

आवश्यक पैच को सभी प्रासंगिक एंड्रॉइड सामान्य कर्नेल शाखाओं में वापस भेज दिया गया है।

मुख्य परिवेश क्षमता पैच https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 को इसमें बैकपोर्ट किया गया है:

एक छोटा सुरक्षा समाधान https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 को इसमें बैकपोर्ट किया गया है:

मान्यकरण

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